Erwan
- Trying to add generic classes for Triggered abilities. PLEASE DO NOT USE THESE RIGHT NOW, Not Tested AT ALL !
This commit is contained in:
@@ -29,7 +29,6 @@ class ActionElement: public JGuiObject{
|
|||||||
int newPhase;
|
int newPhase;
|
||||||
int modal;
|
int modal;
|
||||||
int waitingForAnswer;
|
int waitingForAnswer;
|
||||||
void RenderMessageBackground(float y0, int height);
|
|
||||||
int getActivity();
|
int getActivity();
|
||||||
virtual void Update(float dt){};
|
virtual void Update(float dt){};
|
||||||
virtual void Render(){};
|
virtual void Render(){};
|
||||||
|
|||||||
+2122
-2246
File diff suppressed because it is too large
Load Diff
@@ -20,22 +20,16 @@ using std::string;
|
|||||||
using std::map;
|
using std::map;
|
||||||
|
|
||||||
|
|
||||||
|
//Two stupid variables used to give a hint to the AI:
|
||||||
|
// Should I cast a spell on an ennemy or friendly unit ?
|
||||||
#define BAKA_EFFECT_GOOD 10
|
#define BAKA_EFFECT_GOOD 10
|
||||||
#define BAKA_EFFECT_BAD 11
|
#define BAKA_EFFECT_BAD 11
|
||||||
|
|
||||||
class AbilityFactory{
|
|
||||||
private:
|
|
||||||
int destroyAllFromTypeInPlay(const char * type, MTGCardInstance * source, int bury = 0);
|
|
||||||
int destroyAllFromColorInPlay(int color, MTGCardInstance * source, int bury = 0);
|
|
||||||
int putInPlayFromZone(MTGCardInstance * card, MTGGameZone * zone, Player * p);
|
|
||||||
public:
|
|
||||||
int magicText(int id, Spell * spell, MTGCardInstance * card = NULL);
|
|
||||||
void addAbilities(int _id, Spell * spell);
|
|
||||||
};
|
|
||||||
|
|
||||||
class MTGAbility: public ActionElement{
|
class MTGAbility: public ActionElement{
|
||||||
protected:
|
protected:
|
||||||
char menuText[25];
|
char menuText[25];
|
||||||
Damageable * target;
|
Damageable * target;
|
||||||
GameObserver * game;
|
GameObserver * game;
|
||||||
public:
|
public:
|
||||||
@@ -45,74 +39,155 @@ class MTGAbility: public ActionElement{
|
|||||||
virtual int testDestroy();
|
virtual int testDestroy();
|
||||||
virtual ~MTGAbility();
|
virtual ~MTGAbility();
|
||||||
virtual void Render(){};
|
virtual void Render(){};
|
||||||
virtual int isReactingToClick(MTGCardInstance * card){return 0;};
|
virtual int isReactingToClick(MTGCardInstance * card){return 0;};
|
||||||
virtual int reactToClick(MTGCardInstance * card){return 0;};
|
virtual int reactToClick(MTGCardInstance * card){return 0;};
|
||||||
virtual void Update(float dt){};
|
virtual void Update(float dt){};
|
||||||
virtual int fireAbility();
|
virtual int fireAbility();
|
||||||
virtual int resolve(){return 0;};
|
virtual int resolve(){return 0;};
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class TriggeredAbility:public MTGAbility{
|
class TriggeredAbility:public MTGAbility{
|
||||||
public:
|
public:
|
||||||
TriggeredAbility(int id, MTGCardInstance * card);
|
TriggeredAbility(int id, MTGCardInstance * card);
|
||||||
TriggeredAbility(int id, MTGCardInstance * _source, Damageable * _target);
|
TriggeredAbility(int id, MTGCardInstance * _source, Damageable * _target);
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
virtual void Render(){};
|
virtual void Render(){};
|
||||||
virtual int trigger()=0;
|
virtual int trigger()=0;
|
||||||
virtual int resolve() = 0;
|
virtual int resolve() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class ActivatedAbility:public MTGAbility{
|
class ActivatedAbility:public MTGAbility{
|
||||||
public:
|
public:
|
||||||
ManaCost * cost;
|
ManaCost * cost;
|
||||||
int playerturnonly;
|
int playerturnonly;
|
||||||
int needsTapping;
|
int needsTapping;
|
||||||
ActivatedAbility(int id, MTGCardInstance * card,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
ActivatedAbility(int id, MTGCardInstance * card,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
||||||
virtual int reactToClick(MTGCardInstance * card);
|
virtual int reactToClick(MTGCardInstance * card);
|
||||||
virtual int isReactingToClick(MTGCardInstance * card);
|
virtual int isReactingToClick(MTGCardInstance * card);
|
||||||
virtual int reactToTargetClick(Targetable * object);
|
virtual int reactToTargetClick(Targetable * object);
|
||||||
virtual int resolve() = 0;
|
virtual int resolve() = 0;
|
||||||
virtual ~ActivatedAbility();
|
virtual ~ActivatedAbility();
|
||||||
};
|
};
|
||||||
|
|
||||||
class TargetAbility:public ActivatedAbility{
|
class TargetAbility:public ActivatedAbility{
|
||||||
public:
|
public:
|
||||||
TargetAbility(int id, MTGCardInstance * card, TargetChooser * _tc,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
TargetAbility(int id, MTGCardInstance * card, TargetChooser * _tc,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
||||||
TargetAbility(int id, MTGCardInstance * card,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
TargetAbility(int id, MTGCardInstance * card,ManaCost * _cost = NULL, int _playerturnonly = 0,int tap = 1);
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
virtual int reactToClick(MTGCardInstance * card);
|
virtual int reactToClick(MTGCardInstance * card);
|
||||||
virtual int reactToTargetClick(Targetable * object);
|
virtual int reactToTargetClick(Targetable * object);
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
};
|
};
|
||||||
|
|
||||||
class InstantAbility:public MTGAbility{
|
class InstantAbility:public MTGAbility{
|
||||||
public:
|
public:
|
||||||
int init;
|
int init;
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
virtual int testDestroy();
|
virtual int testDestroy();
|
||||||
InstantAbility(int _id, MTGCardInstance * source);
|
InstantAbility(int _id, MTGCardInstance * source);
|
||||||
InstantAbility(int _id, MTGCardInstance * source,Damageable * _target);
|
InstantAbility(int _id, MTGCardInstance * source,Damageable * _target);
|
||||||
virtual int resolve(){return 0;};
|
virtual int resolve(){return 0;};
|
||||||
};
|
};
|
||||||
|
|
||||||
/* State based effects. This class works ONLY for InPlay and needs to be extended for other areas of the game !!! */
|
/* State based effects. This class works ONLY for InPlay and needs to be extended for other areas of the game !!! */
|
||||||
class ListMaintainerAbility:public MTGAbility{
|
class ListMaintainerAbility:public MTGAbility{
|
||||||
public:
|
public:
|
||||||
map<MTGCardInstance *,bool> cards;
|
map<MTGCardInstance *,bool> cards;
|
||||||
ListMaintainerAbility(int _id):MTGAbility(_id,NULL){};
|
ListMaintainerAbility(int _id):MTGAbility(_id,NULL){};
|
||||||
ListMaintainerAbility(int _id, MTGCardInstance *_source):MTGAbility(_id, _source){};
|
ListMaintainerAbility(int _id, MTGCardInstance *_source):MTGAbility(_id, _source){};
|
||||||
ListMaintainerAbility(int _id, MTGCardInstance *_source,Damageable * _target):MTGAbility(_id, _source, _target){};
|
ListMaintainerAbility(int _id, MTGCardInstance *_source,Damageable * _target):MTGAbility(_id, _source, _target){};
|
||||||
virtual void Update(float dt);
|
virtual void Update(float dt);
|
||||||
virtual int canBeInList(MTGCardInstance * card) = 0;
|
virtual int canBeInList(MTGCardInstance * card) = 0;
|
||||||
virtual int added(MTGCardInstance * card) = 0;
|
virtual int added(MTGCardInstance * card) = 0;
|
||||||
virtual int removed(MTGCardInstance * card) = 0;
|
virtual int removed(MTGCardInstance * card) = 0;
|
||||||
virtual int destroy();
|
virtual int destroy();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* An attempt to globalize triggered abilities as much as possible */
|
||||||
|
class MTGAbilityBasicFeatures{
|
||||||
|
public:
|
||||||
|
Damageable * target;
|
||||||
|
GameObserver * game;
|
||||||
|
MTGCardInstance * source;
|
||||||
|
MTGAbilityBasicFeatures();
|
||||||
|
MTGAbilityBasicFeatures(MTGCardInstance * _source, Damageable * _target = NULL);
|
||||||
|
void init(MTGCardInstance * _source, Damageable * _target = NULL);
|
||||||
|
};
|
||||||
|
|
||||||
|
class Trigger:public MTGAbilityBasicFeatures{
|
||||||
|
public:
|
||||||
|
virtual int trigger()=0;
|
||||||
|
virtual int testDestroy(){return 0;};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TriggerAtPhase:public Trigger{
|
||||||
|
public:
|
||||||
|
int currentPhase, newPhase;
|
||||||
|
int phaseId;
|
||||||
|
|
||||||
|
TriggerAtPhase(int _phaseId);
|
||||||
|
|
||||||
|
virtual int trigger();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TriggerNextPhase:public TriggerAtPhase{
|
||||||
|
public:
|
||||||
|
int destroyActivated;
|
||||||
|
TriggerNextPhase(int _phaseId);
|
||||||
|
|
||||||
|
virtual int testDestroy();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
class TriggeredEvent:public MTGAbilityBasicFeatures{
|
||||||
|
public:
|
||||||
|
virtual int resolve()=0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class DrawEvent:public TriggeredEvent{
|
||||||
|
public:
|
||||||
|
Player * player;
|
||||||
|
int nbcards;
|
||||||
|
DrawEvent(Player * _player, int _nbcards);
|
||||||
|
int resolve();
|
||||||
|
};
|
||||||
|
|
||||||
|
class DestroyCondition:public MTGAbilityBasicFeatures{
|
||||||
|
public:
|
||||||
|
virtual int testDestroy();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class GenericTriggeredAbility:public TriggeredAbility{
|
||||||
|
public:
|
||||||
|
Trigger * t;
|
||||||
|
TriggeredEvent * te;
|
||||||
|
DestroyCondition * dc;
|
||||||
|
GenericTriggeredAbility(int id, MTGCardInstance * _source, Trigger * _t, TriggeredEvent * _te, DestroyCondition * _dc = NULL, Damageable * _target = NULL);
|
||||||
|
virtual int trigger();
|
||||||
|
virtual int resolve();
|
||||||
|
virtual int testDestroy();
|
||||||
|
~GenericTriggeredAbility();
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Ability Factory */
|
||||||
|
class AbilityFactory{
|
||||||
|
private:
|
||||||
|
int destroyAllFromTypeInPlay(const char * type, MTGCardInstance * source, int bury = 0);
|
||||||
|
int destroyAllFromColorInPlay(int color, MTGCardInstance * source, int bury = 0);
|
||||||
|
int putInPlayFromZone(MTGCardInstance * card, MTGGameZone * zone, Player * p);
|
||||||
|
Trigger * parseTrigger(string magicText);
|
||||||
|
public:
|
||||||
|
int magicText(int id, Spell * spell, MTGCardInstance * card = NULL);
|
||||||
|
void addAbilities(int _id, Spell * spell);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#include "MTGCardInstance.h"
|
#include "MTGCardInstance.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -93,50 +93,46 @@ static int _b[7] = {20, 0, 140,15, 50,255,128};
|
|||||||
#define MOUNTAINHOME 33
|
#define MOUNTAINHOME 33
|
||||||
#define SWAMPHOME 34
|
#define SWAMPHOME 34
|
||||||
#define PLAINSHOME 35
|
#define PLAINSHOME 35
|
||||||
#define FLANKING 36
|
|
||||||
#define RAMPAGE1 37
|
|
||||||
|
|
||||||
#define NB_BASIC_ABILITIES 38
|
#define NB_BASIC_ABILITIES 36
|
||||||
|
|
||||||
static const char * MTGBasicAbilities[] = {
|
static const char * MTGBasicAbilities[] = {
|
||||||
"trample",
|
"trample",
|
||||||
"forestwalk",
|
"forestwalk",
|
||||||
"islandwalk",
|
"islandwalk",
|
||||||
"mountainwalk",
|
"mountainwalk",
|
||||||
"swampwalk",
|
"swampwalk",
|
||||||
"plainwalk",
|
"plainwalk",
|
||||||
"flying",
|
"flying",
|
||||||
"first strike",
|
"first strike",
|
||||||
"double strike",
|
"double strike",
|
||||||
"fear",
|
"fear",
|
||||||
"flash",
|
"flash",
|
||||||
"haste",
|
"haste",
|
||||||
"lifelink",
|
"lifelink",
|
||||||
"reach",
|
"reach",
|
||||||
"shroud",
|
"shroud",
|
||||||
"vigilance",
|
"vigilance",
|
||||||
"defender",
|
"defender",
|
||||||
"banding",
|
"banding",
|
||||||
"protection from green",
|
"protection from green",
|
||||||
"protection from blue",
|
"protection from blue",
|
||||||
"protection from red",
|
"protection from red",
|
||||||
"protection from black",
|
"protection from black",
|
||||||
"protection from white",
|
"protection from white",
|
||||||
"unblockable",
|
"unblockable",
|
||||||
"wither",
|
"wither",
|
||||||
"persist",
|
"persist",
|
||||||
"retrace",
|
"retrace",
|
||||||
"exalted",
|
"exalted",
|
||||||
"legendary",
|
"legendary",
|
||||||
"shadow",
|
"shadow",
|
||||||
"reachshadow",
|
"reachshadow",
|
||||||
"foresthome",
|
"foresthome",
|
||||||
"islandhome",
|
"islandhome",
|
||||||
"moutainhome",
|
"moutainhome",
|
||||||
"swamphome",
|
"swamphome",
|
||||||
"plainshome",
|
"plainshome"
|
||||||
"flanking",
|
|
||||||
"rampage",
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -152,22 +148,40 @@ static const char * MTGBasicAbilities[] = {
|
|||||||
|
|
||||||
|
|
||||||
static const char *MTGPhaseNames[] =
|
static const char *MTGPhaseNames[] =
|
||||||
{
|
{
|
||||||
"---",
|
"---",
|
||||||
"Untap",
|
"Untap",
|
||||||
"Upkeep",
|
"Upkeep",
|
||||||
"Draw",
|
"Draw",
|
||||||
"Main phase 1",
|
"Main phase 1",
|
||||||
"Combat begins",
|
"Combat begins",
|
||||||
"Attackers",
|
"Attackers",
|
||||||
"Blockers",
|
"Blockers",
|
||||||
"Combat damage",
|
"Combat damage",
|
||||||
"Combat ends",
|
"Combat ends",
|
||||||
"Main phase 2",
|
"Main phase 2",
|
||||||
"End of turn",
|
"End of turn",
|
||||||
"cleanup",
|
"cleanup",
|
||||||
"---"
|
"---"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *MTGPhaseCodeNames[] =
|
||||||
|
{
|
||||||
|
"beginofturn",
|
||||||
|
"untap",
|
||||||
|
"upkeep",
|
||||||
|
"draw",
|
||||||
|
"firstmain",
|
||||||
|
"combatbegins",
|
||||||
|
"attackers",
|
||||||
|
"blockers",
|
||||||
|
"combatdamage",
|
||||||
|
"combatends",
|
||||||
|
"secondmain",
|
||||||
|
"endofturn",
|
||||||
|
"cleanup",
|
||||||
|
"beforenextturn"
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,31 +12,6 @@ ActionElement::ActionElement(int id):JGuiObject(id){
|
|||||||
tc = NULL;
|
tc = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void ActionElement::RenderMessageBackground(float y0, int _height){
|
|
||||||
float height = _height;
|
|
||||||
PIXEL_TYPE colors_up[] =
|
|
||||||
{
|
|
||||||
ARGB(0,255,255,255),
|
|
||||||
ARGB(0,255,255,255),
|
|
||||||
ARGB(128,255,255,255),
|
|
||||||
ARGB(128,255,255,255)
|
|
||||||
};
|
|
||||||
|
|
||||||
PIXEL_TYPE colors_down[] =
|
|
||||||
{
|
|
||||||
ARGB(128,255,255,255),
|
|
||||||
ARGB(128,255,255,255),
|
|
||||||
ARGB(0,255,255,255),
|
|
||||||
ARGB(0,255,255,255)
|
|
||||||
};
|
|
||||||
|
|
||||||
JRenderer * renderer = JRenderer::GetInstance();
|
|
||||||
renderer->FillRect(0,y0,SCREEN_WIDTH,height/2,colors_up);
|
|
||||||
renderer->FillRect(0,y0+height/2,SCREEN_WIDTH,height/2,colors_down);
|
|
||||||
// mEngine->DrawLine(0,y0,SCREEN_WIDTH,y0,ARGB(128,255,255,255));
|
|
||||||
// mEngine->DrawLine(0,y0+height,SCREEN_WIDTH,y0+height,ARGB(128,255,255,255));
|
|
||||||
}*/
|
|
||||||
|
|
||||||
int ActionElement::getActivity(){
|
int ActionElement::getActivity(){
|
||||||
|
|
||||||
|
|||||||
+1592
-1552
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user