コード例 #1
0
 /**
  * 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()));
 }