예제 #1
0
 /**
  * Renvoie le Qg lié
  * @return Qg
  */
 public function getQg()
 {
     return QgStore::getById(UniteStore::getById($this->getIdUnite())->getIdQg());
 }
예제 #2
0
 /**
  * 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);
 }
예제 #3
0
 /**
  * Renvoie le Hexa lié
  * @return Hexa
  */
 public function getHexa()
 {
     return HexaStore::getById(QgStore::getById($this->getIdQg())->getIdHexa());
 }
예제 #4
0
파일: Jeu.php 프로젝트: eleparquier/nj
 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);
 }
예제 #5
0
 /**
  * Renvoie la case cible du pilonnage
  * @return Qg
  */
 public function getCible()
 {
     return QgStore::getById($this->getQg()->getIdCibleMission());
 }
예제 #6
0
 /**
  * Renvoie le Joueur lié
  * @return Joueur
  */
 public function getJoueur()
 {
     return JoueurStore::getById(QgStore::getById($this->getIdQg())->getIdJoueur());
 }
예제 #7
0
 /**
  * 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()));
     }
 }
예제 #8
0
 /**
  * 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());
 }