J :
* Display the avatar in the damaged list if the attacker has trample.
This commit is contained in:
@@ -14,14 +14,14 @@ class GuiCombat : public GuiLayer
|
|||||||
DamagerDamaged* active;
|
DamagerDamaged* active;
|
||||||
AttackerDamaged* activeAtk;
|
AttackerDamaged* activeAtk;
|
||||||
static JQuad* ok_quad;
|
static JQuad* ok_quad;
|
||||||
Pos ok;
|
Pos ok, enemy_avatar;
|
||||||
vector<AttackerDamaged*> attackers;
|
vector<AttackerDamaged*> attackers;
|
||||||
DamagerDamaged* current;
|
DamagerDamaged* current;
|
||||||
enum { BLK, ATK, OK, NONE } cursor_pos;
|
enum { BLK, ATK, OK, NONE } cursor_pos;
|
||||||
CombatStep step;
|
CombatStep step;
|
||||||
void addOne(DefenserDamaged* blocker, CombatStep);
|
void addOne(DefenserDamaged* blocker, CombatStep);
|
||||||
void removeOne(DefenserDamaged* blocker, CombatStep);
|
void removeOne(DefenserDamaged* blocker, CombatStep);
|
||||||
void reaffectDamage(AttackerDamaged* attacker, CombatStep);
|
void autoaffectDamage(AttackerDamaged* attacker, CombatStep);
|
||||||
void remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after);
|
void remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -13,7 +13,10 @@ struct Right : public Exp { static inline bool test(DamagerDamaged* ref, Damager
|
|||||||
|
|
||||||
JQuad* GuiCombat::ok_quad = NULL;
|
JQuad* GuiCombat::ok_quad = NULL;
|
||||||
|
|
||||||
GuiCombat::GuiCombat(GameObserver* go) : GuiLayer(), go(go), active(false), activeAtk(NULL), ok(SCREEN_WIDTH - MARGIN, 210, 1, 0, 255), cursor_pos(NONE), step(DAMAGE)
|
GuiCombat::GuiCombat(GameObserver* go) : GuiLayer(), go(go), active(false), activeAtk(NULL),
|
||||||
|
ok(SCREEN_WIDTH - MARGIN, 210, 1, 0, 255),
|
||||||
|
enemy_avatar(SCREEN_WIDTH - MARGIN, TOP_LINE, 2, 0, 255),
|
||||||
|
cursor_pos(NONE), step(DAMAGE)
|
||||||
{
|
{
|
||||||
if (NULL == ok_quad)
|
if (NULL == ok_quad)
|
||||||
{
|
{
|
||||||
@@ -30,8 +33,12 @@ GuiCombat::GuiCombat(GameObserver* go) : GuiLayer(), go(go), active(false), acti
|
|||||||
GuiCombat::~GuiCombat()
|
GuiCombat::~GuiCombat()
|
||||||
{
|
{
|
||||||
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
||||||
|
{
|
||||||
|
for (vector<DefenserDamaged*>::iterator q = (*it)->blockers.begin(); q != (*it)->blockers.end(); ++q)
|
||||||
|
delete(*q);
|
||||||
delete (*it);
|
delete (*it);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static inline void repos(typename vector<T*>::iterator begin, typename vector<T*>::iterator end, signed size = -1)
|
static inline void repos(typename vector<T*>::iterator begin, typename vector<T*>::iterator end, signed size = -1)
|
||||||
@@ -56,6 +63,7 @@ void GuiCombat::Update(float dt)
|
|||||||
for (vector<DefenserDamaged*>::iterator q = activeAtk->blockers.begin(); q != activeAtk->blockers.end(); ++q)
|
for (vector<DefenserDamaged*>::iterator q = activeAtk->blockers.begin(); q != activeAtk->blockers.end(); ++q)
|
||||||
(*q)->Update(dt);
|
(*q)->Update(dt);
|
||||||
ok.Update(dt);
|
ok.Update(dt);
|
||||||
|
enemy_avatar.Update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiCombat::remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after)
|
void GuiCombat::remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after)
|
||||||
@@ -67,11 +75,12 @@ void GuiCombat::remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after)
|
|||||||
(*q)->actX = MARGIN; (*q)->y = TOP_LINE;
|
(*q)->actX = MARGIN; (*q)->y = TOP_LINE;
|
||||||
(*q)->zoom = 2.2; (*q)->t = 0;
|
(*q)->zoom = 2.2; (*q)->t = 0;
|
||||||
}
|
}
|
||||||
repos<DefenserDamaged>(after->blockers.begin(), after->blockers.end());
|
repos<DefenserDamaged>(after->blockers.begin(), after->blockers.end(), after->card->has(Constants::TRAMPLE) ? 0 : -1);
|
||||||
|
enemy_avatar.actX = MARGIN; enemy_avatar.x = SCREEN_WIDTH - MARGIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiCombat::reaffectDamage(AttackerDamaged* attacker, CombatStep step)
|
void GuiCombat::autoaffectDamage(AttackerDamaged* attacker, CombatStep step)
|
||||||
{
|
{
|
||||||
attacker->clearDamage();
|
attacker->clearDamage();
|
||||||
unsigned damage = attacker->card->stepPower(step);
|
unsigned damage = attacker->card->stepPower(step);
|
||||||
@@ -201,8 +210,26 @@ void GuiCombat::Render()
|
|||||||
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
||||||
if ((*it)->show) (*it)->Render(step);
|
if ((*it)->show) (*it)->Render(step);
|
||||||
if (activeAtk)
|
if (activeAtk)
|
||||||
|
{
|
||||||
|
signed damage = activeAtk->card->stepPower(step);
|
||||||
for (vector<DefenserDamaged*>::iterator q = activeAtk->blockers.begin(); q != activeAtk->blockers.end(); ++q)
|
for (vector<DefenserDamaged*>::iterator q = activeAtk->blockers.begin(); q != activeAtk->blockers.end(); ++q)
|
||||||
|
{
|
||||||
(*q)->Render(step);
|
(*q)->Render(step);
|
||||||
|
damage -= (*q)->sumDamages();
|
||||||
|
}
|
||||||
|
if (damage < 0) damage = 0;
|
||||||
|
if (activeAtk->card->has(Constants::TRAMPLE))
|
||||||
|
{
|
||||||
|
go->opponent()->mAvatar->SetHotSpot(18, 25);
|
||||||
|
enemy_avatar.Render(go->opponent()->mAvatar);
|
||||||
|
JLBFont * mFont = GameApp::CommonRes->GetJLBFont(Constants::MAIN_FONT);
|
||||||
|
mFont->SetColor(ARGB(255, 255, 64, 0));
|
||||||
|
{
|
||||||
|
char buf[10]; sprintf(buf, "%i", damage);
|
||||||
|
mFont->DrawString(buf, enemy_avatar.actX - 25, enemy_avatar.actY - 40);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ok_quad) ok.Render(ok_quad);
|
if (ok_quad) ok.Render(ok_quad);
|
||||||
renderer->DrawLine(0, SCREEN_HEIGHT / 2 + 10, SCREEN_WIDTH, SCREEN_HEIGHT / 2 + 10, ARGB(255, 255, 64, 0));
|
renderer->DrawLine(0, SCREEN_HEIGHT / 2 + 10, SCREEN_WIDTH, SCREEN_HEIGHT / 2 + 10, ARGB(255, 255, 64, 0));
|
||||||
if (FIRST_STRIKE == step)
|
if (FIRST_STRIKE == step)
|
||||||
@@ -251,7 +278,7 @@ int GuiCombat::receiveEventPlus(WEvent* e)
|
|||||||
(*it1)->x = (*it2)->x;
|
(*it1)->x = (*it2)->x;
|
||||||
(*it2)->x = x;
|
(*it2)->x = x;
|
||||||
std::iter_swap(it1, it2);
|
std::iter_swap(it1, it2);
|
||||||
reaffectDamage(*it, DAMAGE);
|
autoaffectDamage(*it, DAMAGE);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -295,7 +322,7 @@ int GuiCombat::receiveEventMinus(WEvent* e)
|
|||||||
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
||||||
{
|
{
|
||||||
(*it)->show = (1 < (*it)->blockers.size());
|
(*it)->show = (1 < (*it)->blockers.size());
|
||||||
reaffectDamage(*it, DAMAGE);
|
autoaffectDamage(*it, DAMAGE);
|
||||||
}
|
}
|
||||||
active = NULL;
|
active = NULL;
|
||||||
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
||||||
@@ -328,7 +355,7 @@ int GuiCombat::receiveEventMinus(WEvent* e)
|
|||||||
step = event->step;
|
step = event->step;
|
||||||
cursor_pos = ATK;
|
cursor_pos = ATK;
|
||||||
for (inner_iterator attacker = attackers.begin(); attacker != attackers.end(); ++attacker)
|
for (inner_iterator attacker = attackers.begin(); attacker != attackers.end(); ++attacker)
|
||||||
reaffectDamage(*attacker, step);
|
autoaffectDamage(*attacker, step);
|
||||||
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
|
||||||
(*it)->show = ((*it)->card->has(Constants::DOUBLESTRIKE) || ((*it)->card->has(Constants::FIRSTSTRIKE) ^ (DAMAGE == step))) && (1 < (*it)->blockers.size());
|
(*it)->show = ((*it)->card->has(Constants::DOUBLESTRIKE) || ((*it)->card->has(Constants::FIRSTSTRIKE) ^ (DAMAGE == step))) && (1 < (*it)->blockers.size());
|
||||||
repos<AttackerDamaged>(attackers.begin(), attackers.end(), 0);
|
repos<AttackerDamaged>(attackers.begin(), attackers.end(), 0);
|
||||||
|
|||||||
@@ -14,11 +14,6 @@ bool GuiStatic::Leaving(u32 key)
|
|||||||
|
|
||||||
GuiAvatar::GuiAvatar(float x, float y, bool hasFocus, Player * player, Corner corner, GuiAvatars* parent) : GuiStatic(GuiAvatar::Height, x, y, hasFocus, parent), avatarRed(255), currentLife(player->life), corner(corner), player(player) {
|
GuiAvatar::GuiAvatar(float x, float y, bool hasFocus, Player * player, Corner corner, GuiAvatars* parent) : GuiStatic(GuiAvatar::Height, x, y, hasFocus, parent), avatarRed(255), currentLife(player->life), corner(corner), player(player) {
|
||||||
type = GUI_AVATAR;
|
type = GUI_AVATAR;
|
||||||
switch (corner)
|
|
||||||
{
|
|
||||||
case TOP_LEFT : player->mAvatar->SetHotSpot(0, 0); break;
|
|
||||||
case BOTTOM_RIGHT : player->mAvatar->SetHotSpot(35, 50); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GuiAvatar::Render()
|
void GuiAvatar::Render()
|
||||||
@@ -41,6 +36,11 @@ void GuiAvatar::Render()
|
|||||||
JQuad * quad = player->mAvatar;
|
JQuad * quad = player->mAvatar;
|
||||||
if (quad)
|
if (quad)
|
||||||
{
|
{
|
||||||
|
switch (corner)
|
||||||
|
{
|
||||||
|
case TOP_LEFT : quad->SetHotSpot(0, 0); break;
|
||||||
|
case BOTTOM_RIGHT : quad->SetHotSpot(35, 50); break;
|
||||||
|
}
|
||||||
quad->SetColor(ARGB((int)actA, 255, avatarRed, avatarRed));
|
quad->SetColor(ARGB((int)actA, 255, avatarRed, avatarRed));
|
||||||
r->RenderQuad(quad, actX, actY, actT, actZ, actZ);
|
r->RenderQuad(quad, actX, actY, actT, actZ, actZ);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -638,7 +638,7 @@ int MTGCardInstance::stepPower(CombatStep step)
|
|||||||
case FIRST_STRIKE :
|
case FIRST_STRIKE :
|
||||||
if (has(Constants::FIRSTSTRIKE) || has(Constants::DOUBLESTRIKE)) return MAX(0, power); else return 0;
|
if (has(Constants::FIRSTSTRIKE) || has(Constants::DOUBLESTRIKE)) return MAX(0, power); else return 0;
|
||||||
case DAMAGE :
|
case DAMAGE :
|
||||||
|
default :
|
||||||
if (has(Constants::FIRSTSTRIKE)) return 0; else return MAX(0, power);
|
if (has(Constants::FIRSTSTRIKE)) return 0; else return MAX(0, power);
|
||||||
default : return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user