- 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

View File

@@ -11,6 +11,7 @@
#include "PhaseRing.h"
#include "ReplacementEffects.h"
#include "GuiStatic.h"
#include <queue>
class MTGGamePhase;
class MTGAbility;
@@ -18,13 +19,14 @@ class MTGCardInstance;
struct CardGui;
class Player;
class TargetChooser;
using namespace std;
class GameObserver{
protected:
int reaction;
static GameObserver * mInstance;
MTGCardInstance * cardWaitingForTargets;
queue<WEvent *> eventsQueue;
int nbPlayers;
int currentPlayerId;

View File

@@ -192,7 +192,7 @@ void Spell::Render(){
if (quad){
quad->SetColor(ARGB(255,255,255,255));
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{
//
}
@@ -209,7 +209,7 @@ void Spell::Render(){
if (quad){
quad->SetColor(ARGB(220,255,255,255));
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
{
@@ -220,7 +220,7 @@ void Spell::Render(){
if (quad){
float scale = 250 / quad->mHeight;
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);
}
}

View File

@@ -56,7 +56,7 @@ int Damage::resolve(){
//Send (Damage/Replaced effect) event to listeners
g->receiveEvent(e);
SAFE_DELETE(e);
//SAFE_DELETE(e);
return a;
}

View File

@@ -462,7 +462,15 @@ void GameObserver::untapPhase(){
int GameObserver::receiveEvent(WEvent * e){
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();
}
}

View File

@@ -1890,7 +1890,7 @@ int ActivatedAbility::reactToClick(MTGCardInstance * card){
game->currentlyActing()->getManaPool()->pay(cost);
cost->doPayExtra();
}
if (needsTapping) source->tap();
if (needsTapping && source->isInPlay()) source->tap();
fireAbility();
return 1;
@@ -1899,7 +1899,6 @@ int ActivatedAbility::reactToClick(MTGCardInstance * card){
int ActivatedAbility::reactToTargetClick(Targetable * object){
if (!isReactingToTargetClick(object)) return 0;
if (needsTapping) source->tap();
if (cost){
if (object->typeAsTarget() == TARGET_CARD) cost->setExtraCostsAction(this, (MTGCardInstance *) object);
OutputDebugString("React To click 2\n");
@@ -1911,6 +1910,7 @@ int ActivatedAbility::reactToTargetClick(Targetable * object){
game->currentlyActing()->getManaPool()->pay(cost);
cost->doPayExtra();
}
if (needsTapping && source->isInPlay()) source->tap();
fireAbility();
return 1;
@@ -2407,8 +2407,8 @@ void AManaProducer::Render(){
{
for (int cost = output->getCost(i); cost > 0; --cost)
{
WEventEngageMana e(i, source);
GameObserver::GetInstance()->receiveEvent(&e);
WEvent * e = NEW WEventEngageMana(i, source);
GameObserver::GetInstance()->receiveEvent(e);
}
}

View File

@@ -182,7 +182,7 @@ void MTGCardInstance::tap(){
WEvent * e = NEW WEventCardTap(this, 0, 1);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(e);
delete e;
//delete e;
}
void MTGCardInstance::untap(){
@@ -191,7 +191,7 @@ void MTGCardInstance::untap(){
WEvent * e = NEW WEventCardTap(this, 1, 0);
GameObserver * game = GameObserver::GetInstance();
game->receiveEvent(e);
delete e;
//delete e;
}
@@ -409,7 +409,7 @@ int MTGCardInstance::setAttacker(int value){
attacker = value;
WEvent * e = NEW WEventCreatureAttacker(this,previousTarget, target);
GameObserver::GetInstance()->receiveEvent(e);
delete e;
//delete e;
return 1;
}
@@ -475,7 +475,7 @@ int MTGCardInstance::moveBlockerInRow(MTGCardInstance * blocker){
std::iter_swap(it1,it2);
WEvent* e = NEW WEventCreatureBlockerRank(blocker,*it2,this);
GameObserver::GetInstance()->receiveEvent(e);
delete(e);
//delete(e);
return 1;
}
@@ -528,7 +528,7 @@ int MTGCardInstance::setDefenser(MTGCardInstance * opponent){
}
g->blockersSorted = false;
g->receiveEvent(e);
delete e;
//delete e;
return 1;
}

View File

@@ -78,7 +78,7 @@ void MTGPlayerCards::drawFromLibrary(){
GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(drownCard,library,hand);
g->receiveEvent(e);
delete e;
//delete e;
}
}
@@ -115,7 +115,7 @@ MTGCardInstance * MTGPlayerCards::putInPlay(MTGCardInstance * card){
GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(copy, from, inPlay);
g->receiveEvent(e);
delete e;
//delete e;
return copy;
}
@@ -169,7 +169,7 @@ MTGCardInstance * MTGPlayerCards::putInZone(MTGCardInstance * card, MTGGameZone
GameObserver *g = GameObserver::GetInstance();
WEvent * e = NEW WEventZoneChange(copy, from, to);
g->receiveEvent(e);
delete e;
//delete e;
return ret;
}
return card; //Error

View File

@@ -39,7 +39,7 @@ Phase * PhaseRing::forward(){
//Warn the layers about the phase Change
WEvent * e = NEW WEventPhaseChange(cPhaseOld, *current);
GameObserver::GetInstance()->receiveEvent(e);
delete e;
//delete e;
return *current;
}