Prechádzať zdrojové kódy

Correctly update battle queue state after changing its state

Ivan Savenko 2 rokov pred
rodič
commit
cf966015bb

+ 36 - 32
client/battle/BattleWindow.cpp

@@ -86,30 +86,34 @@ BattleWindow::BattleWindow(BattleInterface & owner):
 void BattleWindow::createQueue()
 {
 	OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE;
-
-	//create stack queue and adjust our own position
-	bool embedQueue;
-	std::string queueSize = settings["battle"]["queueSize"].String();
-
-	if(queueSize == "auto")
-		embedQueue = GH.screenDimensions().y < 700;
-	else
-		embedQueue = GH.screenDimensions().y < 700 || queueSize == "small";
-
-	queue = std::make_shared<StackQueue>(embedQueue, owner);
-	if(!embedQueue && settings["battle"]["showQueue"].Bool())
-	{
-		//re-center, taking into account stack queue position
-		pos.y -= queue->pos.h;
-		pos.h += queue->pos.h;
-		pos = center();
-	}
-}
-
-BattleWindow::~BattleWindow()
-{
-	CPlayerInterface::battleInt = nullptr;
-}
+
+	//create stack queue and adjust our own position
+	bool embedQueue;
+	bool showQueue = settings["battle"]["showQueue"].Bool();
+	std::string queueSize = settings["battle"]["queueSize"].String();
+
+	if(queueSize == "auto")
+		embedQueue = GH.screenDimensions().y < 700;
+	else
+		embedQueue = GH.screenDimensions().y < 700 || queueSize == "small";
+
+	queue = std::make_shared<StackQueue>(embedQueue, owner);
+	if(!embedQueue && showQueue)
+	{
+		//re-center, taking into account stack queue position
+		pos.y -= queue->pos.h;
+		pos.h += queue->pos.h;
+		pos = center();
+	}
+
+	if (!showQueue)
+		queue->disable();
+}
+
+BattleWindow::~BattleWindow()
+{
+	CPlayerInterface::battleInt = nullptr;
+}
 
 std::shared_ptr<BattleConsole> BattleWindow::buildBattleConsole(const JsonNode & config) const
 {
@@ -140,14 +144,14 @@ void BattleWindow::hideQueue()
 	if (!queue->embedded)
 	{
 		//re-center, taking into account stack queue position
-		pos.y += queue->pos.h;
-		pos.h -= queue->pos.h;
-		pos = center();
-		GH.totalRedraw();
-	}
-}
-
-void BattleWindow::showQueue()
+		pos.y += queue->pos.h;
+		pos.h -= queue->pos.h;
+		pos = center();
+	}
+	GH.totalRedraw();
+}
+
+void BattleWindow::showQueue()
 {
 	if(settings["battle"]["showQueue"].Bool() == true)
 		return;

+ 10 - 5
client/windows/settings/BattleOptionsTab.cpp

@@ -84,14 +84,19 @@ int BattleOptionsTab::getAnimSpeed() const
 
 int BattleOptionsTab::getQueueSizeId() const
 {
-	std::string text = settings["battle"]["queueSize"].String();
-	if(text == "none")
+	std::string sizeText = settings["battle"]["queueSize"].String();
+	bool visible = settings["battle"]["showQueue"].Bool();
+
+	if(!visible)
+		return -1;
+
+	if(sizeText == "none")
 		return -1;
-	if(text == "auto")
+	if(sizeText == "auto")
 		return 0;
-	if(text == "small")
+	if(sizeText == "small")
 		return 1;
-	if(text == "big")
+	if(sizeText == "big")
 		return 2;
 
 	return 0;