Files
wagic/projects/mtg/include/WEvent.h
techdragon.nguyen@gmail.com e53c16f700 No code change just reformatting of header files.
finishing up my reformatting of the source from November/December following the guidelines that were posted.
some extra things I added:
   * Any empty virtual declarations were kept to one line.  
   * Enums were split up into separate lines to promote uniformity across all headers. ( each header file had a different style for enums)
2011-01-21 18:01:14 +00:00

245 lines
6.1 KiB
C++

#ifndef _WEVENT_H_
#define _WEVENT_H_
#include <iostream>
#include "PhaseRing.h"
class MTGCardInstance;
class MTGGameZone;
class Damage;
class Phase;
class Targetable;
class ManaPool;
class WEvent {
public:
enum {
NOT_SPECIFIED = 0,
CHANGE_ZONE = 1,
DAMAGE = 2,
CHANGE_PHASE = 3,
};
//for getTargets, in case event has more than one possible "target", like with damage events.
enum {
TARGET_NONE = 0,
TARGET_TO,
TARGET_FROM,
};
int type; //Deprecated, use dynamic casting instead
WEvent(int type = NOT_SPECIFIED);
virtual ~WEvent() {};
virtual std::ostream& toString(std::ostream& out) const;
virtual int getValue()
{
return 0;
}
;
virtual Targetable * getTarget(int target)
{
return 0;
}
;
};
struct WEventZoneChange: public WEvent
{
MTGCardInstance * card;
MTGGameZone * from;
MTGGameZone * to;
WEventZoneChange(MTGCardInstance * card, MTGGameZone * from, MTGGameZone *to);
virtual ~WEventZoneChange() {};
virtual std::ostream& toString(std::ostream& out) const;
virtual Targetable * getTarget(int target);
};
struct WEventDamage: public WEvent
{
Damage * damage;
WEventDamage(Damage * damage);
virtual std::ostream& toString(std::ostream& out) const;
virtual int getValue();
virtual Targetable * getTarget(int target);
};
struct WEventDamageStackResolved: public WEvent
{
WEventDamageStackResolved();
};
struct WEventPhaseChange: public WEvent
{
Phase * from;
Phase * to;
WEventPhaseChange(Phase * from, Phase * to);
};
//Abstract class of event when a card's status changes
struct WEventCardUpdate: public WEvent
{
MTGCardInstance * card;
WEventCardUpdate(MTGCardInstance * card);
};
//Event when a card gains/looses types
struct WEventCardChangeType: public WEventCardUpdate
{
int type;
bool before;
bool after;
WEventCardChangeType(MTGCardInstance * card, int type, bool before, bool after);
};
//Event when a card is tapped/untapped
struct WEventCardTap: public WEventCardUpdate
{
bool before;
bool after;
WEventCardTap(MTGCardInstance * card, bool before, bool after);
virtual Targetable * getTarget(int target);
};
struct WEventCardTappedForMana: public WEventCardUpdate
{
bool before;
bool after;
WEventCardTappedForMana(MTGCardInstance * card, bool before, bool after);
virtual Targetable * getTarget(int target);
};
//Event when a card's "attacker" status changes
//before:Player/Planeswalker that card was attacking previously
//after: Player/Planeswalker that card is attacking now
struct WEventCreatureAttacker: public WEventCardUpdate
{
Targetable * before;
Targetable * after;
WEventCreatureAttacker(MTGCardInstance * card, Targetable * from, Targetable * to);
};
//event when card attacks.
struct WEventCardAttacked: public WEventCardUpdate
{
WEventCardAttacked(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card attacks alone.
struct WEventCardAttackedAlone: public WEventCardUpdate
{
WEventCardAttackedAlone(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card attacks but is not blocked.
struct WEventCardAttackedNotBlocked: public WEventCardUpdate
{
WEventCardAttackedNotBlocked(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card attacks but is blocked.
struct WEventCardAttackedBlocked: public WEventCardUpdate
{
WEventCardAttackedBlocked(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card blocked.
struct WEventCardBlocked: public WEventCardUpdate
{
WEventCardBlocked(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card is sacrificed.
struct WEventCardSacrifice: public WEventCardUpdate
{
WEventCardSacrifice(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//event when card is discarded.
struct WEventCardDiscard: public WEventCardUpdate
{
WEventCardDiscard(MTGCardInstance * card);
virtual Targetable * getTarget(int target);
};
//Event when a card's "defenser" status changes
//before : attacker that card was blocking previously
//after: attacker that card is blocking now
struct WEventCreatureBlocker: public WEventCardUpdate
{
MTGCardInstance * before;
MTGCardInstance * after;
WEventCreatureBlocker(MTGCardInstance * card, MTGCardInstance * from, MTGCardInstance * to);
};
//Event sent when attackers have been chosen and they
//cannot be changed any more.
struct WEventAttackersChosen: public WEvent
{
};
//Event sent when blockers have been chosen and they
//cannot be changed any more.
struct WEventBlockersChosen: public WEvent
{
};
struct WEventcardDraw: public WEvent
{
WEventcardDraw(Player * player, int nb_cards);
Player * player;
int nb_cards;
virtual Targetable * getTarget(Player * player);
};
//Event when a blocker is reordered
//exchangeWith: exchange card's position with exchangeWith's position
//attacker:both card and exchangeWith *should* be in attacker's "blockers" list.
struct WEventCreatureBlockerRank: public WEventCardUpdate
{
MTGCardInstance * exchangeWith;
MTGCardInstance * attacker;
WEventCreatureBlockerRank(MTGCardInstance * card, MTGCardInstance * exchangeWith, MTGCardInstance * attacker);
};
//Event when a combat phase step ends
struct WEventCombatStepChange: public WEvent
{
CombatStep step;
WEventCombatStepChange(CombatStep);
};
//Event when a mana is engaged
//color : color
struct WEventEngageMana: public WEvent
{
int color;
MTGCardInstance* card;
ManaPool * destination;
WEventEngageMana(int color, MTGCardInstance* card, ManaPool * destination);
};
//Event when a mana is consumed
//color : color
struct WEventConsumeMana: public WEvent
{
int color;
ManaPool * source;
WEventConsumeMana(int color, ManaPool * source);
};
//Event when a manapool is emptied
//color : color
struct WEventEmptyManaPool: public WEvent
{
ManaPool * source;
WEventEmptyManaPool(ManaPool * source);
};
std::ostream& operator<<(std::ostream&, const WEvent&);
#endif