Erwan
- Fixed some segfaults in Test suite
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user