/** * 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; } } }
/** * Crée un Traj lié à ce Qg * @return Traj */ public function createTraj() { $traj = new Traj(); $traj->setIdQg($this->getIdQg()); return $traj; }
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); }