$_SESSION['user']['id']] ); return new Response(body: View::render('villages.twig', [ 'villages' => $villages, ])); } //#[Route(path: '/village/{x}/{y}', methods: ['GET'])] public function show(Request $request): Response { $village = Model::getByCoordinates($request->get('x'), $request->get('y')); if (! Guard::ownsVillage($village->id)) { return new Response(body: View::render('error.twig', ['message' => 'Insufficient permission'])); } $events = []; $eventsBuilding = DB::query( << $village->id] )->fetchAll(); foreach ($eventsBuilding as $row) { $events['UpgradeBuilding'][$row['type']][] = DB::convertToModel(UpgradeBuilding::class, $row); } $eventsUnits = DB::query( << $village->id] )->fetchAll(); foreach ($eventsUnits as $row) { $events['TrainUnits'][] = DB::convertToModel(TrainUnits::class, $row); } $eventsUnitsSendOwn = DB::query( << $village->id] )->fetchAll(); $eventsUnitsSendOther = DB::query( << $village->id] )->fetchAll(); foreach ([...$eventsUnitsSendOwn, ...$eventsUnitsSendOther] as $row) { $events['SendUnits'][] = DB::convertToModel(SendUnits::class, $row);; } $buildings = []; foreach (Model::getBuildings($village->id, true) as $building) { $buildings[$building->type] = $building; } return new Response(body: View::render('village.twig', [ 'village' => $village, 'events' => $events, 'buildings' => $buildings, 'villages' => DB::fetch(Model::class, "select * from villages where id!=:id", ['id' => $village->id]), ])); } // #[Route(path: '/village/{x}/{y}/storage/config', methods: ['POST'])] public function storageConfig(Request $request): Response { $village = Model::getByCoordinates($request->get('x'), $request->get('y')); $type = $request->get('type'); if (empty($type)) { return new Response(body: View::render('storage.twig', [ 'village' => $village, ])); } if (empty($request->get('input'))) { return new Response(statusCode: Status::INPUT, meta: "$type percent?"); } $input = intval($request->get('input')); // calculate to max 100% $allTypes = ['wood', 'clay', 'iron', 'food']; $allOtherTypes = array_diff($allTypes, [$type]); $storageConfig = $village->getStorageConfig($village->id); $values = []; foreach ($allTypes as $resourceType) { $values[$resourceType] = $storageConfig->$resourceType; } $values[$type] = $input; $total = 0; foreach ($values as $value) { $total += $value; } foreach ($values as $resourceType => $value) { $values[$resourceType] = round(($value / $total) * 100); } if ($values[$type] !== $input) { $values[$type] = $input; } $newTotal = array_sum($values); $values['food'] += (100 - $newTotal); DB::query( << $values['wood'], 'clay' => $values['clay'], 'iron' => $values['iron'], 'food' => $values['food'], 'id' => $village->id] ); return new Response( statusCode: Status::REDIRECT_TEMPORARY, meta: "/village/{$village->x}/{$village->y}/storage/config" ); } }