/** * Renvoie le Qg lié * @return Qg */ public function getQg() { return QgStore::getById(UniteStore::getById($this->getIdUnite())->getIdQg()); }
/** * Dissout le Qg et remet la pop correspondante dans la ville de l'ennemi la plus proche * @param Joueur $ennemi */ public function reddition(Joueur $ennemi) { $pop = $this->getUnites()->getPrixPop(); if (!is_null($this->villeEnnemieLaPlusProche($ennemi))) { $this->villeEnnemieLaPlusProche($ennemi)->incrPopulation($pop); } else { return; } foreach ($this->getUnites() as $unite) { $unite->delete(); } $this->resetCacheUnites(); QgStore::unstore($this); $this->setEfface(true); }
/** * Renvoie le Hexa lié * @return Hexa */ public function getHexa() { return HexaStore::getById(QgStore::getById($this->getIdQg())->getIdHexa()); }
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); }
/** * Renvoie la case cible du pilonnage * @return Qg */ public function getCible() { return QgStore::getById($this->getQg()->getIdCibleMission()); }
/** * Renvoie le Joueur lié * @return Joueur */ public function getJoueur() { return JoueurStore::getById(QgStore::getById($this->getIdQg())->getIdJoueur()); }
/** * Met les Qgs de la collection dans le QgStore * Vérifie si le Qg était déjà storé, dans ce cas, remplace le Qg concerné par celui du QgStore */ public function store() { $replaces = array(); foreach ($this as $offset => $qg) { /** @var Qg $qg */ if (QgStore::exists($qg->getId())) { $replaces[$offset] = $qg; } else { QgStore::store($qg); } } unset($offset); foreach ($replaces as $offset => $qg) { $this->offsetSet($offset, QgStore::getById($qg->getId())); } }
/** * Avant tous les déplacements * @return void */ public function beforeDeplacements() { if ($this->getQg()->getMission()->isSoutienQg()) { QgStore::getById($this->getQg()->getIdCibleMission())->getSoutiens()->ajout($this->getQg()); } if ($this->getQg()->isRavitaille()) { $this->getQg()->incrCapop($this->getRule('gainCapOpAvant')); } IndexPositions::reindexQg($this->getQg()); }