#ifndef _GUIPLAY_H_ #define _GUIPLAY_H_ #include "GuiLayers.h" #include "CardGui.h" class GuiPlay : public GuiLayer { public: static const float HORZWIDTH; static const float VERTHEIGHT; typedef vector::iterator iterator; protected: class CardStack { protected: unsigned total; float baseX, baseY; float x, y; public: void reset(unsigned total, float x, float y); void Enstack(CardView*); void RenderSpell(MTGCardInstance*, iterator begin, iterator end, float x, float y); }; class HorzStack : public CardStack { public: HorzStack(); void Render(CardView*, iterator begin, iterator end); void Enstack(CardView*); }; class VertStack : public CardStack { protected: unsigned count; public: VertStack(); void reset(unsigned total, float x, float y); void Render(CardView*, iterator begin, iterator end); void Enstack(CardView*); inline float nextX(); }; class BattleField : public HorzStack { static const float HEIGHT; unsigned attackers; unsigned blockers; unsigned currentAttacker; float height; public: int red; int colorFlow; void addAttacker(MTGCardInstance*); void removeAttacker(MTGCardInstance*); void reset(float x, float y); BattleField(); void EnstackAttacker(CardView*); void EnstackBlocker(CardView*); void Update(float dt); void Render(); }; class Lands : public HorzStack {}; class Creatures : public HorzStack {}; class Spells : public VertStack {}; protected: GameObserver* game; Creatures selfCreatures, opponentCreatures; BattleField battleField; Lands selfLands, opponentLands; Spells selfSpells, opponentSpells; CardSelector* cs; iterator end_spells; vector cards; public: GuiPlay(GameObserver*, CardSelector*); ~GuiPlay(); virtual void Render(); void Replace(); void Update(float dt); virtual int receiveEventPlus(WEvent * e); virtual int receiveEventMinus(WEvent * e); }; #endif // _GUIPLAY_H_