/** * @param Qg $qg */ public static function reindexQg(Qg $qg) { /** @var Hexa $oldPosition */ if (isset(self::$indexParQg[$qg->getId()])) { $oldPosition = self::$indexParQg[$qg->getId()]; } else { $oldPosition = null; } if (!is_null($oldPosition) && isset(self::$indexParHexa[$oldPosition->getId()][$qg->getId()])) { unset(self::$indexParHexa[$oldPosition->getId()][$qg->getId()]); } if (!$qg->isEfface()) { self::$indexParQg[$qg->getId()] = $qg->getPosition(); if (!isset(self::$indexParHexa[$qg->getPosition()->getId()])) { self::$indexParHexa[$qg->getPosition()->getId()] = new QgCollection(); } if (!isset(self::$indexParHexa[$qg->getPosition()->getId()][$qg->getId()])) { self::$indexParHexa[$qg->getPosition()->getId()][$qg->getId()] = $qg; } } /* * Zones d'interception */ if (in_array($qg->getIdTypeMission(), Missions::missionsInterception())) { foreach ($qg->getPosition()->getCouronnePleine(Missions::$types[Missions::INTERCEPTION]['tailleZone']) as $hexa) { if (!isset(self::$indexIntercepteurs[$hexa->getId()])) { self::$indexIntercepteurs[$hexa->getId()] = new QgCollection(); } self::$indexIntercepteurs[$hexa->getId()]->ajout($qg); } } }
/** * Détermine si la collision doit donner lieu à un combat * @return bool */ public function isCombat() { if (!$this->qg1->getJoueur()->isEnnemi($this->qg2->getJoueur())) { return false; } if ($this->qg1->getIdTypeMission() == Missions::INTERCEPTION || $this->qg2->getIdTypeMission() == Missions::INTERCEPTION) { return true; } if ($this->qg1->getIdTypeQg() == $this->qg2->getIdTypeQg()) { return true; } if (($this->qg1->getIdTypeQg() == Unites::TYPE_TERRESTRE && $this->qg2->getIdTypeQg() == Unites::TYPE_AERIEN || $this->qg2->getIdTypeQg() == Unites::TYPE_TERRESTRE && $this->qg1->getIdTypeQg() == Unites::TYPE_AERIEN) && ($this->qg1->getUnites()->typeExists(Unites::DCA) || $this->qg2->getUnites()->typeExists(Unites::DCA))) { return true; } if (($this->qg1->getIdTypeQg() == Unites::TYPE_NAVAL && $this->qg2->getIdTypeQg() == Unites::TYPE_AERIEN || $this->qg2->getIdTypeQg() == Unites::TYPE_NAVAL && $this->qg1->getIdTypeQg() == Unites::TYPE_AERIEN) && ($this->qg1->getUnites()->typeExists(Unites::DESTROYER) || $this->qg1->getUnites()->typeExists(Unites::PORTE_AVIONS) || $this->qg1->getUnites()->typeExists(Unites::CUIRASSE) || $this->qg2->getUnites()->typeExists(Unites::DESTROYER) || $this->qg2->getUnites()->typeExists(Unites::PORTE_AVIONS) || $this->qg2->getUnites()->typeExists(Unites::CUIRASSE))) { return true; } return false; }
/** * Dit qui donne sa mission au qgVirtuel en cas de combat * @param Qg $qg1 * @param Qg $qg2 * @return int -1 : $qg1, 1 : $qg2 */ public static function typeMissionVirtuelle(Qg $qg1, Qg $qg2) { if ($qg1->getMission()->getQgVirtuel()->isAttaquant()) { if (Missions::$ordreMissionsAttaquant[$qg1->getIdTypeMission()] > Missions::$ordreMissionsAttaquant[$qg2->getIdTypeMission()]) { return -1; } elseif (Missions::$ordreMissionsAttaquant[$qg1->getIdTypeMission()] < Missions::$ordreMissionsAttaquant[$qg2->getIdTypeMission()]) { return 1; } else { return 0; } } else { if (Missions::$ordreMissionsDefenseur[$qg1->getIdTypeMission()] > Missions::$ordreMissionsDefenseur[$qg2->getIdTypeMission()]) { return -1; } elseif (Missions::$ordreMissionsDefenseur[$qg1->getIdTypeMission()] < Missions::$ordreMissionsDefenseur[$qg2->getIdTypeMission()]) { return 1; } else { return 0; } } }
/** * @param Qg $qg * @return Mission */ public static function factory(Qg $qg) { switch ($qg->getIdTypeMission()) { case Missions::APPUI_SOL: return new AppuiSol($qg); break; case Missions::ASSAUT: return new Assaut($qg); break; case Missions::ASSAUT_AERONAVAL: return new AssautAeronaval($qg); break; case Missions::ASSAUT_NAVAL: return new AssautNaval($qg); break; case Missions::ASW: return new Asw($qg); break; case Missions::BLITZ: return new Blitz($qg); break; case Missions::BLOCUS: return new Blocus($qg); break; case Missions::BOMBARDEMENT: return new Bombardement($qg); break; case Missions::DEPLACEMENT: return new Deplacement($qg); break; case Missions::ESCORTE: return new Escorte($qg); break; case Missions::INTERCEPTION: return new Interception($qg); break; case Missions::INTERDICTION: return new Interdiction($qg); break; case Missions::PILONNAGE: return new Pilonnage($qg); break; case Missions::REPOS: return new Repos($qg); break; case Missions::RETRANCHEMENT: return new Retranchement($qg); break; case Missions::TORPILLAGE: return new Torpillage($qg); break; default: return new Repos($qg); } }