Exemplo n.º 1
0
 /**
  * Dit si le Qg peut passer entre les 2 hexas
  * @param Hexa $hexa1 Hexa de départ
  * @param Hexa $hexa2 Hexa de destination
  * @param bool $zdcBloquante Dit si les ZDC et blocus sont bloquants
  * @return bool
  */
 public function canPass(Hexa $hexa1, Hexa $hexa2, $zdcBloquante = false)
 {
     foreach ($this->getUnites() as $unite) {
         /** @var Unite $unite */
         if ($unite->getIdQgTransfert()) {
             continue;
         }
         if (!Terrains::depAutorise($unite, $hexa2)) {
             return false;
         }
     }
     $traversee = Terrains::typeTraversee($hexa1, $hexa2);
     foreach ($this->getUnites() as $unite) {
         /** @var Unite $unite */
         if ($unite->getIdQgTransfert()) {
             continue;
         }
         if (!Terrains::travAutorisee($unite, $traversee)) {
             return false;
         }
     }
     if ($zdcBloquante && $this->inZdc($hexa2)) {
         return false;
     }
     return true;
 }
Exemplo n.º 2
0
 public function transfertUnite()
 {
     $ret = array('error' => 0, 'errorMsg' => '');
     if (!isset($_POST['idUnite']) || !isset($_POST['idQgDest'])) {
         $ret['error'] = 1;
         $ret['errorMsg'] = 'Champs manquants';
         echo json_encode($ret);
         exit;
     }
     if (!$this->checkDroit(Droit::LOGGE_PARTIE)) {
         $ret['error'] = 2;
         $ret['errorMsg'] = 'Pas le droit';
         echo json_encode($ret);
         exit;
     }
     $unite = UniteStore::getById($_POST['idUnite']);
     if (is_null($unite)) {
         $ret['error'] = 3;
         $ret['errorMsg'] = 'Unité inexistante';
         echo json_encode($ret);
         exit;
     }
     $ret['idUnite'] = $unite->getId();
     $qgDest = QgStore::getById($_POST['idQgDest']);
     if (is_null($qgDest)) {
         $ret['error'] = 4;
         $ret['errorMsg'] = 'QG Destination inexistant';
         echo json_encode($ret);
         exit;
     }
     if ($unite->getQg()->getIdJoueur() != SessionBusiness::getCookieSession()->getIdJoueur() || $qgDest->getIdJoueur() != SessionBusiness::getCookieSession()->getIdJoueur()) {
         $ret['error'] = 5;
         $ret['errorMsg'] = 'Transferts autorisés seulement sur les Qgs du joueur';
         echo json_encode($ret);
         exit;
     }
     if (is_null($unite->getQg()->getHexa()->quelVoisin($qgDest->getHexa()))) {
         $ret['error'] = 6;
         $ret['errorMsg'] = 'Transferts autorisés seulement entre des cases voisines';
         echo json_encode($ret);
         exit;
     }
     if (!Terrains::travAutorisee($unite, Terrains::typeTraversee($unite->getQg()->getHexa(), $qgDest->getHexa()))) {
         $ret['error'] = 7;
         $ret['errorMsg'] = 'Traversée non autorisée pour cette unité';
         echo json_encode($ret);
         exit;
     }
     if ($qgDest->getUnites()->count() >= $qgDest->getNbMaxUnites()) {
         $ret['error'] = 8;
         $ret['errorMsg'] = 'Le Qg de destination est déjà à son maximum d\'unités';
         echo json_encode($ret);
         exit;
     }
     if ($qgDest->getIdTypeQg() != $unite->getQg()->getIdTypeQg()) {
         $ret['error'] = 9;
         $ret['errorMsg'] = 'Le Qg de destination doit être du même type que le Qg de l\'unité (terrestre, naval, aérien)';
         echo json_encode($ret);
         exit;
     }
     /*
      * Mise en transfert de l'unité
      */
     $qgSource = $unite->getQg();
     $unite->setIdQgTransfert($qgDest->getId());
     $unite->save();
     /*
      * Annulation des missions des Qgs concernés
      */
     $ret['resetTraj'] = false;
     $ret['idQgDest'] = $qgDest->getId();
     $ret['idQgSource'] = $qgSource->getId();
     foreach (array($qgSource, $qgDest) as $qg) {
         /** @var Qg $qg */
         if ($qg->isMissionMouvement()) {
             $qg->deleteTraj();
             $qg->setIdTypeMission(Missions::REPOS);
             $qg->save();
             $ret['resetTraj'] = true;
         }
     }
     echo json_encode($ret);
 }