Files
wagic/projects/mtg/include/PhaseRing.h
2012-03-13 16:48:48 +00:00

72 lines
1.5 KiB
C++

#ifndef _PHASERING_H_
#define _PHASERING_H_
#include <list>
#include <string>
#include "MTGDefinitions.h"
using namespace std;
/*
The class that handles the phases of a turn
*/
class Player;
class GameObserver;
typedef enum
{
BLOCKERS,
TRIGGERS,
ORDER,
FIRST_STRIKE,
END_FIRST_STRIKE,
DAMAGE,
END_DAMAGE
} CombatStep;
class Phase
{
public:
GamePhase id;
Player * player;
bool isExtra;
Phase(GamePhase id, Player *player, bool _isExtra = false) :
id(id), player(player), isExtra(_isExtra)
{
}
;
};
class PhaseRing
{
private:
bool extraDamagePhase(int id);
GameObserver* observer;
public:
list<Phase *> ring;
list<Phase *>::iterator current;
list<Phase*>turn;
list<Phase*>currentTurnList;
list<Phase*>nextTurnList;
list<Phase*> currentTurn();
list<Phase*> nextTurn();
list<Phase*> extraPhases;
Phase * getCurrentPhase();
Phase * forward(bool sendEvents = true);
Phase * goToPhase(int id, Player * player, bool sendEvents = true);
Phase * getPhase(int id);
PhaseRing(GameObserver* observer);
~PhaseRing();
void deleteOldTurn();
int addPhase(Phase * phase);
int addCombatAfter(Player* player, int after_id, bool withMain = false);
int addPhaseAfter(GamePhase id, Player* player, int after_id);
int removePhase(int id);
const char * phaseName(int id);
static GamePhase phaseStrToInt(string s);
static string phaseIntToStr(int id);
};
#endif