public function attached($presenter) { parent::attached($presenter); $this->wdata = $this->WDataModel->get($this->presenter->getParameter('destination')); $this->template->village = $this->village = $this->villageService->getVillage($this->presenter->getParameter('id')); $this->units = $this->unitService->getUnits($this->village); $this->template->units = $this->units; $this->template->names = $this->unitService->getNames(); $unitData = []; switch ($this->village->getOwner()->tribe) { case App\FrontModule\Model\User\UserService::TRIBE_ROMANS: foreach (App\GameModule\Model\Units\UnitService::ROMANS as $unit) { $unitData[] = $this->unitFactory->getUnit($unit); } break; case App\FrontModule\Model\User\UserService::TRIBE_TEUTONS: foreach (App\GameModule\Model\Units\UnitService::TEUTONS as $unit) { $unitData[] = $this->unitFactory->getUnit($unit); } break; case App\FrontModule\Model\User\UserService::TRIBE_GAULS: foreach (App\GameModule\Model\Units\UnitService::GAULS as $unit) { $unitData[] = $this->unitFactory->getUnit($unit); } break; } $this->template->unitData = $unitData; $this->template->setFile(__DIR__ . '/SendUnitsControl.latte'); }
public function startup() { parent::startup(); if ($id = $this->getParameter('id')) { $this->village = $this->villageService->getVillage($id); if (!$this->village->getOwner() || $this->village->getOwner()->id !== $this->user->id) { $this->redirect(':Game:OuterVillage:default'); } } }
/** * @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; }
/** * @param App\GameModule\DTO\Village $village * @return int */ public function getBaseProductionCrop($village) { $production = 0; $FData = $village->getFData(); $grainMill = FALSE; $bakery = FALSE; $cropFields = []; // Step 1 find fields for ($i = 1; $i <= 38; $i++) { if ($FData['f' . $i . 't'] === App\GameModule\Model\Building\BuildingModel::CROPLAND) { $cropFields[] = $FData['f' . $i]; } if ($FData['f' . $i . 't'] === App\GameModule\Model\Building\BuildingModel::GRAIN_MILL) { $grainMill = $FData['f' . $i]; } if ($FData['f' . $i . 't'] === App\GameModule\Model\Building\BuildingModel::BAKERY) { $bakery = $FData['f' . $i]; } } // Step 2 calculate raw production foreach ($cropFields as $level) { /** @var \stdClass $cropland */ $cropland = $this->buildingModel->getBuildingLevel(4, $level); $production += $cropland->production; } // Step 3 apply oasis $production = $production * (1 + 0.25 * $this->ODataModel->countByUserVillage($village->getOwner()->id, $village->getId(), App\FrontModule\Model\OData\ODataModel::MODE_CROP) + 0.5 * $this->ODataModel->countByUserVillage($village->getOwner()->id, $village->getId(), App\FrontModule\Model\OData\ODataModel::MODE_CROP_BIG)); // Step 4 apply grainMill and bakery if ($grainMill) { /** @var \stdClass $grainMill */ $grainMill = $this->buildingModel->getBuildingLevel(App\GameModule\Model\Building\BuildingModel::GRAIN_MILL, $grainMill); $production = $production * ($grainMill->attribute / 100 + 1); } if ($bakery) { /** @var \stdClass $bakery */ $bakery = $this->buildingModel->getBuildingLevel(App\GameModule\Model\Building\BuildingModel::BAKERY, $bakery); $production = $production * ($bakery->attribute / 100 + 1); } // Step 5 apply bonus production if ($village->getOwner()->b4 === 1) { $production = $production * 1.25; } // Step 6 apply speed $production = $production * $this->speed; return round($production); }
/** * @param App\GameModule\DTO\Building $building * @param App\GameModule\DTO\Village $village * @return bool */ public function busyWorkers($building, $village) { if ($village->getOwner()->tribe === 1) { $maximumInnerQueue = 1; $maximumOuterQueue = 1; $innerQueue = $this->BDataModel->countInnerBuildingQueue($village->getId()); $outerQueue = $this->BDataModel->countOuterBuildingQueue($village->getId()); } else { $maximumInnerQueue = 1; $maximumOuterQueue = 0; $innerQueue = $this->BDataModel->countBuildingQueue($village->getId()); $outerQueue = 0; } if ($village->getOwner()->plus === 1) { $maximumInnerQueue++; $maximumOuterQueue++; } if ($building->getBuilding() < 5 && $village->getOwner()->tribe === 1 && $outerQueue >= $maximumOuterQueue) { return TRUE; } elseif ($building->getBuilding() > 4 && $village->getOwner()->tribe === 1 && $innerQueue >= $maximumInnerQueue) { return TRUE; } elseif ($innerQueue >= $maximumInnerQueue) { return TRUE; } return FALSE; }
/** * @param App\GameModule\DTO\Village $village * @param int $building * @return array */ public function getAvailableUnits($village, $building) { $units = []; if ($village->getOwner()->tribe === App\FrontModule\Model\User\UserService::TRIBE_ROMANS) { switch ($building) { case App\GameModule\Model\Building\BuildingModel::BARRACKS: $barracks = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::BARRACKS); $units[] = $this->unitFactory->getUnit(self::LEGIONNAIRE, $barracks); // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::STABLE: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::WORKSHOP: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::RESIDENCE: $residence = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::RESIDENCE); $units[] = $this->unitFactory->getUnit(self::SETTLER, $residence); break; case App\GameModule\Model\Building\BuildingModel::PALACE: $palace = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::PALACE); $units[] = $this->unitFactory->getUnit(self::SETTLER, $palace); break; } } elseif ($village->getOwner()->tribe === App\FrontModule\Model\User\UserService::TRIBE_TEUTONS) { switch ($building) { case App\GameModule\Model\Building\BuildingModel::BARRACKS: $barracks = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::BARRACKS); $units[] = $this->unitFactory->getUnit(self::MACEMAN, $barracks); // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::STABLE: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::WORKSHOP: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::RESIDENCE: $residence = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::RESIDENCE); $units[] = $this->unitFactory->getUnit(self::SETTLER_TEUTON, $residence); break; case App\GameModule\Model\Building\BuildingModel::PALACE: $palace = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::PALACE); $units[] = $this->unitFactory->getUnit(self::SETTLER_TEUTON, $palace); break; } } elseif ($village->getOwner()->tribe === App\FrontModule\Model\User\UserService::TRIBE_GAULS) { switch ($building) { case App\GameModule\Model\Building\BuildingModel::BARRACKS: $barracks = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::BARRACKS); $units[] = $this->unitFactory->getUnit(self::PHALANX, $barracks); // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::STABLE: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::WORKSHOP: // TODO RESEARCH break; case App\GameModule\Model\Building\BuildingModel::RESIDENCE: $residence = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::RESIDENCE); $units[] = $this->unitFactory->getUnit(self::SETTLER_GAUL, $residence); break; case App\GameModule\Model\Building\BuildingModel::PALACE: $palace = $this->buildingService->isBuilt($village, App\GameModule\Model\Building\BuildingModel::PALACE); $units[] = $this->unitFactory->getUnit(self::SETTLER_GAUL, $palace); break; } } return $units; }