From a8ebaee5270be9e3b239c158c1f56f60b87da7f2 Mon Sep 17 00:00:00 2001 From: "omegablast2002@yahoo.com" Date: Sat, 2 Feb 2013 05:43:46 +0000 Subject: [PATCH] added a check to avoid skipping a gameState update if there are more than 50 items left to resolve in the stack, let run a gameStates check and see if we havent already won. Exquisite Blood + Sanguine Bond example of the kinds of loops this fixes. --- projects/mtg/src/GameObserver.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/projects/mtg/src/GameObserver.cpp b/projects/mtg/src/GameObserver.cpp index e07b3ba10..1a7d9b000 100644 --- a/projects/mtg/src/GameObserver.cpp +++ b/projects/mtg/src/GameObserver.cpp @@ -581,13 +581,17 @@ void GameObserver::gameStateBasedEffects() { if(getCurrentTargetChooser() && int(getCurrentTargetChooser()->getNbTargets()) == getCurrentTargetChooser()->maxtargets) getCurrentTargetChooser()->done = true; - if (mLayers->stackLayer()->count(0, NOT_RESOLVED) != 0) - return; - if (mLayers->actionLayer()->menuObject) - return; - if (getCurrentTargetChooser() || mLayers->actionLayer()->isWaitingForAnswer()) - return; - + if (mLayers->stackLayer()->count(0, NOT_RESOLVED) <= 50) + { + //if there are more than 50 unresolved actions on the stack, lets allow a gameStates update + //to make sure we are not caught up in a loop, example :Exquisite Blood + Sanguine Bond + if (mLayers->stackLayer()->count(0, NOT_RESOLVED) != 0) + return; + if (mLayers->actionLayer()->menuObject) + return; + if (getCurrentTargetChooser() || mLayers->actionLayer()->isWaitingForAnswer()) + return; + } //////////////////////// //---apply damage-----// //after combat effects//