* Fix issue 357, where the hand loses focus when the opponent declares
  attackers while the hand is open.
* Harmonize the code for CardSelector.cpp to the coding style.
This commit is contained in:
jean.chalard
2010-03-05 17:01:00 +00:00
parent a04c0eff00
commit ec0354f630
3 changed files with 155 additions and 160 deletions

View File

@@ -47,146 +47,128 @@ template<>
void CardSelector::Remove(CardSelector::Target* card)
{
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
{
if (card == *it)
{
if (active == *it)
{
CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.0;
active = closest<Diff>(cards, limitor, active);
c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4;
}
if (active == *it) active = NULL;
cards.erase(it);
return;
}
}
if (card == *it)
{
if (active == *it)
{
CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.0;
active = closest<Diff>(cards, limitor, active);
c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4;
}
if (active == *it) active = NULL;
cards.erase(it);
return;
}
}
template<>
CardSelector::Target* CardSelector::fetchMemory(SelectorMemory& memory)
{
CardSelector::Target* CardSelector::fetchMemory(SelectorMemory& memory) {
if (NULL == memory.object) return NULL;
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
{
if (*it == memory.object)
{
if ((NULL == limitor) || (limitor->select(memory.object)))
return memory.object;
else break;
}
if (*it == memory.object) {
if ((NULL == limitor) || (limitor->select(memory.object)))
return memory.object;
else break;
}
// We come here if the card is not in the selector any more, or if
// it is there but it is now refused by the limitor.
return closest<True>(cards, limitor, memory.x, memory.y);
}
template<>
void CardSelector::Push()
{
void CardSelector::Push() {
memoryStack.push(SelectorMemory(active));
}
template<>
void CardSelector::Pop()
{
void CardSelector::Pop() {
Target* oldactive = active;
if (!memoryStack.empty())
{
active = fetchMemory(memoryStack.top());
memoryStack.pop();
SelectorZone oldowner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (nullZone != oldowner) lasts[oldowner] = SelectorMemory(oldactive);
}
if (active != oldactive)
{
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; } //Is this needed, I think it is one in Leaving(0) ?
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; } //Is this needed, I think it is one in Entering() ?
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
}
if (!memoryStack.empty()) {
active = fetchMemory(memoryStack.top());
memoryStack.pop();
SelectorZone oldowner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (nullZone != oldowner) lasts[oldowner] = SelectorMemory(oldactive);
}
if (active != oldactive) {
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; } //Is this needed, I think it is one in Leaving(0) ?
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; } //Is this needed, I think it is one in Entering() ?
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
}
}
template<>
bool CardSelector::CheckUserInput(JButton key)
{
if (!active)
{
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
if ((NULL == limitor) || (limitor->select(*it)))
{
active = *it;
active->Entering();
return true;
}
return true;
}
if (!active) {
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
if ((NULL == limitor) || (limitor->select(*it))) {
active = *it;
active->Entering();
return true;
}
return true;
}
Target* oldactive = active;
switch (key)
{
case JGE_BTN_SEC:
GameObserver::GetInstance()->cancelCurrentAction();
return true;
case JGE_BTN_OK:
GameObserver::GetInstance()->ButtonPressed(active);
return true;
break;
case JGE_BTN_LEFT:
active = closest<Left>(cards, limitor, active);
break;
case JGE_BTN_RIGHT:
active = closest<Right>(cards, limitor, active);
break;
case JGE_BTN_UP:
active = closest<Up>(cards, limitor, active);
break;
case JGE_BTN_DOWN:
active = closest<Down>(cards, limitor, active);
break;
case JGE_BTN_CANCEL:
bigMode = (bigMode+1) % NB_BIG_MODES;
if(bigMode == BIG_MODE_TEXT)
options[Options::DISABLECARDS].number = 1;
else
options[Options::DISABLECARDS].number = 0;
return true;
default:
return false;
}
if (active != oldactive)
{
SelectorZone oldowner, owner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (CardView *q = dynamic_cast<CardView*>(active)) owner = q->owner; else owner = nullZone;
if (oldowner != owner)
{
if (nullZone != owner)
switch (key) {
case JGE_BTN_SEC:
GameObserver::GetInstance()->cancelCurrentAction();
return true;
case JGE_BTN_OK:
GameObserver::GetInstance()->ButtonPressed(active);
return true;
break;
case JGE_BTN_LEFT:
active = closest<Left>(cards, limitor, active);
break;
case JGE_BTN_RIGHT:
active = closest<Right>(cards, limitor, active);
break;
case JGE_BTN_UP:
active = closest<Up>(cards, limitor, active);
break;
case JGE_BTN_DOWN:
active = closest<Down>(cards, limitor, active);
break;
case JGE_BTN_CANCEL:
bigMode = (bigMode+1) % NB_BIG_MODES;
if(bigMode == BIG_MODE_TEXT)
options[Options::DISABLECARDS].number = 1;
else
options[Options::DISABLECARDS].number = 0;
return true;
default:
return false;
}
if (active != oldactive) {
SelectorZone oldowner, owner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (CardView *q = dynamic_cast<CardView*>(active)) owner = q->owner; else owner = nullZone;
if (oldowner != owner) {
if (nullZone != owner) {
if (PlayGuiObject* old = fetchMemory(lasts[owner]))
switch (key)
{
if (PlayGuiObject* old = fetchMemory(lasts[owner]))
switch (key)
{
case JGE_BTN_LEFT: if (old->x < oldactive->x) active = old; break;
case JGE_BTN_RIGHT: if (old->x > oldactive->x) active = old; break;
case JGE_BTN_UP: if (old->y < oldactive->y) active = old; break;
case JGE_BTN_DOWN: if (old->y > oldactive->y) active = old; break;
default: if (old) active = old; break;
}
case JGE_BTN_LEFT: if (old->x < oldactive->x) active = old; break;
case JGE_BTN_RIGHT: if (old->x > oldactive->x) active = old; break;
case JGE_BTN_UP: if (old->y < oldactive->y) active = old; break;
case JGE_BTN_DOWN: if (old->y > oldactive->y) active = old; break;
default: if (old) active = old; break;
}
lasts[oldowner] = SelectorMemory(oldactive);
}
}
if (active != oldactive)
{
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; }
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; }
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
}
lasts[oldowner] = SelectorMemory(oldactive);
}
}
if (active != oldactive) {
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; }
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; }
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
}
return true;
}
template<>
void CardSelector::Update(float dt)
{
void CardSelector::Update(float dt) {
float boundary = duel->RightBoundary();
float position = boundary - CardGui::BigWidth / 2;
if (CardView* c = dynamic_cast<CardView*>(active))
@@ -199,60 +181,67 @@ void CardSelector::Update(float dt)
}
template<>
void CardSelector::Render()
{
if (active)
{
active->Render();
if (CardView* c = dynamic_cast<CardView*>(active)){
switch(bigMode){
case BIG_MODE_SHOW:
c->RenderBig(bigpos);
break;
case BIG_MODE_TEXT:
c->alternateRenderBig(bigpos);
break;
default:
break;
}
void CardSelector::Render() {
if (active) {
active->Render();
if (CardView* c = dynamic_cast<CardView*>(active)) {
switch(bigMode) {
case BIG_MODE_SHOW:
c->RenderBig(bigpos);
break;
case BIG_MODE_TEXT:
c->alternateRenderBig(bigpos);
break;
default:
break;
}
}
}
}
template<>
void CardSelector::Limit(LimitorFunctor<Target>* limitor, SelectorZone destzone)
{
void CardSelector::Limit(LimitorFunctor<Target>* limitor, SelectorZone destzone) {
this->limitor = limitor;
if (limitor && !limitor->select(active))
{
Target* oldactive = active;
SelectorZone oldowner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (oldowner != destzone)
{
if (nullZone != destzone)
if (PlayGuiObject* old = fetchMemory(lasts[destzone]))
active = old;
lasts[oldowner] = SelectorMemory(oldactive);
}
if (limitor && !limitor->select(active)) {
Target* oldactive = active;
SelectorZone oldowner;
if (CardView *q = dynamic_cast<CardView*>(oldactive)) oldowner = q->owner; else oldowner = nullZone;
if (oldowner != destzone) {
if (nullZone != destzone)
if (PlayGuiObject* old = fetchMemory(lasts[destzone]))
active = old;
lasts[oldowner] = SelectorMemory(oldactive);
}
if (limitor && !limitor->select(active))
{
active = NULL;
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
if (limitor->select(*it))
{
active = *it;
break;
}
}
if (active != oldactive)
{
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; }
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; }
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
if (limitor && !limitor->select(active)) {
active = NULL;
for (vector<Target*>::iterator it = cards.begin(); it != cards.end(); ++it)
if (limitor->select(*it)) {
active = *it;
break;
}
}
if (active != oldactive) {
{ CardView* c = dynamic_cast<CardView*>(oldactive); if (c) c->zoom = 1.0; }
{ CardView* c = dynamic_cast<CardView*>(active); if (c) c->zoom = 1.4; }
if (oldactive) oldactive->Leaving(JGE_BTN_NONE);
if (active) active->Entering();
}
}
}
template<>
void CardSelector::PushLimitor() {
if (NULL == limitor) return;
SelectorZone owner;
if (CardView *q = dynamic_cast<CardView*>(active)) owner = q->owner; else owner = nullZone;
limitorStack.push(make_pair(limitor, owner));
}
template<>
void CardSelector::PopLimitor() {
if (limitorStack.empty()) return;
Limit(limitorStack.top().first, limitorStack.top().second);
limitorStack.pop();
}