瀏覽代碼

Update town visual on capturing

Ivan Savenko 2 年之前
父節點
當前提交
39f2bef1ab
共有 2 個文件被更改,包括 36 次插入29 次删除
  1. 29 29
      client/CPlayerInterface.cpp
  2. 7 0
      client/NetPacksClient.cpp

+ 29 - 29
client/CPlayerInterface.cpp

@@ -324,13 +324,13 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
 	if (!hero)
 	if (!hero)
 		return;
 		return;
 
 
-	adventureInt->infoBar->requestPopAll();
-	if (details.result == TryMoveHero::EMBARK || details.result == TryMoveHero::DISEMBARK)
-	{
-		if(hero->getRemovalSound() && hero->tempOwner == playerID)
-			CCS->soundh->playSound(hero->getRemovalSound().get());
-	}
-
+	adventureInt->infoBar->requestPopAll();
+	if (details.result == TryMoveHero::EMBARK || details.result == TryMoveHero::DISEMBARK)
+	{
+		if(hero->getRemovalSound() && hero->tempOwner == playerID)
+			CCS->soundh->playSound(hero->getRemovalSound().get());
+	}
+
 	adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.start));
 	adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.start));
 	adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.end));
 	adventureInt->minimap->updateTile(hero->convertToVisitablePos(details.end));
 
 
@@ -372,12 +372,12 @@ void CPlayerInterface::heroMoved(const TryMoveHero & details, bool verbose)
 		}
 		}
 	}
 	}
 
 
-	if(details.stopMovement()) //hero failed to move
-	{
-		stillMoveHero.setn(STOP_MOVE);
-		adventureInt->heroList->update(hero);
-		return;
-	}
+	if(details.stopMovement()) //hero failed to move
+	{
+		stillMoveHero.setn(STOP_MOVE);
+		adventureInt->heroList->update(hero);
+		return;
+	}
 
 
 	adventureInt->heroList->redraw();
 	adventureInt->heroList->redraw();
 
 
@@ -1201,22 +1201,22 @@ void CPlayerInterface::showMapObjectSelectDialog(QueryID askID, const Component
 	GH.pushInt(wnd);
 	GH.pushInt(wnd);
 }
 }
 
 
-void CPlayerInterface::tileRevealed(const std::unordered_set<int3, ShashInt3> &pos)
-{
-	EVENT_HANDLER_CALLED_BY_CLIENT;
-	//FIXME: wait for dialog? Magi hut/eye would benefit from this but may break other areas
-	for (auto & po : pos)
-		adventureInt->minimap->updateTile(po);
-}
-
-void CPlayerInterface::tileHidden(const std::unordered_set<int3, ShashInt3> &pos)
-{
-	EVENT_HANDLER_CALLED_BY_CLIENT;
-	for (auto & po : pos)
-		adventureInt->minimap->updateTile(po);
-}
-
-void CPlayerInterface::openHeroWindow(const CGHeroInstance *hero)
+void CPlayerInterface::tileRevealed(const std::unordered_set<int3, ShashInt3> &pos)
+{
+	EVENT_HANDLER_CALLED_BY_CLIENT;
+	//FIXME: wait for dialog? Magi hut/eye would benefit from this but may break other areas
+	for (auto & po : pos)
+		adventureInt->minimap->updateTile(po);
+}
+
+void CPlayerInterface::tileHidden(const std::unordered_set<int3, ShashInt3> &pos)
+{
+	EVENT_HANDLER_CALLED_BY_CLIENT;
+	for (auto & po : pos)
+		adventureInt->minimap->updateTile(po);
+}
+
+void CPlayerInterface::openHeroWindow(const CGHeroInstance *hero)
 {
 {
 	boost::unique_lock<boost::recursive_mutex> un(*pim);
 	boost::unique_lock<boost::recursive_mutex> un(*pim);
 	GH.pushIntT<CHeroWindow>(hero);
 	GH.pushIntT<CHeroWindow>(hero);

+ 7 - 0
client/NetPacksClient.cpp

@@ -604,6 +604,13 @@ void ApplyClientNetPackVisitor::visitSetObjectProperty(SetObjectProperty & pack)
 		if(gs.isVisible(gs.getObjInstance(pack.id), it->first))
 		if(gs.isVisible(gs.getObjInstance(pack.id), it->first))
 			callInterfaceIfPresent(cl, it->first, &IGameEventsReceiver::objectPropertyChanged, &pack);
 			callInterfaceIfPresent(cl, it->first, &IGameEventsReceiver::objectPropertyChanged, &pack);
 	}
 	}
+
+	if (pack.what == ObjProperty::OWNER)
+	{
+		// invalidate section of map view with our objec and force an update with new flag color
+		CGI->mh->onObjectInstantRemove(gs.getObjInstance(pack.id));
+		CGI->mh->onObjectInstantAdd(gs.getObjInstance(pack.id));
+	}
 }
 }
 
 
 void ApplyClientNetPackVisitor::visitHeroLevelUp(HeroLevelUp & pack)
 void ApplyClientNetPackVisitor::visitHeroLevelUp(HeroLevelUp & pack)