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