Bläddra i källkod

Close all dialogs on start of new turn in MP

Ivan Savenko 1 år sedan
förälder
incheckning
5f0e6f7ce1
2 ändrade filer med 31 tillägg och 25 borttagningar
  1. 30 25
      client/CPlayerInterface.cpp
  2. 1 0
      client/CPlayerInterface.h

+ 30 - 25
client/CPlayerInterface.cpp

@@ -169,40 +169,44 @@ void CPlayerInterface::initGameInterface(std::shared_ptr<Environment> ENV, std::
 	adventureInt.reset(new AdventureMapInterface());
 }
 
-void CPlayerInterface::playerEndsTurn(PlayerColor player)
+void CPlayerInterface::closeAllDialogs()
 {
-	EVENT_HANDLER_CALLED_BY_CLIENT;
-	if (player == playerID)
+	// remove all active dialogs that do not expect query answer
+	for (;;)
 	{
-		makingTurn = false;
+		auto adventureWindow = GH.windows().topWindow<AdventureMapInterface>();
+		auto infoWindow = GH.windows().topWindow<CInfoWindow>();
 
-		// remove all active dialogs that do not expect query answer
-		for (;;)
-		{
-			auto adventureWindow = GH.windows().topWindow<AdventureMapInterface>();
-			auto infoWindow = GH.windows().topWindow<CInfoWindow>();
+		if(adventureWindow != nullptr)
+			break;
 
-			if(adventureWindow != nullptr)
-				break;
+		if(infoWindow && infoWindow->ID != QueryID::NONE)
+			break;
 
-			if(infoWindow && infoWindow->ID != QueryID::NONE)
-				break;
+		if (infoWindow)
+			infoWindow->close();
+		else
+			GH.windows().popWindows(1);
+	}
 
-			if (infoWindow)
-				infoWindow->close();
-			else
-				GH.windows().popWindows(1);
-		}
+	if(castleInt)
+		castleInt->close();
 
-		if(castleInt)
-			castleInt->close();
+	castleInt = nullptr;
 
-		castleInt = nullptr;
+	// remove all pending dialogs that do not expect query answer
+	vstd::erase_if(dialogs, [](const std::shared_ptr<CInfoWindow> & window){
+		return window->ID == QueryID::NONE;
+	});
+}
 
-		// remove all pending dialogs that do not expect query answer
-		vstd::erase_if(dialogs, [](const std::shared_ptr<CInfoWindow> & window){
-			return window->ID == QueryID::NONE;
-		});
+void CPlayerInterface::playerEndsTurn(PlayerColor player)
+{
+	EVENT_HANDLER_CALLED_BY_CLIENT;
+	if (player == playerID)
+	{
+		makingTurn = false;
+		closeAllDialogs();
 	}
 }
 
@@ -284,6 +288,7 @@ void CPlayerInterface::gamePause(bool pause)
 
 void CPlayerInterface::yourTurn(QueryID queryID)
 {
+	closeAllDialogs();
 	CTutorialWindow::openWindowFirstTime(TutorialMode::TOUCH_ADVENTUREMAP);
 
 	EVENT_HANDLER_CALLED_BY_CLIENT;

+ 1 - 0
client/CPlayerInterface.h

@@ -203,6 +203,7 @@ public: // public interface for use by client via LOCPLINT access
 	void performAutosave();
 	void gamePause(bool pause);
 	void endNetwork();
+	void closeAllDialogs();
 
 	///returns true if all events are processed internally
 	bool capturedAllEvents();