/** * 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; }
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); }