예제 #1
0
 /**
  * Fait faire un pas au qg
  * @param $maxVitesse
  */
 public function pas($maxVitesse)
 {
     if ($this->modeTrajectoire) {
         $this->mvtDepensePartiel += $this->getQg()->getMvtTotal() / $maxVitesse;
         $coutProchaineCase = $this->getQg()->getCoutDeplacement($this->getPosition(), $this->nextTraj->getHexa());
         if ($this->mvtDepensePartiel >= $coutProchaineCase || $this->mvtDepenseTotal < $this->getQg()->getMvtTotal() && $this->mvtDepenseTotal + $coutProchaineCase >= $maxVitesse) {
             // Avancement d'une case
             $this->historiquePositions->ajout($this->nextTraj->getHexa());
             $nextTraj = $this->getQg()->getTrajs()->getByOrdre($this->nextTraj->getOrdre() + 1);
             if (!is_null($nextTraj)) {
                 $this->nextTraj = $nextTraj;
             } else {
                 $this->modeTrajectoire = false;
             }
             $this->incrMvtDepensePartiel(-1 * $coutProchaineCase);
             $this->incrMvtDepenseTotal($coutProchaineCase);
             IndexPositions::reindexQg($this->getQg());
             $this->auMoinsUnDeplacementFait = true;
         }
     }
 }
예제 #2
0
 /**
  * Crée un Traj lié à ce Qg
  * @return Traj
  */
 public function createTraj()
 {
     $traj = new Traj();
     $traj->setIdQg($this->getIdQg());
     return $traj;
 }
예제 #3
0
파일: Jeu.php 프로젝트: eleparquier/nj
 public function addTrajectoire()
 {
     $ret = array('error' => 0, 'errorMsg' => '');
     if (!isset($_POST['idQg']) || !isset($_POST['cap'])) {
         $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;
     }
     $qg = QgStore::getById($_POST['idQg']);
     if (is_null($qg)) {
         $ret['error'] = 3;
         $ret['errorMsg'] = 'Qg Inconnu';
         echo json_encode($ret);
         exit;
     }
     if (SessionBusiness::getCookieSession()->getIdJoueur() != $qg->getIdJoueur()) {
         $ret['error'] = 5;
         $ret['errorMsg'] = 'Seul le joueur connecté peut donner des ordres à ses Qgs';
         echo json_encode($ret);
         exit;
     }
     if ($qg->unitesEntrantes()->count()) {
         $ret['error'] = 8;
         $ret['errorMsg'] = 'Une ou plusieurs unités sont en cours de transfert vers ce Qg, il ne peut pas se déplacer';
         echo json_encode($ret);
         exit;
     }
     $trajPrecedente = $qg->getLastTraj();
     if (is_null($trajPrecedente)) {
         $hexa = $qg->getHexa()->getVoisin($_POST['cap']);
         $provenance = $qg->getHexa();
         $ordre = 1;
     } else {
         $hexa = $trajPrecedente->getHexa()->getVoisin($_POST['cap']);
         $provenance = $trajPrecedente->getHexa();
         $ordre = $trajPrecedente->getOrdre() + 1;
     }
     if (is_null($hexa)) {
         $ret['error'] = 4;
         $ret['errorMsg'] = 'Hexa Inconnu ou bord de carte atteint';
         echo json_encode($ret);
         exit;
     }
     if (!$qg->canPass($provenance, $hexa)) {
         $ret['error'] = 6;
         $ret['errorMsg'] = "Impossible d'atteindre cette case avec ce Qg";
         echo json_encode($ret);
         exit;
     }
     if ($qg->getMvtRestant() <= 0) {
         $ret['error'] = 7;
         $ret['errorMsg'] = "Points de mouvement insuffisants";
         echo json_encode($ret);
         exit;
     }
     $traj = new Traj();
     $traj->setIdQg($qg->getId());
     $traj->setIdHexa($hexa->getId());
     $traj->setOrdre($ordre);
     $traj->save();
     $qg->resetCacheTrajs();
     $ret['traj'] = $traj;
     $ret['mvtTotal'] = $qg->getMvtTotal();
     $ret['mvtRestant'] = $qg->getMvtRestant();
     echo json_encode($ret);
 }