* Fix almost all tests.
* This version "nearly" works.
This commit is contained in:
jean.chalard
2009-09-07 14:37:32 +00:00
parent 635c87202a
commit 5b473a1505
19 changed files with 160 additions and 106 deletions

View File

@@ -82,11 +82,11 @@ void GameObserver::nextPlayer(){
}
void GameObserver::nextGamePhase(){
Phase * cPhaseOld = phaseRing->getCurrentPhase();
if (cPhaseOld->id == Constants::MTG_PHASE_COMBATBLOCKERS)
if (DAMAGE != combatStep) { nextCombatStep(); return; }
phaseRing->forward();
Phase * cPhase = phaseRing->getCurrentPhase();
currentGamePhase = cPhase->id;
if (Constants::MTG_PHASE_COMBATDAMAGE == currentGamePhase)
nextCombatStep();
if (currentPlayer != cPhase->player) nextPlayer();
@@ -99,16 +99,14 @@ void GameObserver::nextGamePhase(){
return nextGamePhase();
}
for (int i=0; i < 2; i++){
for (int i = 0; i < 2; ++i)
players[i]->getManaPool()->init();
}
//After End of turn
if (currentGamePhase == Constants::MTG_PHASE_AFTER_EOT){
//Auto Hand cleaning, in case the player didn't do it himself
while(currentPlayer->game->hand->nb_cards > 7){
while(currentPlayer->game->hand->nb_cards > 7)
currentPlayer->game->putInGraveyard(currentPlayer->game->hand->cards[0]);
}
mLayers->stackLayer()->garbageCollect(); //clean stack history for this turn;
mLayers->actionLayer()->Update(0);
for (int i=0; i < 2; i++){
@@ -141,26 +139,24 @@ void GameObserver::nextCombatStep()
{
switch (combatStep)
{
case BLOCKERS : receiveEvent(NEW WEventCombatStepChange(combatStep = ORDER)); return;
case ORDER : receiveEvent(NEW WEventCombatStepChange(combatStep = FIRST_STRIKE)); return;
case FIRST_STRIKE : receiveEvent(NEW WEventCombatStepChange(combatStep = DAMAGE)); return;
case DAMAGE : ; // Nothing : go to next phase
case BLOCKERS : receiveEvent(NEW WEventCombatStepChange(combatStep = ORDER)); return;
case ORDER : receiveEvent(NEW WEventCombatStepChange(combatStep = FIRST_STRIKE)); return;
case FIRST_STRIKE : receiveEvent(NEW WEventCombatStepChange(combatStep = END_FIRST_STRIKE)); return;
case END_FIRST_STRIKE : receiveEvent(NEW WEventCombatStepChange(combatStep = DAMAGE)); return;
case DAMAGE : receiveEvent(NEW WEventCombatStepChange(combatStep = END_DAMAGE)); return;
case END_DAMAGE : ; // Nothing : go to next phase
}
}
void GameObserver::userRequestNextGamePhase(){
if (mLayers->stackLayer()->getNext(NULL,0,NOT_RESOLVED)) return;
if (getCurrentTargetChooser()) return;
// if (mLayers->combatLayer()->isDisplayed()) return;
Phase * cPhaseOld = phaseRing->getCurrentPhase();
if (cPhaseOld->id == Constants::MTG_PHASE_COMBATDAMAGE)
if (FIRST_STRIKE == combatStep || END_FIRST_STRIKE == combatStep || DAMAGE == combatStep) { nextCombatStep(); return; }
if (cPhaseOld->id == Constants::MTG_PHASE_COMBATBLOCKERS)
if (DAMAGE != combatStep) { nextCombatStep(); return; }
if (cPhaseOld->id == Constants::MTG_PHASE_COMBATBLOCKERS ||
opponent()->isAI() ||
options[GameOptions::phaseInterrupts[currentGamePhase]].number)
mLayers->stackLayer()->AddNextGamePhase();
else
nextGamePhase();
if (BLOCKERS == combatStep) { nextCombatStep(); return; }
nextGamePhase();
}
int GameObserver::forceShuffleLibraries(){
@@ -356,11 +352,10 @@ void GameObserver::cardClick (MTGCardInstance * card, Targetable * object){
}else{
result = targetChooser->toggleTarget(clickedPlayer);
}
if (result == TARGET_OK_FULL){
if (result == TARGET_OK_FULL)
card = cardWaitingForTargets;
}else{
else
return;
}
}
if (waitForExtraPayment){
@@ -374,6 +369,12 @@ void GameObserver::cardClick (MTGCardInstance * card, Targetable * object){
return;
}
if (ORDER == combatStep)
{
card->defenser->raiseBlockerRankOrder(card);
return;
}
if (card){
reaction = mLayers->actionLayer()->isReactingToClick(card);
if (reaction == -1) mLayers->actionLayer()->reactToClick(card);
@@ -468,4 +469,3 @@ int GameObserver::targetListIsSet(MTGCardInstance * card){
}
return (targetChooser->targetListSet());
}