diff options
Diffstat (limited to 'src/http/Controller/Building.php')
| -rw-r--r-- | src/http/Controller/Building.php | 47 | 
1 files changed, 47 insertions, 0 deletions
| diff --git a/src/http/Controller/Building.php b/src/http/Controller/Building.php new file mode 100644 index 0000000..4a59f0e --- /dev/null +++ b/src/http/Controller/Building.php @@ -0,0 +1,47 @@ +<?php + +namespace App\http\Controller; + +use App\Model\Building as Model; +use App\Model\Event; +use App\Model\Event\UpgradeBuilding; +use App\Model\Village; +use App\http\Router; +use Symfony\Component\HttpFoundation\RedirectResponse; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\Routing\Annotation\Route; + +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 RedirectResponse( +      Router::generate( +        'village.show', +        ['x' => $request->get('x'), 'y' => $request->get('y')] +      ) +    ); +  } +} | 
