/** * Résoud les déplacements des Qgs et les combats * @return void */ public function resolve() { Log::getInstance()->debug(array('msg' => 'qgsAvantDeplacement', 'qgs' => $this->qgs->debug())); $intercepteurs = new QgCollection(); foreach ($this->qgs as $qg) { $qg->getMission()->beforeDeplacements(); } foreach ($this->qgs->getByMission() as $idTypeMission => $qgs) { if (in_array($idTypeMission, Missions::missionsInterception())) { $intercepteurs = $qgs; } if (!in_array($idTypeMission, Missions::missionsDeplacement())) { continue; } $maxVitesse = $qgs->maxVitesse(true); for ($pas = 1; $pas <= $maxVitesse; $pas++) { Log::getInstance()->debug(array('msg' => 'pas', 'idTypeMission' => $idTypeMission, 'pas' => $pas)); /* * Pas et interceptions */ foreach ($qgs as $qg) { /** @var Qg $qg */ $qg->getMission()->pas($maxVitesse); /* * Zones d'interception */ if ($qg->getMission()->isInterceptable() && IndexPositions::getIntercepteursOnSamePosition($qg)->count()) { foreach (IndexPositions::getIntercepteursOnSamePosition($qg) as $intercepteur) { if ($qg->getJoueur()->isEnnemi($intercepteur->getJoueur())) { /** @var Interception $mission */ $mission = $intercepteur->getMission(); $mission->getCiblesPotentielles()->ajout($qg); } } } } /* * Interceptions (combat) */ $interceptions = new CombatCollection(); foreach ($intercepteurs as $intercepteur) { /** @var Qg $intercepteur */ $mission = $intercepteur->getMission(); /** @var Interception $mission */ $combat = $mission->createCombat(); if (!is_null($combat)) { $interceptions->ajout($combat); } } $interceptions->run(); /* * Combats */ $this->combatsAFaire()->run(); } /* * Stacks à gérer en fin de déplacements */ $recul = true; while ($recul) { $recul = false; foreach (IndexPositions::getStacks() as $stack) { foreach ($stack->qgsQuiDoiventBouger() as $qg) { /** @var Qg $qg */ $qg->getMission()->recul(); } $recul = true; } IndexPositions::reset(); foreach ($this->qgs as $qg) { IndexPositions::reindexQg($qg); } $this->combatsAFaire()->run(); } } foreach ($this->qgs as $qg) { $qg->getMission()->afterDeplacements(); } Log::getInstance()->debug(array('msg' => 'qgsApresDeplacement', 'qgs' => $this->qgs->debug())); }