- Fixed some segfaults in Test suite
This commit is contained in:
wagic.the.homebrew@gmail.com
2009-08-23 10:22:54 +00:00
parent de8404df97
commit 846f3b2ffc
8 changed files with 29 additions and 19 deletions
+3 -1
View File
@@ -11,6 +11,7 @@
#include "PhaseRing.h" #include "PhaseRing.h"
#include "ReplacementEffects.h" #include "ReplacementEffects.h"
#include "GuiStatic.h" #include "GuiStatic.h"
#include <queue>
class MTGGamePhase; class MTGGamePhase;
class MTGAbility; class MTGAbility;
@@ -18,13 +19,14 @@ class MTGCardInstance;
struct CardGui; struct CardGui;
class Player; class Player;
class TargetChooser; class TargetChooser;
using namespace std;
class GameObserver{ class GameObserver{
protected: protected:
int reaction; int reaction;
static GameObserver * mInstance; static GameObserver * mInstance;
MTGCardInstance * cardWaitingForTargets; MTGCardInstance * cardWaitingForTargets;
queue<WEvent *> eventsQueue;
int nbPlayers; int nbPlayers;
int currentPlayerId; int currentPlayerId;
+3 -3
View File
@@ -192,7 +192,7 @@ void Spell::Render(){
if (quad){ if (quad){
quad->SetColor(ARGB(255,255,255,255)); quad->SetColor(ARGB(255,255,255,255));
float scale = mHeight / quad->mHeight; float scale = mHeight / quad->mHeight;
renderer->RenderQuad(quad, x , y , 0,scale,scale); renderer->RenderQuad(quad, x+10*scale , y+15*scale , 0,scale,scale);
}else{ }else{
// //
} }
@@ -209,7 +209,7 @@ void Spell::Render(){
if (quad){ if (quad){
quad->SetColor(ARGB(220,255,255,255)); quad->SetColor(ARGB(220,255,255,255));
float scale = 257.f / quad->mHeight; float scale = 257.f / quad->mHeight;
renderer->RenderQuad(quad, 10 , 20 , 0.0f,scale,scale); renderer->RenderQuad(quad, 10+100*scale , 20+145*scale , 0.0f,scale,scale);
} }
else else
{ {
@@ -220,7 +220,7 @@ void Spell::Render(){
if (quad){ if (quad){
float scale = 250 / quad->mHeight; float scale = 250 / quad->mHeight;
quad->SetColor(ARGB(40,255,255,255)); quad->SetColor(ARGB(40,255,255,255));
renderer->RenderQuad(quad, 20, 20, 0.0f, scale, scale); renderer->RenderQuad(quad, 20+15*scale, 20+20*scale, 0.0f, scale, scale);
} }
} }
+1 -1
View File
@@ -56,7 +56,7 @@ int Damage::resolve(){
//Send (Damage/Replaced effect) event to listeners //Send (Damage/Replaced effect) event to listeners
g->receiveEvent(e); g->receiveEvent(e);
SAFE_DELETE(e); //SAFE_DELETE(e);
return a; return a;
} }
+9 -1
View File
@@ -462,7 +462,15 @@ void GameObserver::untapPhase(){
int GameObserver::receiveEvent(WEvent * e){ int GameObserver::receiveEvent(WEvent * e){
if (!e) return 0; if (!e) return 0;
return mLayers->receiveEvent(e); eventsQueue.push(e);
if (eventsQueue.size() > 1) return -1;
int result = 0;
while(eventsQueue.size()){
WEvent * ev = eventsQueue.front();
result += mLayers->receiveEvent(ev);
SAFE_DELETE(ev);
eventsQueue.pop();
}
} }
+4 -4
View File
@@ -1890,7 +1890,7 @@ int ActivatedAbility::reactToClick(MTGCardInstance * card){
game->currentlyActing()->getManaPool()->pay(cost); game->currentlyActing()->getManaPool()->pay(cost);
cost->doPayExtra(); cost->doPayExtra();
} }
if (needsTapping) source->tap(); if (needsTapping && source->isInPlay()) source->tap();
fireAbility(); fireAbility();
return 1; return 1;
@@ -1899,7 +1899,6 @@ int ActivatedAbility::reactToClick(MTGCardInstance * card){
int ActivatedAbility::reactToTargetClick(Targetable * object){ int ActivatedAbility::reactToTargetClick(Targetable * object){
if (!isReactingToTargetClick(object)) return 0; if (!isReactingToTargetClick(object)) return 0;
if (needsTapping) source->tap();
if (cost){ if (cost){
if (object->typeAsTarget() == TARGET_CARD) cost->setExtraCostsAction(this, (MTGCardInstance *) object); if (object->typeAsTarget() == TARGET_CARD) cost->setExtraCostsAction(this, (MTGCardInstance *) object);
OutputDebugString("React To click 2\n"); OutputDebugString("React To click 2\n");
@@ -1911,6 +1910,7 @@ int ActivatedAbility::reactToTargetClick(Targetable * object){
game->currentlyActing()->getManaPool()->pay(cost); game->currentlyActing()->getManaPool()->pay(cost);
cost->doPayExtra(); cost->doPayExtra();
} }
if (needsTapping && source->isInPlay()) source->tap();
fireAbility(); fireAbility();
return 1; return 1;
@@ -2407,8 +2407,8 @@ void AManaProducer::Render(){
{ {
for (int cost = output->getCost(i); cost > 0; --cost) for (int cost = output->getCost(i); cost > 0; --cost)
{ {
WEventEngageMana e(i, source); WEvent * e = NEW WEventEngageMana(i, source);
GameObserver::GetInstance()->receiveEvent(&e); GameObserver::GetInstance()->receiveEvent(e);
} }
} }
+5 -5
View File
@@ -182,7 +182,7 @@ void MTGCardInstance::tap(){
WEvent * e = NEW WEventCardTap(this, 0, 1); WEvent * e = NEW WEventCardTap(this, 0, 1);
GameObserver * game = GameObserver::GetInstance(); GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(e); game->receiveEvent(e);
delete e; //delete e;
} }
void MTGCardInstance::untap(){ void MTGCardInstance::untap(){
@@ -191,7 +191,7 @@ void MTGCardInstance::untap(){
WEvent * e = NEW WEventCardTap(this, 1, 0); WEvent * e = NEW WEventCardTap(this, 1, 0);
GameObserver * game = GameObserver::GetInstance(); GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(e); game->receiveEvent(e);
delete e; //delete e;
} }
@@ -409,7 +409,7 @@ int MTGCardInstance::setAttacker(int value){
attacker = value; attacker = value;
WEvent * e = NEW WEventCreatureAttacker(this,previousTarget, target); WEvent * e = NEW WEventCreatureAttacker(this,previousTarget, target);
GameObserver::GetInstance()->receiveEvent(e); GameObserver::GetInstance()->receiveEvent(e);
delete e; //delete e;
return 1; return 1;
} }
@@ -475,7 +475,7 @@ int MTGCardInstance::moveBlockerInRow(MTGCardInstance * blocker){
std::iter_swap(it1,it2); std::iter_swap(it1,it2);
WEvent* e = NEW WEventCreatureBlockerRank(blocker,*it2,this); WEvent* e = NEW WEventCreatureBlockerRank(blocker,*it2,this);
GameObserver::GetInstance()->receiveEvent(e); GameObserver::GetInstance()->receiveEvent(e);
delete(e); //delete(e);
return 1; return 1;
} }
@@ -528,7 +528,7 @@ int MTGCardInstance::setDefenser(MTGCardInstance * opponent){
} }
g->blockersSorted = false; g->blockersSorted = false;
g->receiveEvent(e); g->receiveEvent(e);
delete e; //delete e;
return 1; return 1;
} }
+3 -3
View File
@@ -78,7 +78,7 @@ void MTGPlayerCards::drawFromLibrary(){
GameObserver *g = GameObserver::GetInstance(); GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(drownCard,library,hand); WEvent * e = NEW WEventZoneChange(drownCard,library,hand);
g->receiveEvent(e); g->receiveEvent(e);
delete e; //delete e;
} }
} }
@@ -115,7 +115,7 @@ MTGCardInstance * MTGPlayerCards::putInPlay(MTGCardInstance * card){
GameObserver *g = GameObserver::GetInstance(); GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(copy, from, inPlay); WEvent * e = NEW WEventZoneChange(copy, from, inPlay);
g->receiveEvent(e); g->receiveEvent(e);
delete e; //delete e;
return copy; return copy;
} }
@@ -169,7 +169,7 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
GameObserver *g = GameObserver::GetInstance(); GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(copy, from, to); WEvent * e = NEW WEventZoneChange(copy, from, to);
g->receiveEvent(e); g->receiveEvent(e);
delete e; //delete e;
return ret; return ret;
} }
return card; //Error return card; //Error
+1 -1
View File
@@ -39,7 +39,7 @@ Phase * PhaseRing::forward(){
//Warn the layers about the phase Change //Warn the layers about the phase Change
WEvent * e = NEW WEventPhaseChange(cPhaseOld, *current); WEvent * e = NEW WEventPhaseChange(cPhaseOld, *current);
GameObserver::GetInstance()->receiveEvent(e); GameObserver::GetInstance()->receiveEvent(e);
delete e; //delete e;
return *current; return *current;
} }