diff --git a/config/routes/athena.yaml b/config/routes/athena.yaml index 3cd681632..d69142735 100644 --- a/config/routes/athena.yaml +++ b/config/routes/athena.yaml @@ -19,7 +19,15 @@ base_overview: generator: path: /generator - controller: App\Modules\Athena\Infrastructure\Controller\Base\Building\RefineryController + controller: App\Modules\Athena\Infrastructure\Controller\Base\Building\ViewGenerator + +build: + path: /buildings/{identifier}/build + controller: App\Modules\Athena\Infrastructure\Controller\Base\Building\Build + +cancel_building_queue: + path: /building-queues/{identifier}/cancel + controller: App\Modules\Athena\Infrastructure\Controller\Base\Building\Cancel refinery: path: /refinery diff --git a/src/Modules/Athena/Infrastructure/Controller/Base/Building/Build.php b/src/Modules/Athena/Infrastructure/Controller/Base/Building/Build.php new file mode 100644 index 000000000..02b2671a5 --- /dev/null +++ b/src/Modules/Athena/Infrastructure/Controller/Base/Building/Build.php @@ -0,0 +1,167 @@ +isABuilding($identifier)) { + $buildingQueues = $buildingQueueManager->getBaseQueues($currentBase->getId()); + + $currentLevel = call_user_func(array($currentBase, 'getReal' . ucfirst($orbitalBaseHelper->getBuildingInfo($identifier, 'name')) . 'Level')); + $technos = $technologyManager->getPlayerTechnology($currentPlayer->getId()); + dump( + $identifier, + $orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'resource', $currentBase->getResourcesStorage()), + $orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $currentBase->getLevelGenerator(), 'queue', count($buildingQueues)), + $orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'buildingTree', $currentBase), + $orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'techno', $technos) + ); + + if ($orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'resource', $currentBase->getResourcesStorage()) + AND $orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $currentBase->getLevelGenerator(), 'queue', count($buildingQueues)) + AND ($orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'buildingTree', $currentBase) === TRUE) + AND $orbitalBaseHelper->haveRights($identifier, $currentLevel + 1, 'techno', $technos)) { + + # tutorial + if ($currentPlayer->stepDone == FALSE) { + switch ($currentPlayer->getStepTutorial()) { + case TutorialResource::GENERATOR_LEVEL_2: + if ($identifier == OrbitalBaseResource::GENERATOR AND $currentLevel + 1 >= 2) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::REFINERY_LEVEL_3: + if ($identifier == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 3) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::STORAGE_LEVEL_3: + if ($identifier == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 3) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::DOCK1_LEVEL_1: + if ($identifier == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 1) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::TECHNOSPHERE_LEVEL_1: + if ($identifier == OrbitalBaseResource::TECHNOSPHERE AND $currentLevel + 1 >= 1) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::REFINERY_LEVEL_10: + if ($identifier == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 10) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::STORAGE_LEVEL_8: + if ($identifier == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 8) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::DOCK1_LEVEL_6: + if ($identifier == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 6) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::REFINERY_LEVEL_16: + if ($identifier == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 16) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::STORAGE_LEVEL_12: + if ($identifier == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 12) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::TECHNOSPHERE_LEVEL_6: + if ($identifier == OrbitalBaseResource::TECHNOSPHERE AND $currentLevel + 1 >= 6) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::DOCK1_LEVEL_15: + if ($identifier == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 15) { + $tutorialHelper->setStepDone(); + } + break; + case TutorialResource::REFINERY_LEVEL_20: + if ($identifier == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 20) { + $tutorialHelper->setStepDone(); + } + break; + } + } + + $session = $request->getSession(); + + # build the new building + $bq = new BuildingQueue(); + $bq->rOrbitalBase = $currentBase->getId(); + $bq->buildingNumber = $identifier; + $bq->targetLevel = $currentLevel + 1; + $time = $orbitalBaseHelper->getBuildingInfo($identifier, 'level', $currentLevel + 1, 'time'); + $bonus = $time * $session->get('playerBonus')->get(PlayerBonus::GENERATOR_SPEED) / 100; + $nbBuildingQueues = count($buildingQueues); + if ($nbBuildingQueues === 0) { + $bq->dStart = Utils::now(); + } else { + $bq->dStart = $buildingQueues[$nbBuildingQueues - 1]->dEnd; + } + $bq->dEnd = Utils::addSecondsToDate($bq->dStart, round($time - $bonus)); + $buildingQueueManager->add($bq); + + # debit resources + $orbitalBaseManager->decreaseResources($currentBase, $orbitalBaseHelper->getBuildingInfo($identifier, 'level', $currentLevel + 1, 'resourcePrice')); + +// if ($container->getParameter('data_analysis')) { +// $qr = $database->prepare('INSERT INTO +// DA_BaseAction(`from`, type, opt1, opt2, weight, dAction) +// VALUES(?, ?, ?, ?, ?, ?)' +// ); +// $qr->execute([$session->get('playerId'), 1, $building, $currentLevel + 1, DataAnalysis::resourceToStdUnit($orbitalBaseHelper->getBuildingInfo($building, 'level', $currentLevel + 1, 'resourcePrice')), Utils::now()]); +// } + + # add the event in controller + $session->get('playerEvent')->add($bq->dEnd, $this->getParameter('event_base'), $currentBase->getId()); + + $this->addFlash('success', 'Construction programmée'); + + return $this->redirect($request->headers->get('referer')); + } else { + throw new ConflictHttpException('les conditions ne sont pas remplies pour construire ce bâtiment'); + } + } else { + throw new BadRequestHttpException('le bâtiment indiqué n\'est pas valide'); + } + } +} diff --git a/src/Modules/Athena/Infrastructure/Controller/Base/Building/Cancel.php b/src/Modules/Athena/Infrastructure/Controller/Base/Building/Cancel.php new file mode 100644 index 000000000..98cd016e3 --- /dev/null +++ b/src/Modules/Athena/Infrastructure/Controller/Base/Building/Cancel.php @@ -0,0 +1,86 @@ +isABuilding($identifier)) { + $buildingQueues = $buildingQueueManager->getBaseQueues($currentBase->getId()); + + $index = NULL; + $nbBuildingQueues = count($buildingQueues); + for ($i = 0; $i < $nbBuildingQueues; $i++) { + $queue = $buildingQueues[$i]; + # get the last element from the correct building + if ($queue->buildingNumber == $identifier) { + $index = $i; + $targetLevel = $queue->targetLevel; + $dStart = $queue->dStart; + } + } + + # if it's the first, the next must restart by now + if ($index == 0) { + $dStart = Utils::now(); + } + + if ($index !== NULL) { + # shift + for ($i = $index + 1; $i < $nbBuildingQueues; $i++) { + $queue = $buildingQueues[$i]; + + $oldDate = $queue->dEnd; + $queue->dEnd = Utils::addSecondsToDate($dStart, Utils::interval($queue->dStart, $queue->dEnd, 's')); + $queue->dStart = $dStart; + + // @TODO handle rescheduling + // $scheduler->reschedule($queue, $queue->dEnd, $oldDate); + + $dStart = $queue->dEnd; + } + + // @TODO handle cancellation + // $scheduler->cancel($buildingQueues[$index], $buildingQueues[$index]->dEnd); + $entityManager->remove($buildingQueues[$index]); + $entityManager->flush(BuildingQueue::class); + + $buildingResourceRefund = $this->getParameter('athena.building.building_queue_resource_refund'); + // give the resources back + $resourcePrice = $orbitalBaseHelper->getBuildingInfo($identifier, 'level', $targetLevel, 'resourcePrice'); + $resourcePrice *= $buildingResourceRefund; + $orbitalBaseManager->increaseResources($currentBase, $resourcePrice, TRUE); + $this->addFlash('success', 'Construction annulée, vous récupérez le ' . $buildingResourceRefund * 100 . '% du montant investi pour la construction'); + + return $this->redirect($request->headers->get('referer')); + } else { + throw new ConflictHttpException('suppression de bâtiment impossible'); + } + } else { + throw new BadRequestHttpException('le bâtiment indiqué n\'est pas valide'); + } + } +} diff --git a/src/Modules/Athena/Infrastructure/Controller/Base/Building/GeneratorController.php b/src/Modules/Athena/Infrastructure/Controller/Base/Building/GeneratorController.php deleted file mode 100644 index 012e17241..000000000 --- a/src/Modules/Athena/Infrastructure/Controller/Base/Building/GeneratorController.php +++ /dev/null @@ -1,149 +0,0 @@ -getSession(); - - $q = ''; - $b = array('', '', '', '', '', '', '', '', '', ''); - $realSizeQueue = 0; - - for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { - $name = ucfirst($orbitalBaseHelper->getBuildingInfo($i, 'name')); - $aLevel[$i] = intval(call_user_func(array($ob_generator, 'getLevel' . $name))); - $rLevel[$i] = intval(call_user_func(array($ob_generator, 'getReal' . $name . 'Level'))); - } - - $q .= '
'; - $nextTime = 0; - $nextTotalTime = 0; - - for ($i = 0; $i < $orbitalBaseHelper->getBuildingInfo(OrbitalBaseResource::GENERATOR, 'level', $ob_generator->levelGenerator, 'nbQueues'); $i++) { - if (isset($ob_generator->buildingQueues[$i])) { - $qe = $ob_generator->buildingQueues[$i]; - - $realSizeQueue++; - $nextTime = Utils::interval(Utils::now(), $qe->dEnd, 's'); - $nextTotalTime += $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'level', $qe->targetLevel, 'time'); - - $q .= '
'; - $q .= '×'; - $q .= ''; - $q .= ''; - $q .= $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'frenchName'); - $q .= ' niv. ' . $qe->targetLevel . ''; - $q .= ''; - if ($realSizeQueue > 1) { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ''; - $q .= ''; - } else { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ''; - - $q .= ''; - $q .= ''; - $q .=''; - $q .= ''; - } - $q .= '
'; - } else { - $q .= '
'; - $q .= ''; - $q .= 'Emplacement libre'; - $q .= ''; - $q .= '
'; - } - } - $q .= '
'; - - -# building - $technology = $technologyManager->getPlayerTechnology($session->get('playerId')); - for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { - $level = $aLevel[$i]; - $nextLevel = $rLevel[$i] + 1; - - $b[$i] .= ($rLevel[$i]) ? '
' : '
'; - $b[$i] .= '
'; - $b[$i] .= ''; - $b[$i] .= '' . $orbitalBaseHelper->getBuildingInfo($i, 'frenchName') . ''; - if ($level != 0) { - $b[$i] .= '' . $level . ''; - } - $b[$i] .= '+'; - $b[$i] .= '
'; - - $price = Format::numberFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice'), -1) . ' ressources'; - $time = Chronos::secondToFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'time'), 'lite') . ' relèves'; - - if (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'buildingTree', $ob_generator)) !== TRUE) { - if ($answer == 'niveau maximum atteint') { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= 'niveau maximum atteint'; - $b[$i] .= '
'; - $b[$i] .= '
'; - } else { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } - } elseif (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'techno', $technology)) !== TRUE) { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } elseif (!$orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $aLevel[OrbitalBaseResource::GENERATOR], 'queue', $realSizeQueue)) { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } elseif (!$orbitalBaseHelper->haveRights($i, $nextLevel, 'resource', $ob_generator->getResourcesStorage())) { - $missingResource = $orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice') - $ob_generator->getResourcesStorage(); - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } else { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'augmenter vers le niveau ' . $nextLevel . '
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } - $b[$i] .= '
'; - } - return $this->render('pages/athena/generator.html.twig', [ - 'buildings' => $b, - ]); - } -} diff --git a/src/Modules/Athena/Infrastructure/Controller/Base/Building/ViewGenerator.php b/src/Modules/Athena/Infrastructure/Controller/Base/Building/ViewGenerator.php new file mode 100644 index 000000000..7b5d30db0 --- /dev/null +++ b/src/Modules/Athena/Infrastructure/Controller/Base/Building/ViewGenerator.php @@ -0,0 +1,68 @@ +getSession(); + $technology = $technologyManager->getPlayerTechnology($currentPlayer->getId()); + + return $this->render('pages/athena/generator.html.twig', [ + 'technology' => $technology, + 'generator_speed_bonus' => $session->get('playerBonus')->get(PlayerBonus::GENERATOR_SPEED), + 'building_resource_refund' => $this->getParameter('athena.building.building_queue_resource_refund'), + 'buildings_data' => $this->getBuildingsData($orbitalBaseHelper, $currentBase, $technology) + ]); + } + + private function getBuildingsData( + OrbitalBaseHelper $orbitalBaseHelper, + OrbitalBase $currentBase, + Technology $technology, + ): array { + $data = []; + foreach (OrbitalBaseResource::$building as $buildingNumber => $buildingData) { + $level = $currentBase->{'getLevel' . $buildingData['name']}(); + $realLevel = $currentBase->{'getReal' . $buildingData['name'] . 'Level'}(); + $nextLevel = $realLevel + 1; + + $data[$buildingNumber] = [ + 'real_level' => $realLevel, + 'next_level' => $nextLevel, + 'level' => $level, + 'building_requirements' => $orbitalBaseHelper->haveRights($buildingNumber, $nextLevel, 'buildingTree', $currentBase), + 'technology_requirements' => $orbitalBaseHelper->haveRights($buildingNumber, $nextLevel, 'techno', $technology), + 'queue_requirements' => $orbitalBaseHelper->haveRights( + OrbitalBaseResource::GENERATOR, + $currentBase->getLevelGenerator(), + 'queue', + count($currentBase->buildingQueues, + )), + 'resources_requirements' => $orbitalBaseHelper->haveRights($buildingNumber, $nextLevel, 'resource', $currentBase->getResourcesStorage()), + ]; + } + + return $data; + } +} diff --git a/src/action/std/athena/building/build.php b/src/action/std/athena/building/build.php deleted file mode 100755 index 9f2492374..000000000 --- a/src/action/std/athena/building/build.php +++ /dev/null @@ -1,160 +0,0 @@ -getContainer(); -$session = $this->getContainer()->get(\App\Classes\Library\Session\SessionWrapper::class); -$database = $this->getContainer()->get(\App\Classes\Database\Database::class); -$orbitalBaseManager = $this->getContainer()->get(\App\Modules\Athena\Manager\OrbitalBaseManager::class); -$buildingQueueManager = $this->getContainer()->get(\App\Modules\Athena\Manager\BuildingQueueManager::class); -$orbitalBaseHelper = $this->getContainer()->get(\App\Modules\Athena\Helper\OrbitalBaseHelper::class); -$technologyManager = $this->getContainer()->get(\App\Modules\Promethee\Manager\TechnologyManager::class); -$tutorialHelper = $this->getContainer()->get(\App\Modules\Zeus\Helper\TutorialHelper::class); -$request = $this->getContainer()->get('app.request'); - -for ($i=0; $i < $session->get('playerBase')->get('ob')->size(); $i++) { - $verif[] = $session->get('playerBase')->get('ob')->get($i)->get('id'); -} - -$baseId = $request->query->get('baseid'); -$building = $request->query->get('building'); - -if ($baseId !== FALSE AND $building !== FALSE AND in_array($baseId, $verif)) { - if ($orbitalBaseHelper->isABuilding($building)) { - if (($ob = $orbitalBaseManager->getPlayerBase($baseId, $session->get('playerId'))) !== null) { - $buildingQueues = $buildingQueueManager->getBaseQueues($baseId); - - $currentLevel = call_user_func(array($ob, 'getReal' . ucfirst($orbitalBaseHelper->getBuildingInfo($building, 'name')) . 'Level')); - $technos = $technologyManager->getPlayerTechnology($session->get('playerId')); - if ($orbitalBaseHelper->haveRights($building, $currentLevel + 1, 'resource', $ob->getResourcesStorage()) - AND $orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $ob->getLevelGenerator(), 'queue', count($buildingQueues)) - AND ($orbitalBaseHelper->haveRights($building, $currentLevel + 1, 'buildingTree', $ob) === TRUE) - AND $orbitalBaseHelper->haveRights($building, $currentLevel + 1, 'techno', $technos)) { - - # tutorial - if ($session->get('playerInfo')->get('stepDone') == FALSE) { - switch ($session->get('playerInfo')->get('stepTutorial')) { - case TutorialResource::GENERATOR_LEVEL_2: - if ($building == OrbitalBaseResource::GENERATOR AND $currentLevel + 1 >= 2) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::REFINERY_LEVEL_3: - if ($building == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 3) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::STORAGE_LEVEL_3: - if ($building == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 3) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::DOCK1_LEVEL_1: - if ($building == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 1) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::TECHNOSPHERE_LEVEL_1: - if ($building == OrbitalBaseResource::TECHNOSPHERE AND $currentLevel + 1 >= 1) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::REFINERY_LEVEL_10: - if ($building == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 10) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::STORAGE_LEVEL_8: - if ($building == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 8) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::DOCK1_LEVEL_6: - if ($building == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 6) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::REFINERY_LEVEL_16: - if ($building == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 16) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::STORAGE_LEVEL_12: - if ($building == OrbitalBaseResource::STORAGE AND $currentLevel + 1 >= 12) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::TECHNOSPHERE_LEVEL_6: - if ($building == OrbitalBaseResource::TECHNOSPHERE AND $currentLevel + 1 >= 6) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::DOCK1_LEVEL_15: - if ($building == OrbitalBaseResource::DOCK1 AND $currentLevel + 1 >= 15) { - $tutorialHelper->setStepDone(); - } - break; - case TutorialResource::REFINERY_LEVEL_20: - if ($building == OrbitalBaseResource::REFINERY AND $currentLevel + 1 >= 20) { - $tutorialHelper->setStepDone(); - } - break; - } - } - - # build the new building - $bq = new BuildingQueue(); - $bq->rOrbitalBase = $baseId; - $bq->buildingNumber = $building; - $bq->targetLevel = $currentLevel + 1; - $time = $orbitalBaseHelper->getBuildingInfo($building, 'level', $currentLevel + 1, 'time'); - $bonus = $time * $session->get('playerBonus')->get(PlayerBonus::GENERATOR_SPEED) / 100; - $nbBuildingQueues = count($buildingQueues); - if ($nbBuildingQueues === 0) { - $bq->dStart = Utils::now(); - } else { - $bq->dStart = $buildingQueues[$nbBuildingQueues - 1]->dEnd; - } - $bq->dEnd = Utils::addSecondsToDate($bq->dStart, round($time - $bonus)); - $buildingQueueManager->add($bq); - - # debit resources - $orbitalBaseManager->decreaseResources($ob, $orbitalBaseHelper->getBuildingInfo($building, 'level', $currentLevel + 1, 'resourcePrice')); - - if ($container->getParameter('data_analysis')) { - $qr = $database->prepare('INSERT INTO - DA_BaseAction(`from`, type, opt1, opt2, weight, dAction) - VALUES(?, ?, ?, ?, ?, ?)' - ); - $qr->execute([$session->get('playerId'), 1, $building, $currentLevel + 1, DataAnalysis::resourceToStdUnit($orbitalBaseHelper->getBuildingInfo($building, 'level', $currentLevel + 1, 'resourcePrice')), Utils::now()]); - } - - # add the event in controller - $session->get('playerEvent')->add($bq->dEnd, $container->getParameter('event_base'), $baseId); - - $session->addFlashbag('Construction programmée', Flashbag::TYPE_SUCCESS); - } else { - throw new FormException('les conditions ne sont pas remplies pour construire ce bâtiment'); - } - } else { - throw new ErrorException('cette base ne vous appartient pas'); - } - } else { - throw new ErrorException('le bâtiment indiqué n\'est pas valide'); - } -} else { - throw new FormException('pas assez d\'informations pour construire un bâtiment'); -} diff --git a/src/action/std/athena/building/dequeue.php b/src/action/std/athena/building/dequeue.php deleted file mode 100755 index 613ea677c..000000000 --- a/src/action/std/athena/building/dequeue.php +++ /dev/null @@ -1,87 +0,0 @@ -getContainer()->get(\App\Classes\Library\Session\SessionWrapper::class); -$request = $this->getContainer()->get('app.request'); -$orbitalBaseManager = $this->getContainer()->get(\App\Modules\Athena\Manager\OrbitalBaseManager::class); -$orbitalBaseHelper = $this->getContainer()->get(\App\Modules\Athena\Helper\OrbitalBaseHelper::class); -$buildingQueueManager = $this->getContainer()->get(\App\Modules\Athena\Manager\BuildingQueueManager::class); -$buildingResourceRefund = $this->getContainer()->getParameter('athena.building.building_queue_resource_refund'); -$entityManager = $this->getContainer()->get(\App\Classes\Entity\EntityManager::class); - -for ($i=0; $i < $session->get('playerBase')->get('ob')->size(); $i++) { - $verif[] = $session->get('playerBase')->get('ob')->get($i)->get('id'); -} - -$baseId = $request->query->get('baseid'); -$building = $request->query->get('building'); - - -if ($baseId !== FALSE AND $building !== FALSE AND in_array($baseId, $verif)) { - if ($orbitalBaseHelper->isABuilding($building)) { - if (($ob = $orbitalBaseManager->getPlayerBase($baseId, $session->get('playerId'))) !== null) { - $buildingQueues = $buildingQueueManager->getBaseQueues($baseId); - - $index = NULL; - $nbBuildingQueues = count($buildingQueues); - for ($i = 0; $i < $nbBuildingQueues; $i++) { - $queue = $buildingQueues[$i]; - # get the last element from the correct building - if ($queue->buildingNumber == $building) { - $index = $i; - $targetLevel = $queue->targetLevel; - $dStart = $queue->dStart; - } - } - - # if it's the first, the next must restart by now - if ($index == 0) { - $dStart = Utils::now(); - } - - if ($index !== NULL) { - # shift - for ($i = $index + 1; $i < $nbBuildingQueues; $i++) { - $queue = $buildingQueues[$i]; - - $oldDate = $queue->dEnd; - $queue->dEnd = Utils::addSecondsToDate($dStart, Utils::interval($queue->dStart, $queue->dEnd, 's')); - $queue->dStart = $dStart; - - // @TODO handle rescheduling - // $scheduler->reschedule($queue, $queue->dEnd, $oldDate); - - $dStart = $queue->dEnd; - } - - // @TODO handle cancellation - // $scheduler->cancel($buildingQueues[$index], $buildingQueues[$index]->dEnd); - $entityManager->remove($buildingQueues[$index]); - $entityManager->flush(BuildingQueue::class); - - // give the resources back - $resourcePrice = $orbitalBaseHelper->getBuildingInfo($building, 'level', $targetLevel, 'resourcePrice'); - $resourcePrice *= $buildingResourceRefund; - $orbitalBaseManager->increaseResources($ob, $resourcePrice, TRUE); - $session->addFlashbag('Construction annulée, vous récupérez le ' . $buildingResourceRefund * 100 . '% du montant investi pour la construction', Flashbag::TYPE_SUCCESS); - } else { - throw new ErrorException('suppression de bâtiment impossible'); - } - } else { - throw new ErrorException('cette base ne vous appartient pas'); - } - } else { - throw new ErrorException('le bâtiment indiqué n\'est pas valide'); - } -} else { - throw new FormException('pas assez d\'informations pour annuler la construction d\'un bâtiment'); -} diff --git a/src/views/components/bases/ob/generator.php b/src/views/components/bases/ob/generator.php deleted file mode 100755 index 2926b5a85..000000000 --- a/src/views/components/bases/ob/generator.php +++ /dev/null @@ -1,217 +0,0 @@ -getContainer(); -$session = $this->getContainer()->get(\App\Classes\Library\Session\SessionWrapper::class); -$buildingQueueManager = $this->getContainer()->get(\App\Modules\Athena\Manager\BuildingQueueManager::class); -$technologyManager = $this->getContainer()->get(\App\Modules\Promethee\Manager\TechnologyManager::class); -$orbitalBaseHelper = $this->getContainer()->get(\App\Modules\Athena\Helper\OrbitalBaseHelper::class); -$buildingResourceRefund = $this->getContainer()->getParameter('athena.building.building_queue_resource_refund'); -$sessionToken = $session->get('token'); -$mediaPath = $container->getParameter('media'); - -$q = ''; -$b = array('', '', '', '', '', '', '', '', '', ''); -$realSizeQueue = 0; - -for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { - $name = ucfirst($orbitalBaseHelper->getBuildingInfo($i, 'name')); - $aLevel[$i] = intval(call_user_func(array($ob_generator, 'getLevel' . $name))); - $rLevel[$i] = intval(call_user_func(array($ob_generator, 'getReal' . $name . 'Level'))); -} - -# queue - -$q .= '
'; -$nextTime = 0; -$nextTotalTime = 0; - -for ($i = 0; $i < $orbitalBaseHelper->getBuildingInfo(OrbitalBaseResource::GENERATOR, 'level', $ob_generator->levelGenerator, 'nbQueues'); $i++) { - if (isset($ob_generator->buildingQueues[$i])) { - $qe = $ob_generator->buildingQueues[$i]; - - $realSizeQueue++; - $nextTime = Utils::interval(Utils::now(), $qe->dEnd, 's'); - $nextTotalTime += $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'level', $qe->targetLevel, 'time'); - - $q .= '
'; - $q .= '×'; - $q .= ''; - $q .= ''; - $q .= $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'frenchName'); - $q .= ' niv. ' . $qe->targetLevel . ''; - $q .= ''; - if ($realSizeQueue > 1) { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ''; - $q .= ''; - } else { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ''; - - $q .= ''; - $q .= ''; - $q .=''; - $q .= ''; - } - $q .= '
'; - } else { - $q .= '
'; - $q .= ''; - $q .= 'Emplacement libre'; - $q .= ''; - $q .= '
'; - } -} -$q .= '
'; - - -# building -$technology = $technologyManager->getPlayerTechnology($session->get('playerId')); -for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { - $level = $aLevel[$i]; - $nextLevel = $rLevel[$i] + 1; - - $b[$i] .= ($rLevel[$i]) ? '
' : '
'; - $b[$i] .= '
'; - $b[$i] .= ''; - $b[$i] .= '' . $orbitalBaseHelper->getBuildingInfo($i, 'frenchName') . ''; - if ($level != 0) { - $b[$i] .= '' . $level . ''; - } - $b[$i] .= '+'; - $b[$i] .= '
'; - - $price = Format::numberFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice'), -1) . ' ressources'; - $time = Chronos::secondToFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'time'), 'lite') . ' relèves'; - - if (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'buildingTree', $ob_generator)) !== TRUE) { - if ($answer == 'niveau maximum atteint') { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= 'niveau maximum atteint'; - $b[$i] .= '
'; - $b[$i] .= '
'; - } else { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } - } elseif (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'techno', $technology)) !== TRUE) { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } elseif (!$orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $aLevel[OrbitalBaseResource::GENERATOR], 'queue', $realSizeQueue)) { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } elseif (!$orbitalBaseHelper->haveRights($i, $nextLevel, 'resource', $ob_generator->getResourcesStorage())) { - $missingResource = $orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice') - $ob_generator->getResourcesStorage(); - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'construction impossible
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } else { - $b[$i] .= ''; - $b[$i] .= ''; - $b[$i] .= 'augmenter vers le niveau ' . $nextLevel . '
'; - $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
'; - $b[$i] .= '
'; - } - $b[$i] .= '
'; -} - -# display -echo '
'; - echo '
'; - echo ''; - echo '

' . $orbitalBaseHelper->getBuildingInfo(0, 'frenchName') . '

'; - echo 'niveau ' . $ob_generator->getLevelGenerator() . ''; - echo '
'; - echo '
'; - echo '
'; - echo '
'; - echo 'bonus de vitesse de construction'; - echo ''; - echo Format::numberFormat($session->get('playerBonus')->get(PlayerBonus::GENERATOR_SPEED)) . ' %'; - echo ''; - echo '
'; - - echo '

File de construction

'; - echo $q; - echo '
'; - echo '
'; -echo '
'; - -echo '
'; - echo '
'; - echo '
'; - echo '
'; - echo '

Bâtiments neutres

'; - echo $b[0]; - echo $b[5]; - echo $b[7]; - echo '
'; - echo '
'; -echo '
'; - -echo '
'; - echo '
'; - echo '
'; - echo '
'; - echo '

Bâtiments commerciaux

'; - echo $b[1]; - echo $b[6]; - echo $b[9]; - echo '
'; - echo '
'; -echo '
'; - -echo '
'; - echo '
'; - echo '
'; - echo '
'; - echo '

Bâtiments militaires

'; - echo $b[2]; - echo $b[8]; - echo $b[3]; - echo '
'; - echo '
'; -echo '
'; - -echo '
'; - echo '
'; - echo '

À propos

'; - echo '
'; - echo '
'; - echo '
'; - echo '

' . $orbitalBaseHelper->getBuildingInfo(0, 'description') . '

'; - echo '
'; - echo '
'; -echo '
'; diff --git a/templates/components/base/building_queues.html.twig b/templates/components/base/building_queues.html.twig new file mode 100644 index 000000000..72e7d4d31 --- /dev/null +++ b/templates/components/base/building_queues.html.twig @@ -0,0 +1,23 @@ +
+ {% set next_total_time = 0 %} + + {% set building_queues_count = current_base.buildingQueues|length %} + + {% for building_queue in current_base.buildingQueues %} + {% set next_total_time = next_total_time + get_building_info(building_queue.buildingNumber, 'level', building_queue.targetLevel, 'time') %} + + {{ include('molecules/base/building_queue.html.twig', { + building_queues_count, + building_queue, + next_total_time, + }) }} + {% endfor %} + + {% for i in range(building_queues_count, get_building_info(generator_building_number, 'level', current_base.levelGenerator, 'nbQueues') - 1) %} +
+ + Emplacement libre + +
+ {% endfor %} +
diff --git a/templates/molecules/base/building_card.html.twig b/templates/molecules/base/building_card.html.twig new file mode 100644 index 000000000..8a2ae4e37 --- /dev/null +++ b/templates/molecules/base/building_card.html.twig @@ -0,0 +1,70 @@ +
+
+ + {{ get_building_info(building_number, 'frenchName') }} + {% if building_data.level > 0 %} + {{ building_data.level }} + {% endif %} + + +
+ {% set price %} + {{ get_building_info(building_number, 'level', (building_data.next_level), 'resourcePrice')|number(-1) }} + ressources + {% endset %} + {% set time %} + {{ get_building_info(building_number, 'level', (building_data.next_level), 'time')|lite_seconds }} + relèves + {% endset %} + + {% if building_data.building_requirements is not same as(true) %} + {% if 'niveau maximum atteint' == building_data.building_requirements %} + + + construction impossible
+ niveau maximum atteint +
+
+ {% else %} + + + construction impossible
+ {{ price }} | {{ time }} +
+
+ {% endif %} + {% elseif building_data.technology_requirements is not same as(true) %} + + + construction impossible
+ {{ price }} | {{ time }} +
+
+ {% elseif true != building_data.queue_requirements %} + + + construction impossible
+ {{ price }} | {{ time }} +
+
+ {% elseif true != building_data.resources_requirements %} + {% set missing_resources = get_building_info(building_number, 'level', (building_data.next_level), 'resourcePrice') - current_base.resourcesStorage %} + + + construction impossible
+ {{ price }} | {{ time }} +
+
+ {% else %} + + + augmenter vers le niveau {{ building_data.next_level }}
+ {{ price }} | {{ time }} +
+
+ {% endif %} +
+ diff --git a/templates/molecules/base/building_queue.html.twig b/templates/molecules/base/building_queue.html.twig new file mode 100644 index 000000000..2b02f0f35 --- /dev/null +++ b/templates/molecules/base/building_queue.html.twig @@ -0,0 +1,26 @@ +{% set next_time = building_queue|queue_duration %} + +
+ × + + + {{ get_building_info(building_queue.buildingNumber, 'frenchName') }} + niv. {{ building_queue.targetLevel }} + + {% if building_queues_count > 1 %} + {{ next_time|lite_seconds }} + + {% else %} + '{{ next_time|lite_seconds }} + + + + + + {% endif %} +
diff --git a/templates/pages/athena/generator.html.twig b/templates/pages/athena/generator.html.twig index 61afd0514..b9fe0398f 100644 --- a/templates/pages/athena/generator.html.twig +++ b/templates/pages/athena/generator.html.twig @@ -1,156 +1,46 @@ -$q = ' -$b = array('', '', '', '', '', '', '', '', '', ''); -$realSizeQueue = 0; +{% extends 'layouts/athena/current_base.html.twig' %} -for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { -$name = ucfirst($orbitalBaseHelper->getBuildingInfo($i, 'name')); -$aLevel[$i] = intval(call_user_func(array($ob_generator, 'getLevel' . $name))); -$rLevel[$i] = intval(call_user_func(array($ob_generator, 'getReal' . $name . 'Level'))); -} +{% set generator_building_number = constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::GENERATOR') %} -# queue - -$q .= '
- $nextTime = 0; - $nextTotalTime = 0; - - for ($i = 0; $i < $orbitalBaseHelper->getBuildingInfo(OrbitalBaseResource::GENERATOR, 'level', $ob_generator->levelGenerator, 'nbQueues'); $i++) { - if (isset($ob_generator->buildingQueues[$i])) { - $qe = $ob_generator->buildingQueues[$i]; - - $realSizeQueue++; - $nextTime = Utils::interval(Utils::now(), $qe->dEnd, 's'); - $nextTotalTime += $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'level', $qe->targetLevel, 'time'); - - $q .= '
- $q .= '× - $q .= ' - $q .= ' - $q .= $orbitalBaseHelper->getBuildingInfo($qe->buildingNumber, 'frenchName'); - $q .= ' niv. ' . $qe->targetLevel . ' - $q .= ' - if ($realSizeQueue > 1) { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ' - $q .= ' - } else { - $q .= '' . Chronos::secondToFormat($nextTime, 'lite') . ' - - $q .= ' - $q .= ' - $q .=' - $q .= ' - } - $q .= '
- } else { - $q .= '
- $q .= ' - $q .= 'Emplacement libre - $q .= ' - $q .= '
- } - } - $q .= '
- - -# building -$technology = $technologyManager->getPlayerTechnology($session->get('playerId')); -for ($i = 0; $i < OrbitalBaseResource::BUILDING_QUANTITY; $i++) { -$level = $aLevel[$i]; -$nextLevel = $rLevel[$i] + 1; - -$b[$i] .= ($rLevel[$i]) ? '
' : '
- $b[$i] .= '
- $b[$i] .= ' - $b[$i] .= '' . $orbitalBaseHelper->getBuildingInfo($i, 'frenchName') . ' - if ($level != 0) { - $b[$i] .= '' . $level . ' - } - $b[$i] .= '+ - $b[$i] .= '
- - $price = Format::numberFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice'), -1) . ' ressources - $time = Chronos::secondToFormat($orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'time'), 'lite') . ' relèves - - if (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'buildingTree', $ob_generator)) !== TRUE) { - if ($answer == 'niveau maximum atteint') { - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'construction impossible
- $b[$i] .= 'niveau maximum atteint - $b[$i] .= '
- $b[$i] .= '
- } else { - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'construction impossible
- $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
- $b[$i] .= '
- } - } elseif (($answer = $orbitalBaseHelper->haveRights($i, $nextLevel, 'techno', $technology)) !== TRUE) { - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'construction impossible
- $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
- $b[$i] .= '
- } elseif (!$orbitalBaseHelper->haveRights(OrbitalBaseResource::GENERATOR, $aLevel[OrbitalBaseResource::GENERATOR], 'queue', $realSizeQueue)) { - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'construction impossible
- $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
- $b[$i] .= '
- } elseif (!$orbitalBaseHelper->haveRights($i, $nextLevel, 'resource', $ob_generator->getResourcesStorage())) { - $missingResource = $orbitalBaseHelper->getBuildingInfo($i, 'level', ($nextLevel), 'resourcePrice') - $ob_generator->getResourcesStorage(); - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'construction impossible
- $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
- $b[$i] .= '
- } else { - $b[$i] .= ' - $b[$i] .= ' - $b[$i] .= 'augmenter vers le niveau ' . $nextLevel . '
- $b[$i] .= $price . ' | ' . $time; - $b[$i] .= '
- $b[$i] .= '
- } - $b[$i] .= '
- } - - # display +{% block content %}
-

' . $orbitalBaseHelper->getBuildingInfo(0, 'frenchName') . '

- niveau ' . $ob_generator->getLevelGenerator() . ' -
+

{{ get_building_info(0, 'frenchName') }}

+ niveau {{ current_base.levelGenerator }} +
-
+
bonus de vitesse de construction - echo Format::numberFormat($session->get('playerBonus')->get(PlayerBonus::GENERATOR_SPEED)) . ' % - -
+ {{ generator_speed_bonus|number }} % + +

File de construction

- echo $q; -
+ {{ include('components/base/building_queues.html.twig') }}
+

Bâtiments neutres

- echo $b[0]; - echo $b[5]; - echo $b[7]; + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::GENERATOR'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::GENERATOR')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::TECHNOSPHERE'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::TECHNOSPHERE')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::STORAGE'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::STORAGE')], + }) }}
@@ -160,32 +50,51 @@ $b[$i] .= ($rLevel[$i]) ? '
' : '

Bâtiments commerciaux

- echo $b[1]; - echo $b[6]; - echo $b[9]; -
+ {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::REFINERY'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::REFINERY')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::COMMERCIAL_PLATEFORME'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::COMMERCIAL_PLATEFORME')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::SPATIOPORT'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::SPATIOPORT')], + }) }}
+

Bâtiments militaires

- echo $b[2]; - echo $b[8]; - echo $b[3]; -
+ {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::DOCK1'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::DOCK1')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::RECYCLING'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::RECYCLING')], + }) }} + {{ include('molecules/base/building_card.html.twig', { + 'building_number': constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::DOCK2'), + 'building_data': buildings_data[constant('App\\Modules\\Athena\\Resource\\OrbitalBaseResource::DOCK2')], + }) }}
+

À propos

-
+
-

' . $orbitalBaseHelper->getBuildingInfo(0, 'description') . '

-
+

{{ get_building_info(generator_building_number, 'description')|raw }}

+ +{% endblock %}