/** * Inscrit un joueur à la partie * @param Joueur $joueur * @return bool Succès de l'inscription. false si pas possible */ public function inscrireJoueur(Joueur $joueur) { $ret = false; $caseDepart = null; foreach ($this->getHexas()->shuffle() as $hexa) { /** @var Hexa $hexa */ if (Terrains::hexaAutoriseDemarrage($hexa)) { foreach ($hexa->voisins() as $voisin) { /** @var Hexa $voisin */ if ($voisin->getIdTerritoire() != 0 || $voisin->getIdJoueur() != 0) { continue 2; } } // Données de la case capitale et de ses voisines $hexa->setIdJoueur($joueur->getId()); $hexa->setIdTerritoire($joueur->getId()); foreach ($hexa->voisins() as $voisin) { /** @var Hexa $voisin */ $voisin->setIdTerritoire($joueur->getId()); $voisin->save(); } $hexa->setNom($joueur->getNom() . ' Prime'); $hexa->setPopulation(1); $hexa->save(); // Données du joueur $joueur->setIdPartie($this->getId()); $joueur->setTresor(1000); $joueur->setIdCapitale($hexa->getId()); $joueur->save(); $ret = true; break; } } return $ret; }
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); }
/** * 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; }
/** * Renvoie le type de terrain de la case * @return int */ public function getTypeTerrain() { return Terrains::getType($this); }