J :
* Interface for damage assignment.
This commit is contained in:
@@ -33,8 +33,8 @@ class Damage: public Interruptible {
|
||||
Damageable * target;
|
||||
int damage;
|
||||
void Render();
|
||||
Damage(int id, MTGCardInstance* source, Damageable * target);
|
||||
Damage(int id, MTGCardInstance* source, Damageable * target, int damage);
|
||||
Damage(MTGCardInstance* source, Damageable * target);
|
||||
Damage(MTGCardInstance* source, Damageable * target, int damage);
|
||||
int resolve();
|
||||
virtual ostream& toString(ostream& out) const;
|
||||
};
|
||||
|
||||
@@ -1,27 +1,35 @@
|
||||
#ifndef _DAMAGERDAMAGED_H_
|
||||
#define _DAMAGERDAMAGED_H_
|
||||
|
||||
#include "../include/MTGCardInstance.h"
|
||||
#include "MTGCardInstance.h"
|
||||
#include "CardGui.h"
|
||||
|
||||
class Player;
|
||||
|
||||
struct DamagerDamaged {
|
||||
MTGCardInstance* card;
|
||||
struct DamagerDamaged : TransientCardView {
|
||||
bool show;
|
||||
Player * damageSelecter;
|
||||
int mCount;
|
||||
Damage * damages[10];
|
||||
vector<Damage> damages;
|
||||
int damageToDeal;
|
||||
|
||||
int dealOneDamage(DamagerDamaged * target);
|
||||
int addDamage(int damage, DamagerDamaged * source);
|
||||
int removeDamagesTo(DamagerDamaged * target);
|
||||
int removeDamagesFrom(DamagerDamaged * source);
|
||||
void addDamage(int damage, DamagerDamaged* source);
|
||||
int removeDamagesTo(DamagerDamaged* target);
|
||||
int removeDamagesFrom(DamagerDamaged* source);
|
||||
void clearDamage();
|
||||
int sumDamages();
|
||||
int hasLethalDamage();
|
||||
DamagerDamaged(MTGCardInstance* card, Player * _damageSelecter, bool _hasFocus);
|
||||
bool hasLethalDamage();
|
||||
DamagerDamaged(MTGCardInstance* card, float x, float y, bool show, Player* damageSelecter);
|
||||
DamagerDamaged(MTGCardInstance* card, const Pos& ref, bool show, Player* damageSelecter);
|
||||
|
||||
~DamagerDamaged();
|
||||
void Render(Player * currentPlayer);
|
||||
void Render(CombatStep mode);
|
||||
};
|
||||
|
||||
typedef DamagerDamaged DefenserDamaged;
|
||||
struct AttackerDamaged : DamagerDamaged {
|
||||
vector<DefenserDamaged*> blockers;
|
||||
AttackerDamaged(MTGCardInstance* card, float x, float y, bool show, Player* damageSelecter);
|
||||
AttackerDamaged(MTGCardInstance* card, const Pos& ref, bool show, Player* damageSelecter);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,22 +5,24 @@
|
||||
#include "WEvent.h"
|
||||
#include "CardGui.h"
|
||||
#include "MTGCardInstance.h"
|
||||
#include "DamagerDamaged.h"
|
||||
|
||||
class GuiCombat : public GuiLayer
|
||||
{
|
||||
protected:
|
||||
GameObserver* go;
|
||||
TransientCardView* active, *activeAtk;
|
||||
JQuad* ok_quad;
|
||||
DamagerDamaged* active;
|
||||
AttackerDamaged* activeAtk;
|
||||
static JQuad* ok_quad;
|
||||
Pos ok;
|
||||
vector<MTGCardInstance*> attackers;
|
||||
TransientCardView* current;
|
||||
vector<AttackerDamaged*> attackers;
|
||||
DamagerDamaged* current;
|
||||
enum { BLK, ATK, OK, NONE } cursor_pos;
|
||||
|
||||
vector<TransientCardView*> atkViews;
|
||||
vector<TransientCardView*> blkViews;
|
||||
|
||||
void generateBlkViews(MTGCardInstance* card);
|
||||
CombatStep step;
|
||||
void addOne(DefenserDamaged* blocker, CombatStep);
|
||||
void removeOne(DefenserDamaged* blocker, CombatStep);
|
||||
void reaffectDamage(AttackerDamaged* attacker, CombatStep);
|
||||
void remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after);
|
||||
|
||||
public:
|
||||
GuiCombat(GameObserver* go);
|
||||
@@ -30,7 +32,8 @@ class GuiCombat : public GuiLayer
|
||||
virtual bool CheckUserInput(u32 key);
|
||||
virtual int receiveEventPlus(WEvent* e);
|
||||
virtual int receiveEventMinus(WEvent* e);
|
||||
|
||||
typedef vector<AttackerDamaged*>::iterator inner_iterator;
|
||||
};
|
||||
|
||||
|
||||
#endif // _GUICOMBAT_H_
|
||||
|
||||
@@ -82,6 +82,7 @@ class MTGCardInstance: public MTGCard, public Damageable {
|
||||
MTGCardInstance * getNextOpponent(MTGCardInstance * previous=NULL);
|
||||
MTGCardInstance * getNextDefenser(MTGCardInstance * previous=NULL);
|
||||
int nbOpponents();
|
||||
int stepPower(CombatStep step);
|
||||
|
||||
int afterDamage();
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ using std::list;
|
||||
|
||||
class Player;
|
||||
|
||||
typedef enum { ORDER, FIRST_STRIKE, DAMAGE } CombatStep;
|
||||
class Phase{
|
||||
public:
|
||||
int id;
|
||||
|
||||
@@ -8,6 +8,7 @@ struct Pos {
|
||||
float x, y, zoom, t, alpha;
|
||||
Pos(float, float, float, float, float);
|
||||
virtual void Update(float dt);
|
||||
void UpdateNow();
|
||||
virtual void Render();
|
||||
void Render(JQuad*);
|
||||
};
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _WEVENT_H_
|
||||
#define _WEVENT_H_
|
||||
|
||||
#include "PhaseRing.h"
|
||||
|
||||
class MTGCardInstance;
|
||||
class MTGGameZone;
|
||||
class Damage;
|
||||
@@ -82,10 +84,14 @@ struct WEventCreatureBlockerRank : public WEventCardUpdate {
|
||||
WEventCreatureBlockerRank(MTGCardInstance * card,MTGCardInstance * exchangeWith, MTGCardInstance * attacker);
|
||||
};
|
||||
|
||||
//Event when blockers are assigned and need to be reordered
|
||||
struct WEventBlockersAssigned : public WEvent {
|
||||
//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 {
|
||||
|
||||
Reference in New Issue
Block a user