#ifndef _REPLACEMENT_EFFECTS_H_ #define _REPLACEMENT_EFFECTS_H_ #include using namespace std; #include "Damage.h" #include "WEvent.h" #include "Counters.h" class TargetChooser; class MTGAbility; class ReplacementEffect { public: virtual WEvent * replace(WEvent * e) { return e; } ; virtual ~ReplacementEffect() {} }; class REDamagePrevention: public ReplacementEffect { protected: MTGAbility * source; TargetChooser * tcSource; TargetChooser * tcTarget; int damage; bool oneShot; Damage::DamageType typeOfDamage; public: REDamagePrevention(MTGAbility * _source, TargetChooser *_tcSource = NULL, TargetChooser *_tcTarget = NULL, int _damage = -1, bool _oneShot = true, Damage::DamageType typeOfDamage = Damage::DAMAGE_ALL_TYPES); WEvent * replace(WEvent *e); ~REDamagePrevention(); }; class RECountersPrevention: public ReplacementEffect { protected: MTGAbility * source; MTGCardInstance * cardSource; MTGCardInstance * cardTarget; TargetChooser * tc; Counter * counter; public: RECountersPrevention(MTGAbility * _source, MTGCardInstance * cardSource = NULL, MTGCardInstance * cardTarget = NULL, TargetChooser * tc = NULL, Counter * counter = NULL); WEvent * replace(WEvent *e); ~RECountersPrevention(); }; class REDrawReplacement: public ReplacementEffect { protected: MTGAbility * source; public: Player * DrawerOfCard; MTGAbility * replacementAbility; REDrawReplacement(MTGAbility * _source, Player * Drawer = NULL, MTGAbility * replaceWith = NULL); WEvent * replace(WEvent *e); ~REDrawReplacement(); }; class ReplacementEffects { public: list modifiers; ReplacementEffects(); WEvent * replace(WEvent *e); int add(ReplacementEffect * re); int remove(ReplacementEffect * re); ~ReplacementEffects(); }; #endif