* Fix PSP compilation errors
* This does not magically make it work
This commit is contained in:
jean.chalard
2009-08-31 16:55:03 +00:00
parent cc550cf7b9
commit 336412f006
11 changed files with 69 additions and 14 deletions

View File

@@ -52,6 +52,17 @@ class DamageStack :public GuiLayer, public Interruptible{
DamageStack(GameObserver* game);
};
class StableDamageStack : public Interruptible {
protected:
vector<Damage*> damage;
public:
int resolve();
void Render();
void Add(Damage*);
virtual ostream& toString(ostream& out) const;
};
#endif

View File

@@ -23,6 +23,7 @@ class GuiCombat : public GuiLayer
void removeOne(DefenserDamaged* blocker, CombatStep);
void autoaffectDamage(AttackerDamaged* attacker, CombatStep);
void remaskBlkViews(AttackerDamaged* before, AttackerDamaged* after);
void resolve();
public:
GuiCombat(GameObserver* go);

View File

@@ -48,8 +48,6 @@ void CardGui::Render()
renderer->RenderQuad(quad, actX, actY, actT, scale, scale);
}
else {
int color = card->getColor();
//MTGCard * mtgcard = card->model;
const float scale = actZ;
renderer->RenderQuad(GameApp::CommonRes->GetQuad("shadow"), actX + (scale-1)*15, actY + (scale-1)*15, actT, 28*scale, 40*scale);
@@ -95,11 +93,10 @@ void CardGui::Render()
}
JQuad * CardGui::alternateThumbQuad(MTGCard * card){
JRenderer * renderer = JRenderer::GetInstance();
JQuad * q;
switch(card->getColor())
{
case Constants::MTG_COLOR_GREEN: q = cache.getQuad("sets/green_thumb.jpg");break;
case Constants::MTG_COLOR_GREEN: q = cache.getQuad("sets/green_thumb.jpg");break;
case Constants::MTG_COLOR_BLUE : q = cache.getQuad("sets/blue_thumb.jpg");break;
case Constants::MTG_COLOR_RED : q = cache.getQuad("sets/red_thumb.jpg");break;
case Constants::MTG_COLOR_BLACK: q = cache.getQuad("sets/black_thumb.jpg");break;

View File

@@ -130,3 +130,33 @@ ostream& DamageStack::toString(ostream& out) const
{
return (out << "DamageStack ::: currentState : " << currentState);
}
int StableDamageStack::resolve()
{
for (vector<Damage*>::iterator it = damage.begin(); it != damage.end(); ++it)
if ((*it)->state == NOT_RESOLVED) (*it)->resolve();
for (vector<Damage*>::iterator it = damage.begin(); it != damage.end(); ++it)
if ((*it)->state == RESOLVED_OK) (*it)->target->afterDamage();
return 1;
}
void StableDamageStack::Render(){
int currenty = y;
for (vector<Damage*>::iterator it = damage.begin(); it != damage.end(); ++it)
{
if ((*it)->state == NOT_RESOLVED){
(*it)->x = x;
(*it)->y = currenty;
currenty += (*it)->mHeight;
(*it)->Render();
}
}
}
void StableDamageStack::Add(Damage* d) { damage.push_back(d); }
ostream& StableDamageStack::toString(ostream& out) const
{
return (out << "StableDamageStack ::: size : " << damage.size());
}

View File

@@ -28,7 +28,7 @@ void DamagerDamaged::addDamage(int damage, DamagerDamaged* source){
if (0 >= i->damage) damages.erase(i);
return;
}
if (0 < damage) damages.push_back(Damage(source->card, this->card,damage));
if (0 < damage) damages.push_back(Damage(source->card, card, damage));
return;
}

View File

@@ -141,8 +141,8 @@ bool GuiCombat::CheckUserInput(u32 key)
switch (step)
{
case ORDER : go->receiveEvent(NEW WEventCombatStepChange(FIRST_STRIKE)); break;
case FIRST_STRIKE : go->receiveEvent(NEW WEventCombatStepChange(DAMAGE)); break;
case DAMAGE : cursor_pos = NONE; go->userRequestNextGamePhase(); break;
case FIRST_STRIKE : resolve(); go->receiveEvent(NEW WEventCombatStepChange(DAMAGE)); break;
case DAMAGE : resolve(); cursor_pos = NONE; go->userRequestNextGamePhase(); break;
}
break;
case PSP_CTRL_TRIANGLE:
@@ -240,6 +240,20 @@ void GuiCombat::Render()
}
}
void GuiCombat::resolve()
{
StableDamageStack stack;
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
{
for (vector<DefenserDamaged*>::iterator q = (*it)->blockers.begin(); q != (*it)->blockers.end(); ++q)
for (vector<Damage>::iterator d = (*q)->damages.begin(); d != (*q)->damages.end(); ++d)
stack.Add(&(*d));
for (vector<Damage>::iterator d = (*it)->damages.begin(); d != (*it)->damages.end(); ++d)
stack.Add(&(*d));
}
stack.resolve();
}
int GuiCombat::receiveEventPlus(WEvent* e)
{
if (WEventCreatureAttacker* event = dynamic_cast<WEventCreatureAttacker*>(e))
@@ -318,7 +332,7 @@ int GuiCombat::receiveEventMinus(WEvent* e)
case ORDER:
{
if (ORDER == step) return 0; // Why do I take this twice ? >.>
if (go->currentPlayer->isAI()) { go->receiveEvent(NEW WEventCombatStepChange(FIRST_STRIKE)); return 1; }
if (!go->currentPlayer->displayStack()) { go->receiveEvent(NEW WEventCombatStepChange(FIRST_STRIKE)); return 1; }
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
{
(*it)->show = (1 < (*it)->blockers.size());
@@ -351,9 +365,8 @@ int GuiCombat::receiveEventMinus(WEvent* e)
go->receiveEvent(NEW WEventCombatStepChange(DAMAGE));
return 1;
case DAMAGE: DAMAGE:
if (go->currentPlayer->isAI()) { go->userRequestNextGamePhase(); return 1; }
if (!go->currentPlayer->displayStack()) { go->userRequestNextGamePhase(); return 1; }
step = event->step;
cursor_pos = ATK;
for (inner_iterator attacker = attackers.begin(); attacker != attackers.end(); ++attacker)
autoaffectDamage(*attacker, step);
for (inner_iterator it = attackers.begin(); it != attackers.end(); ++it)
@@ -366,9 +379,11 @@ int GuiCombat::receiveEventMinus(WEvent* e)
active->zoom = 2.7;
activeAtk = static_cast<AttackerDamaged*>(active);
remaskBlkViews(NULL, static_cast<AttackerDamaged*>(active));
cursor_pos = ATK;
}
else
{
resolve();
if (FIRST_STRIKE == step) go->receiveEvent(NEW WEventCombatStepChange(DAMAGE));
else go->userRequestNextGamePhase();
}

View File

@@ -52,7 +52,7 @@ void GuiFrame::Render()
renderer->RenderQuad(gold1, -sized, 16);
renderer->RenderQuad(gold1, -sized + 479, 16);
goldGlow->SetColor(ARGB(100+(rand()%50), 255, 255, 255));
goldGlow->SetColor(ARGB((100+(rand()%50)), 255, 255, 255));
renderer->RenderQuad(goldGlow, -sized, 9);
renderer->RenderQuad(goldGlow, -sized + 480, 9);

View File

@@ -168,7 +168,7 @@ int GuiMana::receiveEventMinus(WEvent* e)
if ((event->color == (*it)->color) && (ManaIcon::ALIVE == (*it)->mode)) { (*it)->Wither(); return 1; }
return 1;
}
else if (WEventEmptyManaPool *event = dynamic_cast<WEventEmptyManaPool*>(e))
else if (dynamic_cast<WEventEmptyManaPool*>(e))
{
for (vector<ManaIcon*>::iterator it = manas.begin(); it != manas.end(); ++it)
(*it)->Drop(); //TODO: split according to which manapool was emptied...

View File

@@ -2,6 +2,7 @@
#include "../include/GameApp.h"
#include "../include/GuiPhaseBar.h"
/*
static int colors[] =
{
ARGB(255, 255, 255, 255),
@@ -17,6 +18,7 @@ static int colors[] =
ARGB(255, 255, 255, 255),
ARGB(255, 255, 255, 255)
};
*/
GuiPhaseBar::GuiPhaseBar() : phase(GameObserver::GetInstance()->phaseRing->getCurrentPhase()), angle(0.0f)
{

View File

@@ -193,7 +193,7 @@ int GuiPlay::receiveEventPlus(WEvent * e)
battleField.removeAttacker(event->card);
Replace();
}
else if (WEventCreatureBlocker* event = dynamic_cast<WEventCreatureBlocker*>(e))
else if (dynamic_cast<WEventCreatureBlocker*>(e))
{
Replace();
}

View File

@@ -296,7 +296,6 @@ void ShopItems::Render(){
}
char credits[512];
sprintf(credits,_("credits: %i").c_str(), playerdata->credits);
unsigned int len = 4 + mFont->GetStringWidth(credits);
mFont->SetColor(ARGB(200,0,0,0));
mFont->DrawString(credits, 5, SCREEN_HEIGHT - 13);
mFont->SetColor(ARGB(255,255,255,255));