* Interface for damage assignment.
This commit is contained in:
jean.chalard
2009-08-31 02:00:33 +00:00
parent c9f5519ba6
commit 6dab048a9e
19 changed files with 377 additions and 213 deletions

View File

@@ -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;
};

View File

@@ -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

View File

@@ -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_

View File

@@ -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();

View File

@@ -10,6 +10,7 @@ using std::list;
class Player;
typedef enum { ORDER, FIRST_STRIKE, DAMAGE } CombatStep;
class Phase{
public:
int id;

View File

@@ -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*);
};

View File

@@ -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 {