diff --git a/projects/mtg/include/AIPlayer.h b/projects/mtg/include/AIPlayer.h index b8aee1adf..5ff7f0904 100644 --- a/projects/mtg/include/AIPlayer.h +++ b/projects/mtg/include/AIPlayer.h @@ -62,7 +62,7 @@ class AIPlayer: public Player{ AIStats * getStats(); public: void End(){}; - virtual int displayStack(){return 0;}; + virtual int displayStack() {return 0;}; AIStats * stats; ManaCost * getPotentialMana(); AIPlayer(MTGPlayerCards * deck, string deckFile, string deckFileSmall); diff --git a/projects/mtg/include/ActionStack.h b/projects/mtg/include/ActionStack.h index 43ed3e428..57a7e77b9 100644 --- a/projects/mtg/include/ActionStack.h +++ b/projects/mtg/include/ActionStack.h @@ -57,7 +57,7 @@ class Interruptible: public PlayGuiObject, public Targetable{ virtual void Render(){}; int typeAsTarget(){return TARGET_STACKACTION;}; Interruptible(bool hasFocus = false):PlayGuiObject(40,x,y,hasFocus){state=NOT_RESOLVED;display=0;source=NULL;}; - virtual const string getDisplayName(){return "stack object";}; + virtual const string getDisplayName() const {return "stack object";}; #if defined (WIN32) || defined (LINUX) virtual void Dump(); #endif @@ -82,7 +82,7 @@ class Spell: public Interruptible { ~Spell(); int resolve(); void Render(); - const string getDisplayName(); + const string getDisplayName() const; virtual ostream& toString(ostream& out) const; MTGCardInstance * getNextCardTarget(MTGCardInstance * previous = 0); Player * getNextPlayerTarget(Player * previous = 0); diff --git a/projects/mtg/include/GuiHand.h b/projects/mtg/include/GuiHand.h index 4cf9c2197..bbb3aba38 100644 --- a/projects/mtg/include/GuiHand.h +++ b/projects/mtg/include/GuiHand.h @@ -68,10 +68,10 @@ class GuiHandSelf : public GuiHand virtual int receiveEventPlus(WEvent* e); virtual int receiveEventMinus(WEvent* e); + void Repos(); bool CheckUserInput(u32 key); virtual void Render(); void Update(float dt); - void Repos(); float LeftBoundary(); HandLimitor* limitor; diff --git a/projects/mtg/include/MTGCardInstance.h b/projects/mtg/include/MTGCardInstance.h index 0f3969bc3..26396643f 100644 --- a/projects/mtg/include/MTGCardInstance.h +++ b/projects/mtg/include/MTGCardInstance.h @@ -59,7 +59,7 @@ class MTGCardInstance: public MTGCard, public Damageable { Player * owner; Counters * counters; int typeAsTarget(){return TARGET_CARD;} - const string getDisplayName(); + const string getDisplayName() const; MTGCardInstance * target; void addType(int type); @@ -124,9 +124,11 @@ class MTGCardInstance: public MTGCard, public Damageable { int isInPlay(); void resetAllDamage(); JSample * getSample(); + + ostream& toString(ostream&) const; }; - +ostream& operator<<(ostream&, const MTGCardInstance&); #endif diff --git a/projects/mtg/include/MTGGameZones.h b/projects/mtg/include/MTGGameZones.h index d452b38ab..99a8b43df 100644 --- a/projects/mtg/include/MTGGameZones.h +++ b/projects/mtg/include/MTGGameZones.h @@ -86,6 +86,8 @@ class MTGGameZone { static int zoneStringToId(string zoneName); static MTGGameZone *intToZone(int zoneId, MTGCardInstance * source = NULL,MTGCardInstance * target = NULL); bool needShuffle; + + virtual ostream& toString(ostream&) const; }; class MTGLibrary: public MTGGameZone { @@ -93,23 +95,28 @@ class MTGLibrary: public MTGGameZone { // MTGLibrary(); void shuffleTopToBottom(int nbcards); MTGCardInstance * draw(); + virtual ostream& toString(ostream&) const; }; class MTGGraveyard: public MTGGameZone { public: // MTGGraveyard(); + virtual ostream& toString(ostream&) const; }; class MTGHand: public MTGGameZone { public: + virtual ostream& toString(ostream&) const; }; class MTGRemovedFromGame: public MTGGameZone { public: + virtual ostream& toString(ostream&) const; }; class MTGStack: public MTGGameZone { public: + virtual ostream& toString(ostream&) const; }; class MTGInPlay: public MTGGameZone { @@ -120,6 +127,7 @@ class MTGInPlay: public MTGGameZone { MTGCardInstance * getNextDefenser(MTGCardInstance * previous, MTGCardInstance * attacker); int nbDefensers( MTGCardInstance * attacker); int nbPartners(MTGCardInstance * attacker); + virtual ostream& toString(ostream&) const; }; @@ -153,8 +161,8 @@ class MTGPlayerCards { MTGCardInstance * putInZone(MTGCardInstance * card, MTGGameZone * from, MTGGameZone * to); MTGCardInstance * putInPlay(MTGCardInstance * card); int isInPlay(MTGCardInstance * card); - }; +ostream& operator<<(ostream&, const MTGGameZone&); #endif diff --git a/projects/mtg/include/Player.h b/projects/mtg/include/Player.h index e91942b8d..7865cb2ef 100644 --- a/projects/mtg/include/Player.h +++ b/projects/mtg/include/Player.h @@ -17,7 +17,7 @@ class Player: public Damageable{ public: virtual void End(); int typeAsTarget(){return TARGET_PLAYER;} - const string getDisplayName(); + const string getDisplayName() const; virtual int displayStack(){return 1;} JTexture * mAvatarTex; JQuad * mAvatar; @@ -45,7 +45,6 @@ class HumanPlayer: public Player{ }; - - +ostream& operator<<(ostream&, const Player&); #endif diff --git a/projects/mtg/include/Targetable.h b/projects/mtg/include/Targetable.h index 866d1eef1..825bfa604 100644 --- a/projects/mtg/include/Targetable.h +++ b/projects/mtg/include/Targetable.h @@ -8,7 +8,7 @@ class Targetable{ public: virtual int typeAsTarget() = 0; - virtual const string getDisplayName() = 0; + virtual const string getDisplayName() const = 0; }; #endif diff --git a/projects/mtg/include/WEvent.h b/projects/mtg/include/WEvent.h index e2412e6fd..1801eda8a 100644 --- a/projects/mtg/include/WEvent.h +++ b/projects/mtg/include/WEvent.h @@ -1,6 +1,7 @@ #ifndef _WEVENT_H_ #define _WEVENT_H_ +#include #include "PhaseRing.h" class MTGCardInstance; @@ -21,6 +22,7 @@ public: int type; //Deprecated, use dynamic casting instead WEvent(int type = NOT_SPECIFIED); virtual ~WEvent() {}; + virtual std::ostream& toString(std::ostream& out) const; }; struct WEventZoneChange : public WEvent { @@ -29,6 +31,7 @@ struct WEventZoneChange : public WEvent { MTGGameZone * to; WEventZoneChange(MTGCardInstance * card, MTGGameZone * from, MTGGameZone *to); virtual ~WEventZoneChange() {}; + virtual std::ostream& toString(std::ostream& out) const; }; @@ -116,4 +119,6 @@ struct WEventEmptyManaPool : public WEvent { WEventEmptyManaPool(ManaPool * source); }; +std::ostream& operator<<(std::ostream&, const WEvent&); + #endif diff --git a/projects/mtg/src/ActionStack.cpp b/projects/mtg/src/ActionStack.cpp index 20833f2f0..3452be4a2 100644 --- a/projects/mtg/src/ActionStack.cpp +++ b/projects/mtg/src/ActionStack.cpp @@ -115,7 +115,7 @@ Spell::Spell(int id, MTGCardInstance * _source, TargetChooser * tc, ManaCost * _ } -const string Spell::getDisplayName(){ +const string Spell::getDisplayName() const { return source->getName(); } diff --git a/projects/mtg/src/DuelLayers.cpp b/projects/mtg/src/DuelLayers.cpp index ab32ac53a..3226e7931 100644 --- a/projects/mtg/src/DuelLayers.cpp +++ b/projects/mtg/src/DuelLayers.cpp @@ -113,7 +113,7 @@ void DuelLayers::Render(){ int DuelLayers::receiveEvent(WEvent * e){ #if 1 -#define PRINT_IF(type) { type *foo = dynamic_cast(e); if (foo) cout << "Is a " << #type << endl; } +#define PRINT_IF(type) { type *foo = dynamic_cast(e); if (foo) cout << "Is a " #type " " << *foo << endl; } cout << "Received event " << e << " "; PRINT_IF(WEventZoneChange); PRINT_IF(WEventDamage); diff --git a/projects/mtg/src/GuiCombat.cpp b/projects/mtg/src/GuiCombat.cpp index 9f4d4a6c8..cfb0ed92c 100644 --- a/projects/mtg/src/GuiCombat.cpp +++ b/projects/mtg/src/GuiCombat.cpp @@ -331,11 +331,8 @@ int GuiCombat::receiveEventMinus(WEvent* e) } return 0; } - else if (WEventPhaseChange* event = dynamic_cast(e)) - { - event = event; - step = BLOCKERS; - } + else if (dynamic_cast(e)) + step = BLOCKERS; else if (WEventCombatStepChange* event = dynamic_cast(e)) switch (event->step) { diff --git a/projects/mtg/src/MTGCardInstance.cpp b/projects/mtg/src/MTGCardInstance.cpp index 303606486..3602e5093 100644 --- a/projects/mtg/src/MTGCardInstance.cpp +++ b/projects/mtg/src/MTGCardInstance.cpp @@ -108,7 +108,7 @@ void MTGCardInstance::initMTGCI(){ } -const string MTGCardInstance::getDisplayName(){ +const string MTGCardInstance::getDisplayName() const { return getName(); } @@ -635,3 +635,13 @@ int MTGCardInstance::stepPower(CombatStep step) if (has(Constants::FIRSTSTRIKE)) return 0; else return MAX(0, power); } } + +std::ostream& MTGCardInstance::toString(std::ostream& out) const +{ + return out << name; +} + +std::ostream& operator<<(std::ostream& out, const MTGCardInstance& c) +{ + return c.toString(out); +} diff --git a/projects/mtg/src/MTGGameZones.cpp b/projects/mtg/src/MTGGameZones.cpp index ce6672739..47dc1b61d 100644 --- a/projects/mtg/src/MTGGameZones.cpp +++ b/projects/mtg/src/MTGGameZones.cpp @@ -575,3 +575,15 @@ int MTGGameZone::zoneStringToId(string zoneName){ MTGGameZone * MTGGameZone::stringToZone(string zoneName, MTGCardInstance * source,MTGCardInstance * target){ return intToZone(zoneStringToId(zoneName), source,target); } + +ostream& MTGGameZone::toString(ostream& out) const { return out << "Unknown zone"; } +ostream& MTGLibrary::toString(ostream& out) const { return out << "Library " << *owner; } +ostream& MTGGraveyard::toString(ostream& out) const { return out << "Graveyard " << *owner; } +ostream& MTGHand::toString(ostream& out) const { return out << "Hand " << *owner; } +ostream& MTGRemovedFromGame::toString(ostream& out) const { return out << "RemovedFromGame " << *owner; } +ostream& MTGStack::toString(ostream& out) const { return out << "Stack " << *owner; } +ostream& MTGInPlay::toString(ostream& out) const { return out << "InPlay " << *owner; } +ostream& operator<<(ostream& out, const MTGGameZone& z) +{ + return z.toString(out); +} diff --git a/projects/mtg/src/Player.cpp b/projects/mtg/src/Player.cpp index 3fb7e9c2e..54f8ae0c6 100644 --- a/projects/mtg/src/Player.cpp +++ b/projects/mtg/src/Player.cpp @@ -28,7 +28,7 @@ Player::~Player(){ SAFE_DELETE(mAvatar); } -const string Player::getDisplayName(){ +const string Player::getDisplayName() const { GameObserver * g = GameObserver::GetInstance(); if (this == g->players[0]) return "Player 1"; return "Player 2"; @@ -75,3 +75,8 @@ void Player::cleanupPhase(){ game->inPlay->cleanupPhase(); game->graveyard->cleanupPhase(); } + +ostream& operator<<(ostream& out, const Player& p) +{ + return out << p.getDisplayName(); +} diff --git a/projects/mtg/src/WEvent.cpp b/projects/mtg/src/WEvent.cpp index 9b8d5daf1..b4d8b6b1f 100644 --- a/projects/mtg/src/WEvent.cpp +++ b/projects/mtg/src/WEvent.cpp @@ -27,3 +27,16 @@ WEventConsumeMana::WEventConsumeMana(int color, ManaPool * source) : WEvent(), c WEventEmptyManaPool::WEventEmptyManaPool(ManaPool * source) : WEvent(), source(source){} WEventCombatStepChange::WEventCombatStepChange(CombatStep step) : WEvent(), step(step) {}; + +std::ostream& WEvent::toString(std::ostream& out) const +{ + return out << "EVENT"; +} +std::ostream& WEventZoneChange::toString(std::ostream& out) const +{ + return out << "EVENT " << *card << " : " << *from << " → " << *to; +} +std::ostream& operator<<(std::ostream& out, const WEvent& m) +{ + return m.toString(out); +}