I just played 3 long games and I was able to undo two fully and got an assert on the third one after more than 1000 actions... so I commit what I have:

- Modified undo to stop at "next phase" action
- Added "muligan" and "force library shuffling" to the list of logged action
- Fixed random logging
- Fixed double logging of actions
- Merged all the "next game" functions into a single one
- Created a PlayerType type instead of using int
- Moved the player loading code into the GameObserver and out of GameStateDuel to avoid having player references in both and simplify the initialization and termination. Tweeked a bit the humanplayer class to be able to do that.
- Added a "load" menu available in testsuite mode, I use that to load problematique game. To use it, just copy-paste a game from the traces into Res/test/game/timetwister.txt. Game in traces starts by "rvalues:..." and ends by "[end]"
- Added some untested and commented out code in GuiCombat to use the mouse/touch to setup the damage on the blockers
- Broke the network game ... hoh well, I'll repair it when everything else works !!
- various code cleanup and compilation fixes on Linux
This commit is contained in:
Xawotihs
2011-10-26 22:14:12 +00:00
parent 45f09972ad
commit c3dc51aed1
34 changed files with 410 additions and 297 deletions
+9 -7
View File
@@ -34,7 +34,7 @@ NextGamePhase requested by user
*/
int NextGamePhase::resolve()
{
observer->nextGamePhase();
observer->userRequestNextGamePhase(false, false);
return 1;
}
@@ -568,7 +568,7 @@ int ActionStack::AddNextCombatStep()
return 1;
}
int ActionStack::setIsInterrupting(Player * player)
int ActionStack::setIsInterrupting(Player * player, bool log)
{
askIfWishesToInterrupt = NULL;
@@ -589,7 +589,8 @@ int ActionStack::setIsInterrupting(Player * player)
int playerId = (player == observer->players[1]) ? 1 : 0;
interruptDecision[playerId] = -1;
observer->isInterrupting = player;
observer->logAction(player, "yes");
if(log)
observer->logAction(player, "yes");
return 1;
}
@@ -826,7 +827,6 @@ int ActionStack::receiveEventPlus(WEvent * event)
void ActionStack::Update(float dt)
{
//This is a hack to avoid updating the stack while tuto messages are being shown
//Ideally, the tuto messages should be moved to a layer above this one
if (ATutorialMessage::Current)
@@ -845,6 +845,7 @@ void ActionStack::Update(float dt)
if (mode == ACTIONSTACK_STANDARD && tc && !checked)
{
checked = 1;
for (size_t i = 0; i < mObjects.size(); i++)
{
Interruptible * current = (Interruptible *) mObjects[i];
@@ -946,7 +947,7 @@ void ActionStack::Update(float dt)
extraTime = 1;//we never want this int to be 0.
if (timer < 0)
timer = static_cast<float>(options[Options::INTERRUPT_SECONDS].number * extraTime);
timer = static_cast<float>(options[Options::INTERRUPT_SECONDS].number * extraTime);
timer -= dt;
if (timer < 0)
cancelInterruptOffer();
@@ -964,12 +965,13 @@ void ActionStack::cancelInterruptOffer(int cancelMode)
observer->logAction(playerId, "no");
}
void ActionStack::endOfInterruption()
void ActionStack::endOfInterruption(bool log)
{
int playerId = (observer->isInterrupting == observer->players[1]) ? 1 : 0;
interruptDecision[playerId] = 0;
observer->isInterrupting = NULL;
observer->logAction(playerId, "endinterruption");
if(log)
observer->logAction(playerId, "endinterruption");
}
bool ActionStack::CheckUserInput(JButton key)