diff options
Diffstat (limited to 'src/gemini/Controller/Building.php')
-rw-r--r-- | src/gemini/Controller/Building.php | 44 |
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}" + ); + } +} |