Some organisational prep work before I start working on a new navigation method (ie replacement for CardSelector). The current design was to allocate a CardSelector and pass in its pointer to a variety of classes via their constructors. To simplify things, now we use a singleton style pattern with an Instance() function - this means that when I implement a new class to replace CardSelector, I only need to modify what's returned by the singleton callback - as long as the new pointer class supports the same function calls, it'll be a straight drop-in.
This commit is contained in:
@@ -29,52 +29,75 @@ struct LimitorFunctor
|
|||||||
template <typename T=PlayGuiObject>
|
template <typename T=PlayGuiObject>
|
||||||
class ObjectSelector : public GuiLayer
|
class ObjectSelector : public GuiLayer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
typedef enum {
|
typedef enum {
|
||||||
nullZone, handZone, playZone
|
nullZone, handZone, playZone
|
||||||
} SelectorZone;
|
} SelectorZone;
|
||||||
struct SelectorMemory
|
struct SelectorMemory
|
||||||
{
|
{
|
||||||
T* object;
|
T* object;
|
||||||
float x, y;
|
float x, y;
|
||||||
SelectorMemory(T* object) : object(object) { if (object) { x = object->x; y = object->y; } };
|
SelectorMemory(T* object) : object(object) { if (object) { x = object->x; y = object->y; } };
|
||||||
SelectorMemory() { object = NULL; x = y = 0; };
|
SelectorMemory() { object = NULL; x = y = 0; };
|
||||||
};
|
};
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
vector<T*> cards;
|
vector<T*> cards;
|
||||||
T* active;
|
T* active;
|
||||||
DuelLayers* duel;
|
DuelLayers* duel;
|
||||||
LimitorFunctor<T>* limitor;
|
LimitorFunctor<T>* limitor;
|
||||||
Pos bigpos;
|
Pos bigpos;
|
||||||
map<const SelectorZone, SelectorMemory> lasts;
|
map<const SelectorZone, SelectorMemory> lasts;
|
||||||
stack< pair<LimitorFunctor<T>*, SelectorZone> > limitorStack;
|
stack< pair<LimitorFunctor<T>*, SelectorZone> > limitorStack;
|
||||||
stack<SelectorMemory> memoryStack;
|
stack<SelectorMemory> memoryStack;
|
||||||
|
|
||||||
T* fetchMemory(SelectorMemory&);
|
T* fetchMemory(SelectorMemory&);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ObjectSelector(DuelLayers*);
|
ObjectSelector(DuelLayers*);
|
||||||
int bigMode;
|
int bigMode;
|
||||||
void Add(T*);
|
void Add(T*);
|
||||||
void Remove(T*);
|
void Remove(T*);
|
||||||
bool CheckUserInput(JButton key);
|
bool CheckUserInput(JButton key);
|
||||||
bool CheckUserInput(int x, int y);
|
bool CheckUserInput(int x, int y);
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
void Render();
|
void Render();
|
||||||
void Push();
|
void Push();
|
||||||
void Pop();
|
void Pop();
|
||||||
|
|
||||||
void Limit(LimitorFunctor<T>* limitor, SelectorZone);
|
void Limit(LimitorFunctor<T>* limitor, SelectorZone);
|
||||||
void PushLimitor();
|
void PushLimitor();
|
||||||
void PopLimitor();
|
void PopLimitor();
|
||||||
|
|
||||||
typedef T Target;
|
typedef T Target;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef ObjectSelector<> CardSelector;
|
typedef ObjectSelector<> CardSelector;
|
||||||
typedef LimitorFunctor<CardSelector::Target> Limitor;
|
typedef LimitorFunctor<CardSelector::Target> Limitor;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CardSelectorSingleton
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
** CardSelector is essentially a singleton in its usage
|
||||||
|
** It's not enforced, but it needs to eventually migrate to the real thing
|
||||||
|
** For now, this function will fake it out - it's up to the client caller to make sure
|
||||||
|
** that this gets destroyed via a Terminate call (this is currently handled in DualLayers's destructor)
|
||||||
|
*/
|
||||||
|
CardSelector* Instance();
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Create the singleton pointer. Instance() isn't valid until this is called.
|
||||||
|
*/
|
||||||
|
CardSelector* Create(DuelLayers* inDuelLayers);
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Teardown the singleton pointer instance.
|
||||||
|
*/
|
||||||
|
void Terminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
struct Exp
|
struct Exp
|
||||||
{
|
{
|
||||||
static inline bool test(CardSelector::Target*, CardSelector::Target*);
|
static inline bool test(CardSelector::Target*, CardSelector::Target*);
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ public:
|
|||||||
int receiveEvent(WEvent * e);
|
int receiveEvent(WEvent * e);
|
||||||
float RightBoundary();
|
float RightBoundary();
|
||||||
|
|
||||||
CardSelector* cs;
|
CardSelector* mCardSelector;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "ActionLayer.h"
|
#include "ActionLayer.h"
|
||||||
|
|||||||
@@ -15,12 +15,11 @@ class GuiAvatars : public GuiLayer
|
|||||||
GuiGraveyard* selfGraveyard, *opponentGraveyard;
|
GuiGraveyard* selfGraveyard, *opponentGraveyard;
|
||||||
GuiLibrary* selfLibrary, *opponentLibrary;
|
GuiLibrary* selfLibrary, *opponentLibrary;
|
||||||
GuiOpponentHand *opponentHand;
|
GuiOpponentHand *opponentHand;
|
||||||
CardSelector* cs;
|
|
||||||
GuiAvatar* active;
|
GuiAvatar* active;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GuiAvatars(CardSelector*);
|
GuiAvatars();
|
||||||
~GuiAvatars();
|
~GuiAvatars();
|
||||||
|
|
||||||
GuiAvatar* GetSelf();
|
GuiAvatar* GetSelf();
|
||||||
|
|||||||
@@ -35,10 +35,9 @@ class GuiHand : public GuiLayer
|
|||||||
const MTGHand* hand;
|
const MTGHand* hand;
|
||||||
JQuad *back;
|
JQuad *back;
|
||||||
vector<CardView*> cards;
|
vector<CardView*> cards;
|
||||||
CardSelector* cs;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GuiHand(CardSelector* cs, MTGHand* hand);
|
GuiHand(MTGHand* hand);
|
||||||
~GuiHand();
|
~GuiHand();
|
||||||
void Update(float dt);
|
void Update(float dt);
|
||||||
bool isInHand(CardView*);
|
bool isInHand(CardView*);
|
||||||
@@ -49,7 +48,7 @@ class GuiHand : public GuiLayer
|
|||||||
class GuiHandOpponent : public GuiHand
|
class GuiHandOpponent : public GuiHand
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GuiHandOpponent(CardSelector* cs, MTGHand* hand);
|
GuiHandOpponent(MTGHand* hand);
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
virtual int receiveEventPlus(WEvent* e);
|
virtual int receiveEventPlus(WEvent* e);
|
||||||
virtual int receiveEventMinus(WEvent* e);
|
virtual int receiveEventMinus(WEvent* e);
|
||||||
@@ -66,7 +65,7 @@ class GuiHandSelf : public GuiHand
|
|||||||
Pos backpos;
|
Pos backpos;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GuiHandSelf(CardSelector* cs, MTGHand* hand);
|
GuiHandSelf(MTGHand* hand);
|
||||||
~GuiHandSelf();
|
~GuiHandSelf();
|
||||||
virtual int receiveEventPlus(WEvent* e);
|
virtual int receiveEventPlus(WEvent* e);
|
||||||
virtual int receiveEventMinus(WEvent* e);
|
virtual int receiveEventMinus(WEvent* e);
|
||||||
|
|||||||
@@ -71,13 +71,12 @@ class GuiPlay : public GuiLayer
|
|||||||
BattleField battleField;
|
BattleField battleField;
|
||||||
Lands selfLands, opponentLands;
|
Lands selfLands, opponentLands;
|
||||||
Spells selfSpells, opponentSpells;
|
Spells selfSpells, opponentSpells;
|
||||||
CardSelector* cs;
|
|
||||||
iterator end_spells;
|
iterator end_spells;
|
||||||
|
|
||||||
vector<CardView*> cards;
|
vector<CardView*> cards;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GuiPlay(GameObserver*, CardSelector*);
|
GuiPlay(GameObserver*);
|
||||||
~GuiPlay();
|
~GuiPlay();
|
||||||
virtual void Render();
|
virtual void Render();
|
||||||
void Replace();
|
void Replace();
|
||||||
|
|||||||
@@ -83,8 +83,7 @@ void Interruptible::Render(MTGCardInstance * source, JQuad * targetQuad, string
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (bigQuad){
|
if (bigQuad){
|
||||||
GameObserver * game = GameObserver::GetInstance();
|
int showMode = CardSelectorSingleton::Instance()->bigMode;
|
||||||
int showMode = game->mLayers->cs->bigMode;
|
|
||||||
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220);
|
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220);
|
||||||
switch(showMode){
|
switch(showMode){
|
||||||
case BIG_MODE_SHOW:
|
case BIG_MODE_SHOW:
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ void CardDisplay::Render(){
|
|||||||
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220);
|
Pos pos = Pos(CardGui::BigWidth / 2, CardGui::BigHeight / 2 - 10, 1.0, 0.0, 220);
|
||||||
int showMode = BIG_MODE_SHOW;
|
int showMode = BIG_MODE_SHOW;
|
||||||
if (game){
|
if (game){
|
||||||
showMode = game->mLayers->cs->bigMode;
|
showMode = CardSelectorSingleton::Instance()->bigMode;
|
||||||
pos.actY = 150;
|
pos.actY = 150;
|
||||||
if (x < (CardGui::BigWidth / 2)) pos.actX = SCREEN_WIDTH - 10 - CardGui::BigWidth / 2;
|
if (x < (CardGui::BigWidth / 2)) pos.actX = SCREEN_WIDTH - 10 - CardGui::BigWidth / 2;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "../include/PlayGuiObject.h"
|
#include "../include/PlayGuiObject.h"
|
||||||
#include "../include/CardGui.h"
|
#include "../include/CardGui.h"
|
||||||
#include "../include/CardSelector.h"
|
#include "../include/CardSelector.h"
|
||||||
@@ -299,3 +301,29 @@ void CardSelector::PopLimitor() {
|
|||||||
Limit(limitorStack.top().first, limitorStack.top().second);
|
Limit(limitorStack.top().first, limitorStack.top().second);
|
||||||
limitorStack.pop();
|
limitorStack.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace CardSelectorSingleton
|
||||||
|
{
|
||||||
|
static CardSelector* sCardSelectorInstance = NULL;
|
||||||
|
|
||||||
|
CardSelector* Create(DuelLayers* inDuelLayers)
|
||||||
|
{
|
||||||
|
if (sCardSelectorInstance == NULL)
|
||||||
|
sCardSelectorInstance = NEW CardSelector(inDuelLayers);
|
||||||
|
|
||||||
|
return sCardSelectorInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
CardSelector* Instance()
|
||||||
|
{
|
||||||
|
assert(sCardSelectorInstance);
|
||||||
|
return sCardSelectorInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Terminate()
|
||||||
|
{
|
||||||
|
SAFE_DELETE(sCardSelectorInstance);
|
||||||
|
sCardSelectorInstance = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ void DuelLayers::init(){
|
|||||||
|
|
||||||
GameObserver* go = GameObserver::GetInstance();
|
GameObserver* go = GameObserver::GetInstance();
|
||||||
|
|
||||||
cs = NEW CardSelector(this);
|
mCardSelector = CardSelectorSingleton::Create(this);
|
||||||
//1 Action Layer
|
//1 Action Layer
|
||||||
action = NEW ActionLayer();
|
action = NEW ActionLayer();
|
||||||
action->Add(NEW MTGGamePhase(action->getMaxId()));
|
action->Add(NEW MTGGamePhase(action->getMaxId()));
|
||||||
@@ -47,11 +47,11 @@ void DuelLayers::init(){
|
|||||||
Add(stack = NEW ActionStack(go));
|
Add(stack = NEW ActionStack(go));
|
||||||
Add(combat = NEW GuiCombat(go));
|
Add(combat = NEW GuiCombat(go));
|
||||||
Add(action);
|
Add(action);
|
||||||
Add(cs);
|
Add(mCardSelector);
|
||||||
Add(hand = NEW GuiHandSelf(cs, go->players[0]->game->hand));
|
Add(hand = NEW GuiHandSelf(go->players[0]->game->hand));
|
||||||
Add(avatars = NEW GuiAvatars(cs));
|
Add(avatars = NEW GuiAvatars());
|
||||||
Add(NEW GuiHandOpponent(cs, go->players[1]->game->hand));
|
Add(NEW GuiHandOpponent(go->players[1]->game->hand));
|
||||||
Add(NEW GuiPlay(go, cs));
|
Add(NEW GuiPlay(go));
|
||||||
Add(NEW GuiPhaseBar());
|
Add(NEW GuiPhaseBar());
|
||||||
Add(NEW GuiFrame());
|
Add(NEW GuiFrame());
|
||||||
Add(NEW GuiBackground());
|
Add(NEW GuiBackground());
|
||||||
@@ -69,7 +69,7 @@ void DuelLayers::CheckUserInput(int isAI){
|
|||||||
if (avatars->CheckUserInput(key)) break; //avatars need to check their input before action (CTRL_CROSS)
|
if (avatars->CheckUserInput(key)) break; //avatars need to check their input before action (CTRL_CROSS)
|
||||||
if (action->CheckUserInput(key)) break;
|
if (action->CheckUserInput(key)) break;
|
||||||
if (hand->CheckUserInput(key)) break;
|
if (hand->CheckUserInput(key)) break;
|
||||||
if (cs->CheckUserInput(key)) break;
|
if (CardSelectorSingleton::Instance()->CheckUserInput(key)) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(JGE::GetInstance()->GetLeftClickCoordinates(x, y))
|
if(JGE::GetInstance()->GetLeftClickCoordinates(x, y))
|
||||||
@@ -78,7 +78,7 @@ void DuelLayers::CheckUserInput(int isAI){
|
|||||||
{
|
{
|
||||||
JGE::GetInstance()->LeftClickedProcessed();
|
JGE::GetInstance()->LeftClickedProcessed();
|
||||||
}
|
}
|
||||||
else if (cs->CheckUserInput(x, y))
|
else if (CardSelectorSingleton::Instance()->CheckUserInput(x, y))
|
||||||
{
|
{
|
||||||
JGE::GetInstance()->LeftClickedProcessed();
|
JGE::GetInstance()->LeftClickedProcessed();
|
||||||
}
|
}
|
||||||
@@ -115,14 +115,21 @@ DuelLayers::DuelLayers() : nbitems(0) {}
|
|||||||
DuelLayers::~DuelLayers(){
|
DuelLayers::~DuelLayers(){
|
||||||
int _nbitems = nbitems;
|
int _nbitems = nbitems;
|
||||||
nbitems = 0;
|
nbitems = 0;
|
||||||
for (int i = 0; i < _nbitems; ++i){
|
for (int i = 0; i < _nbitems; ++i)
|
||||||
delete objects[i];
|
{
|
||||||
objects[i] = NULL;
|
if (objects[i] != mCardSelector)
|
||||||
|
{
|
||||||
|
delete objects[i];
|
||||||
|
objects[i] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < waiters.size(); ++i)
|
for (size_t i = 0; i < waiters.size(); ++i)
|
||||||
delete(waiters[i]);
|
delete(waiters[i]);
|
||||||
Trash::cleanup();
|
Trash::cleanup();
|
||||||
|
|
||||||
|
CardSelectorSingleton::Terminate();
|
||||||
|
mCardSelector = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DuelLayers::Add(GuiLayer * layer){
|
void DuelLayers::Add(GuiLayer * layer){
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#define LIB_GRAVE_OFFSET 230
|
#define LIB_GRAVE_OFFSET 230
|
||||||
|
|
||||||
GuiAvatars::GuiAvatars(CardSelector* cs) : cs(cs), active(NULL)
|
GuiAvatars::GuiAvatars() : active(NULL)
|
||||||
{
|
{
|
||||||
Add(self = NEW GuiAvatar (SCREEN_WIDTH, SCREEN_HEIGHT, false,
|
Add(self = NEW GuiAvatar (SCREEN_WIDTH, SCREEN_HEIGHT, false,
|
||||||
GameObserver::GetInstance()->players[0], GuiAvatar::BOTTOM_RIGHT, this));
|
GameObserver::GetInstance()->players[0], GuiAvatar::BOTTOM_RIGHT, this));
|
||||||
@@ -22,8 +22,13 @@ GuiAvatars::GuiAvatars(CardSelector* cs) : cs(cs), active(NULL)
|
|||||||
Add(opponentGraveyard = NEW GuiGraveyard(5 + GuiAvatar::Width * 1.2 - GuiGameZone::Width / 2, 5, false, GameObserver::GetInstance()->players[1], this));
|
Add(opponentGraveyard = NEW GuiGraveyard(5 + GuiAvatar::Width * 1.2 - GuiGameZone::Width / 2, 5, false, GameObserver::GetInstance()->players[1], this));
|
||||||
Add(opponentLibrary = NEW GuiLibrary (5 + GuiAvatar::Width *1.2 - GuiGameZone::Width / 2, 5 + GuiGameZone::Height + 5, false, GameObserver::GetInstance()->players[1], this));
|
Add(opponentLibrary = NEW GuiLibrary (5 + GuiAvatar::Width *1.2 - GuiGameZone::Width / 2, 5 + GuiGameZone::Height + 5, false, GameObserver::GetInstance()->players[1], this));
|
||||||
|
|
||||||
cs->Add(self); cs->Add(selfGraveyard); cs->Add(selfLibrary);
|
CardSelectorSingleton::Instance()->Add(self);
|
||||||
cs->Add(opponent); cs->Add(opponentGraveyard); cs->Add(opponentLibrary); cs->Add(opponentHand);
|
CardSelectorSingleton::Instance()->Add(selfGraveyard);
|
||||||
|
CardSelectorSingleton::Instance()->Add(selfLibrary);
|
||||||
|
CardSelectorSingleton::Instance()->Add(opponent);
|
||||||
|
CardSelectorSingleton::Instance()->Add(opponentGraveyard);
|
||||||
|
CardSelectorSingleton::Instance()->Add(opponentLibrary);
|
||||||
|
CardSelectorSingleton::Instance()->Add(opponentHand);
|
||||||
selfGraveyard->alpha = selfLibrary->alpha = opponentGraveyard->alpha = opponentLibrary->alpha = opponentHand->alpha = 0;
|
selfGraveyard->alpha = selfLibrary->alpha = opponentGraveyard->alpha = opponentLibrary->alpha = opponentHand->alpha = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ bool HandLimitor::greyout(Target* t)
|
|||||||
}
|
}
|
||||||
HandLimitor::HandLimitor(GuiHand* hand) : hand(hand) {}
|
HandLimitor::HandLimitor(GuiHand* hand) : hand(hand) {}
|
||||||
|
|
||||||
GuiHand::GuiHand(CardSelector* cs, MTGHand* hand) : GuiLayer(), hand(hand), cs(cs)
|
GuiHand::GuiHand(MTGHand* hand) : GuiLayer(), hand(hand)
|
||||||
{
|
{
|
||||||
back = resources.RetrieveTempQuad("handback.png");
|
back = resources.RetrieveTempQuad("handback.png");
|
||||||
if(back) back->SetTextureRect(1, 0, 100, 250);
|
if(back) back->SetTextureRect(1, 0, 100, 250);
|
||||||
@@ -51,7 +51,7 @@ bool GuiHand::isInHand(CardView* card)
|
|||||||
return (it != cards.end());
|
return (it != cards.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiHandOpponent::GuiHandOpponent(CardSelector* cs, MTGHand* hand) : GuiHand(cs, hand) {}
|
GuiHandOpponent::GuiHandOpponent(MTGHand* hand) : GuiHand(hand) {}
|
||||||
|
|
||||||
void GuiHandOpponent::Render()
|
void GuiHandOpponent::Render()
|
||||||
{
|
{
|
||||||
@@ -68,7 +68,7 @@ void GuiHandOpponent::Render()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiHandSelf::GuiHandSelf(CardSelector* cs, MTGHand* hand) : GuiHand(cs, hand), state(Closed), backpos(ClosedX, SCREEN_HEIGHT - 250, 1.0, 0, 255)
|
GuiHandSelf::GuiHandSelf(MTGHand* hand) : GuiHand(hand), state(Closed), backpos(ClosedX, SCREEN_HEIGHT - 250, 1.0, 0, 255)
|
||||||
{
|
{
|
||||||
limitor = NEW HandLimitor(this);
|
limitor = NEW HandLimitor(this);
|
||||||
if (OptionHandDirection::HORIZONTAL == options[Options::HANDDIRECTION].number)
|
if (OptionHandDirection::HORIZONTAL == options[Options::HANDDIRECTION].number)
|
||||||
@@ -134,9 +134,9 @@ bool GuiHandSelf::CheckUserInput(JButton key)
|
|||||||
if (trigger == key)
|
if (trigger == key)
|
||||||
{
|
{
|
||||||
state = (Open == state ? Closed : Open);
|
state = (Open == state ? Closed : Open);
|
||||||
if (Open == state) cs->Push();
|
if (Open == state) CardSelectorSingleton::Instance()->Push();
|
||||||
cs->Limit(Open == state ? limitor : NULL, CardSelector::handZone);
|
CardSelectorSingleton::Instance()->Limit(Open == state ? limitor : NULL, CardSelector::handZone);
|
||||||
if (Closed == state) cs->Pop();
|
if (Closed == state) CardSelectorSingleton::Instance()->Pop();
|
||||||
if (OptionHandDirection::HORIZONTAL == options[Options::HANDDIRECTION].number)
|
if (OptionHandDirection::HORIZONTAL == options[Options::HANDDIRECTION].number)
|
||||||
backpos.y = Open == state ? OpenY : ClosedY;
|
backpos.y = Open == state ? OpenY : ClosedY;
|
||||||
else
|
else
|
||||||
@@ -217,7 +217,7 @@ int GuiHandSelf::receiveEventPlus(WEvent* e)
|
|||||||
card = NEW CardView(CardSelector::handZone, ev->card, ClosedRowX, 0);
|
card = NEW CardView(CardSelector::handZone, ev->card, ClosedRowX, 0);
|
||||||
card->t = 6*M_PI;
|
card->t = 6*M_PI;
|
||||||
cards.push_back(card);
|
cards.push_back(card);
|
||||||
cs->Add(card);
|
CardSelectorSingleton::Instance()->Add(card);
|
||||||
Repos();
|
Repos();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -232,7 +232,7 @@ int GuiHandSelf::receiveEventMinus(WEvent* e)
|
|||||||
if (event->card->previous == (*it)->card)
|
if (event->card->previous == (*it)->card)
|
||||||
{
|
{
|
||||||
CardView* cv = *it;
|
CardView* cv = *it;
|
||||||
cs->Remove(cv);
|
CardSelectorSingleton::Instance()->Remove(cv);
|
||||||
cards.erase(it);
|
cards.erase(it);
|
||||||
Repos();
|
Repos();
|
||||||
trash(cv);
|
trash(cv);
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ void GuiPlay::BattleField::Render()
|
|||||||
JRenderer::GetInstance()->FillRect(22, SCREEN_HEIGHT / 2 + 10 - height / 2, 250, height, ARGB(127, red, 0, 0));
|
JRenderer::GetInstance()->FillRect(22, SCREEN_HEIGHT / 2 + 10 - height / 2, 250, height, ARGB(127, red, 0, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiPlay::GuiPlay(GameObserver* game, CardSelector* cs) : game(game), cs(cs)
|
GuiPlay::GuiPlay(GameObserver* game) : game(game)
|
||||||
{
|
{
|
||||||
end_spells = cards.end();
|
end_spells = cards.end();
|
||||||
}
|
}
|
||||||
@@ -221,56 +221,57 @@ void GuiPlay::Update(float dt)
|
|||||||
int GuiPlay::receiveEventPlus(WEvent * e)
|
int GuiPlay::receiveEventPlus(WEvent * e)
|
||||||
{
|
{
|
||||||
if (WEventZoneChange *event = dynamic_cast<WEventZoneChange*>(e))
|
if (WEventZoneChange *event = dynamic_cast<WEventZoneChange*>(e))
|
||||||
|
{
|
||||||
|
if ((game->players[0]->inPlay() == event->to) ||
|
||||||
|
(game->players[1]->inPlay() == event->to))
|
||||||
{
|
{
|
||||||
if ((game->players[0]->inPlay() == event->to) ||
|
CardView * card;
|
||||||
(game->players[1]->inPlay() == event->to))
|
if (event->card->view){
|
||||||
{
|
//fix for http://code.google.com/p/wagic/issues/detail?id=462.
|
||||||
CardView * card;
|
// We don't want a card in the hand to have an alpha of 0
|
||||||
if (event->card->view){
|
event->card->view->alpha = 255;
|
||||||
//fix for http://code.google.com/p/wagic/issues/detail?id=462.
|
|
||||||
// We don't want a card in the hand to have an alpha of 0
|
|
||||||
event->card->view->alpha = 255;
|
|
||||||
|
|
||||||
card = NEW CardView(CardSelector::playZone, event->card, *(event->card->view));
|
card = NEW CardView(CardSelector::playZone, event->card, *(event->card->view));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
card = NEW CardView(CardSelector::playZone, event->card, 0, 0);
|
|
||||||
cards.push_back(card);
|
|
||||||
card->t = event->card->isTapped() ? M_PI / 2 : 0;
|
|
||||||
card->alpha = 255;
|
|
||||||
cs->Add(card);
|
|
||||||
Replace();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (WEventCreatureAttacker* event = dynamic_cast<WEventCreatureAttacker*>(e))
|
|
||||||
{
|
|
||||||
if (NULL != event->after)
|
|
||||||
battleField.addAttacker(event->card);
|
|
||||||
else if (NULL != event->before)
|
|
||||||
battleField.removeAttacker(event->card);
|
|
||||||
Replace();
|
|
||||||
}
|
|
||||||
else if (dynamic_cast<WEventCreatureBlocker*>(e))
|
|
||||||
{
|
|
||||||
Replace();
|
|
||||||
}
|
|
||||||
else if (WEventCardTap* event = dynamic_cast<WEventCardTap*>(e))
|
|
||||||
{
|
|
||||||
if (CardView* cv = dynamic_cast<CardView*>(event->card->view))
|
|
||||||
cv->t = event->after ? M_PI / 2 : 0;
|
|
||||||
else
|
else
|
||||||
event->card->view->actT = event->after ? M_PI / 2 : 0;
|
card = NEW CardView(CardSelector::playZone, event->card, 0, 0);
|
||||||
|
cards.push_back(card);
|
||||||
|
card->t = event->card->isTapped() ? M_PI / 2 : 0;
|
||||||
|
card->alpha = 255;
|
||||||
|
CardSelectorSingleton::Instance()->Add(card);
|
||||||
|
Replace();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else if (WEventCreatureAttacker* event = dynamic_cast<WEventCreatureAttacker*>(e))
|
||||||
|
{
|
||||||
|
if (NULL != event->after)
|
||||||
|
battleField.addAttacker(event->card);
|
||||||
|
else if (NULL != event->before)
|
||||||
|
battleField.removeAttacker(event->card);
|
||||||
|
Replace();
|
||||||
|
}
|
||||||
|
else if (dynamic_cast<WEventCreatureBlocker*>(e))
|
||||||
|
{
|
||||||
|
Replace();
|
||||||
|
}
|
||||||
|
else if (WEventCardTap* event = dynamic_cast<WEventCardTap*>(e))
|
||||||
|
{
|
||||||
|
if (CardView* cv = dynamic_cast<CardView*>(event->card->view))
|
||||||
|
cv->t = event->after ? M_PI / 2 : 0;
|
||||||
|
else
|
||||||
|
event->card->view->actT = event->after ? M_PI / 2 : 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
else if (WEventPhaseChange *event = dynamic_cast<WEventPhaseChange*>(e))
|
else if (WEventPhaseChange *event = dynamic_cast<WEventPhaseChange*>(e))
|
||||||
{
|
{
|
||||||
if (Constants::MTG_PHASE_COMBATEND == event->to->id) battleField.colorFlow = -1;
|
if (Constants::MTG_PHASE_COMBATEND == event->to->id) battleField.colorFlow = -1;
|
||||||
}
|
}
|
||||||
else if (dynamic_cast<WEventCardChangeType*>(e))
|
else if (dynamic_cast<WEventCardChangeType*>(e))
|
||||||
Replace();
|
Replace();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GuiPlay::receiveEventMinus(WEvent * e)
|
int GuiPlay::receiveEventMinus(WEvent * e)
|
||||||
{
|
{
|
||||||
if (WEventZoneChange *event = dynamic_cast<WEventZoneChange*>(e))
|
if (WEventZoneChange *event = dynamic_cast<WEventZoneChange*>(e))
|
||||||
@@ -283,7 +284,7 @@ int GuiPlay::receiveEventMinus(WEvent * e)
|
|||||||
if (event->card->previous && event->card->previous->attacker) battleField.removeAttacker(event->card->previous);
|
if (event->card->previous && event->card->previous->attacker) battleField.removeAttacker(event->card->previous);
|
||||||
else if (event->card->attacker) battleField.removeAttacker(event->card);
|
else if (event->card->attacker) battleField.removeAttacker(event->card);
|
||||||
CardView* cv = *it;
|
CardView* cv = *it;
|
||||||
cs->Remove(cv);
|
CardSelectorSingleton::Instance()->Remove(cv);
|
||||||
cards.erase(it);
|
cards.erase(it);
|
||||||
trash(cv);
|
trash(cv);
|
||||||
Replace();
|
Replace();
|
||||||
|
|||||||
@@ -725,12 +725,11 @@ int MTGAttackRule::reactToClick(MTGCardInstance * card){
|
|||||||
|
|
||||||
//Graphically select the next card that can attack
|
//Graphically select the next card that can attack
|
||||||
if(!card->isAttacker()){
|
if(!card->isAttacker()){
|
||||||
CardSelector * cs = game->mLayers->cs;
|
CardSelectorSingleton::Instance()->PushLimitor();
|
||||||
cs->PushLimitor();
|
CardSelectorSingleton::Instance()->Limit(this,CardSelector::playZone);
|
||||||
cs->Limit(this,CardSelector::playZone);
|
CardSelectorSingleton::Instance()->CheckUserInput(JGE_BTN_RIGHT);
|
||||||
cs->CheckUserInput(JGE_BTN_RIGHT);
|
CardSelectorSingleton::Instance()->Limit(NULL,CardSelector::playZone);
|
||||||
cs->Limit(NULL,CardSelector::playZone);
|
CardSelectorSingleton::Instance()->PopLimitor();
|
||||||
cs->PopLimitor();
|
|
||||||
}
|
}
|
||||||
card->toggleAttacker();
|
card->toggleAttacker();
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user