summaryrefslogtreecommitdiff
path: root/src/gemini/Controller/Building.php
diff options
context:
space:
mode:
Diffstat (limited to 'src/gemini/Controller/Building.php')
-rw-r--r--src/gemini/Controller/Building.php44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/gemini/Controller/Building.php b/src/gemini/Controller/Building.php
new file mode 100644
index 0000000..9827d00
--- /dev/null
+++ b/src/gemini/Controller/Building.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\gemini\Controller;
+
+use App\Model\Building as Model;
+use App\Model\Event;
+use App\Model\Event\UpgradeBuilding;
+use App\Model\Village;
+use GeminiFoundation\Request;
+use GeminiFoundation\Response;
+use GeminiFoundation\Status;
+
+class Building
+{
+ //#[Route(path: '/village/{x}/{y}/building/{type}/level-up', methods: ['POST'])]
+ public function levelUp(Request $request): Response
+ {
+ $village = Village::getByCoordinates($request->get('x'), $request->get('y'));
+ $building = Model::getByVillage($village->id, $request->get('type')) ?? Model::getEmpty($village->id, $request->get('type'));
+
+ // resources
+ foreach ($building->getResourceRequirements() as $resourceType => $resourceValue) {
+ $village->{$resourceType} -= $resourceValue;
+ }
+ $village->updateResources();
+
+ // event
+ $event = new Event();
+ $event->time = (new \DateTime())->add(\DateInterval::createFromDateString(
+ $building->getBuildTimeForLevel($building->getEffectiveLevel() + 1) . ' seconds'
+ ));
+ $event->villageId = $building->villageId;
+ $upgradeBuildingEvent = new UpgradeBuilding();
+ $upgradeBuildingEvent->event = $event;
+ $upgradeBuildingEvent->type = $building->type;
+ $upgradeBuildingEvent->dbInsert();
+
+
+ return new Response(
+ statusCode: Status::REDIRECT_TEMPORARY, # correct response code?
+ meta: "/village/{$village->x}/{$village->y}"
+ );
+ }
+}