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

View File

@@ -20,6 +20,7 @@ struct CardGui;
class Player;
class TargetChooser;
class Rules;
class TestSuite;
using namespace std;
class GameObserver{
@@ -41,8 +42,9 @@ class GameObserver{
void logAction(const string& s);
bool processActions(bool undo);
friend ostream& operator<<(ostream&, GameObserver&);
bool load(const string& s, bool undo);
bool mLoading;
void nextGamePhase();
void shuffleLibrary(Player* p);
public:
int currentPlayerId;
@@ -74,11 +76,15 @@ class GameObserver{
const char * getCurrentGamePhaseName();
const char * getNextGamePhaseName();
void nextCombatStep();
void userRequestNextGamePhase();
void nextGamePhase();
void userRequestNextGamePhase(bool allowInterrupt = true, bool log = true);
void cleanupPhase();
void nextPlayer();
void setPlayers(vector<Player *> _players);
#ifdef TESTSUITE
void loadTestSuitePlayer(int playerId, TestSuite* testSuite);
#endif //TESTSUITE
void loadPlayer(int playerId, PlayerType playerType = PLAYER_TYPE_HUMAN, int decknb=0, bool premadeDeck=false);
Player * currentPlayer;
Player * currentActionPlayer;
Player * isInterrupting;
@@ -111,8 +117,12 @@ class GameObserver{
logAction(players[playerId], s);
};
void logAction(MTGCardInstance* card, MTGGameZone* zone, size_t index, int result);
bool load(const string& s, bool undo = false);
bool undo();
bool isLoading(){ return mLoading; };
void Mulligan(Player* player = NULL);
Player* getPlayer(size_t index) { return players[index];};
bool isStarted() { return (mLayers!=NULL);};
};
#endif