Example #1
0
 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;
 }