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'); }
/** * @param App\GameModule\DTO\Village $village * @param int $building * @return array */ public function getByBuilding($village, $building) { $query = $this->database->select('*')->from($this->table); $query->where('vref = %i', $village->getId()); if ($building === App\GameModule\Model\Building\BuildingModel::BARRACKS) { $query->where('unit IN %in', UnitService::INFANTRY); } $query->orderBy('id ASC'); return $query->fetchAll(); }
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 int $id * @return App\GameModule\DTO\Village */ public function getVillage($id) { /** @var \stdClass $VData */ $VData = $this->VDataModel->getByWId($id); $village = new App\GameModule\DTO\Village(); $village->setId($id); if ($VData) { /** @var \stdClass $owner */ $owner = $this->userModel->get($VData->owner); $village->setOwner($owner); $village->setActualWood($VData->wood); $village->setActualClay($VData->clay); $village->setActualIron($VData->iron); $village->setActualCrop($VData->crop); $village->setStorage($VData->maxstore); $village->setGranary($VData->maxcrop); $upkeep = $VData->pop + $this->upkeepService->getUpkeep($id); $village->setUpkeep($upkeep); $village->setName($VData->name); $village->setLoyalty($VData->loyalty); $village->setCapital($VData->capital); $village->setType($VData->type); $village->setNatar($VData->natar); $village->setCulturePoints($VData->cp); $village->setPopulation($VData->pop); $FData = $this->FDataModel->getByVref($village->getId())->toArray(); $village->setFData($FData); $village->setProductionWood($this->productionService->getProductionWood($village)); $village->setProductionClay($this->productionService->getProductionClay($village)); $village->setProductionIron($this->productionService->getProductionIron($village)); $village->setProductionCrop($this->productionService->getProductionCrop($village)); $village->setMaxUpkeep($this->productionService->getBaseProductionCrop($village)); } return $village; }
/** * @param App\GameModule\DTO\Village $village * @param int $time */ public function processProduction($village, $time) { /** @var \stdClass $VData */ $VData = $this->VDataModel->getByWId($village->getId()); if ($time > $VData->lastupdate2) { if ($VData->lastupdate2 === 0) { $lastUpdate = $time; } else { $lastUpdate = $VData->lastupdate2; } $wood = $VData->wood; if ($VData->wood !== $VData->maxstore) { $productionWood = $this->getProductionWood($village); $producedWood = ($time - $lastUpdate) * ($productionWood / 3600); $totalWood = $producedWood + $VData->wood; if ($totalWood < $VData->maxstore) { $wood = $totalWood; } else { $wood = $VData->maxstore; } } $clay = $VData->clay; if ($VData->clay !== $VData->maxstore) { $productionClay = $this->getProductionClay($village); $producedClay = ($time - $lastUpdate) * ($productionClay / 3600); $totalClay = $producedClay + $VData->clay; if ($totalClay < $VData->maxstore) { $clay = $totalClay; } else { $clay = $VData->maxstore; } } $iron = $VData->iron; if ($VData->iron !== $VData->maxstore) { $productionIron = $this->getProductionIron($village); $producedIron = ($time - $lastUpdate) * ($productionIron / 3600); $totalIron = $producedIron + $VData->iron; if ($totalIron < $VData->maxstore) { $iron = $totalIron; } else { $iron = $VData->maxstore; } } $crop = $VData->crop; if ($VData->crop !== $VData->maxcrop) { $productionCrop = $this->getProductionCrop($village); $producedCrop = ($time - $lastUpdate) * ($productionCrop / 3600); $totalCrop = $producedCrop + $VData->crop; if ($totalCrop < $VData->maxcrop) { $crop = $totalCrop; } else { $crop = $VData->maxcrop; } } $this->VDataModel->update($village->getId(), ['wood' => $wood, 'clay' => $clay, 'iron' => $iron, 'crop' => $crop, 'lastupdate2' => $time]); } }
/** * @param App\GameModule\DTO\Village $village * @param int $building * @return App\GameModule\DTO\Building|bool */ public function isBuilt($village, $building) { for ($i = 19; $i <= 40; $i++) { if ($village->getFData()['f' . $i . 't'] === $building) { return $this->getBuilding($building, $village->getFData()['f' . $i], $village); } } return FALSE; }
/** * @param App\GameModule\DTO\Village $village * @return \Dibi\Row|FALSE */ public function getUnits($village) { $unitData = $this->unitsModel->get($village->getId()); return $unitData; }