public function actionDefault($id, $building, $field) { if ($building == 0) { $this->redirect('chooseBuilding', [$id, $field]); } $village = $this->villageService->getVillage($id); $current = $this->buildingService->getBuilding($building, $village->getFData()['f' . $field], $village); $this->template->current = $current; $queue = $this->BDataModel->getBuildingQueue($village->getId()); $nextLevel = $village->getFData()['f' . $field] + 1; foreach ($queue as $single) { if ($single->type == $current->getBuilding() && $single->field == $field) { $nextLevel = $single->level; $nextLevel++; } } if ($nextLevel == 0) { $nextLevel++; } $next = $this->buildingService->getBuilding($building, $nextLevel, $village); $this->template->village = $village; $this->template->field = $field; $this->template->next = $next; $this->template->canBuild = $next ? $this->buildingService->canBuild($next, $field, $village) : FALSE; $this->template->busyWorkers = $next ? $this->buildingService->busyWorkers($next, $village) : FALSE; $this->template->storage = $next ? $this->buildingService->isStorageBigEnough($next, $village) : FALSE; $this->template->granary = $next ? $this->buildingService->isGranaryBigEnough($next, $village) : FALSE; $this->template->resources = $next ? $this->buildingService->isThereEnoughResources($next, $village) : FALSE; $this->template->buldingStatus = $this->buildingService->canBuildLevel($next, $field, $village); }
/** * @param App\GameModule\DTO\Village $village * @param int $field * @return array */ public function getAvailable($village, $field) { $available = []; if ($field == 40) { if ($village->getOwner()->tribe === 1) { $available[] = $this->buildingService->getBuilding(BuildingModel::CITY_WALL, 1, $village); return $available; } elseif ($village->getOwner()->tribe === 2) { $available[] = $this->buildingService->getBuilding(BuildingModel::EARTH_WALL, 1, $village); return $available; } elseif ($village->getOwner()->tribe === 3) { $available[] = $this->buildingService->getBuilding(BuildingModel::PALISADE, 1, $village); return $available; } } if ($field == 39) { $available[] = $this->buildingService->getBuilding(BuildingModel::RALLY_POINT, 1, $village); return $available; } $buildings = $this->buildingModel->getAll(); foreach ($buildings as $building => $name) { if ($building < 5) { continue; } if ($this->buildingService->isBuilt($village, $building)) { continue; } if (in_array($building, [BuildingModel::CITY_WALL, BuildingModel::EARTH_WALL, BuildingModel::PALISADE, BuildingModel::RALLY_POINT])) { continue; } if ($village->getNatar() === 0 && $building === BuildingModel::WORLD_WONDER) { continue; } $requirements = $this->buildingModel->getRequirements($building); $passed = FALSE; foreach ($requirements as $requirement) { $built = $this->buildingService->isBuilt($village, $requirement->require_building); if ($built && $requirement->exclude_building === $built->getBuilding()) { $passed = FALSE; break; } if ($built && $built->getLevel() >= $requirement->require_level) { $passed = TRUE; } else { $passed = FALSE; break; } } if (!$requirements || $passed) { $available[] = $this->buildingService->getBuilding($building, 1, $village); } } return $available; }