/** * @param int $id * @param App\GameModule\DTO\Building|bool $building * @return App\GameModule\DTO\Unit */ public function getUnit($id, $building = FALSE) { /** @var \stdClass $unitData */ $unitData = $this->unitModel->get($id); $unit = new App\GameModule\DTO\Unit(); $unit->setId($unitData->id); $unit->setName($unitData->name); $unit->setAttack($unitData->attack); $unit->setDefenceInfantry($unitData->defence_infantry); $unit->setDefenceCalvary($unitData->defence_calvary); $unit->setWood($unitData->wood); $unit->setClay($unitData->clay); $unit->setIron($unitData->iron); $unit->setCrop($unitData->crop); $unit->setUpkeep($unitData->pop); $unit->setSpeed($unitData->speed); $time = $unitData->time / $this->speed; if ($building) { $time = $time * ($building->getParameter() / 100); } $unit->setTime(round($time)); $unit->setCapacity($unitData->capacity); $unit->setType($unitData->type); $unit->setTribe($unitData->tribe); return $unit; }
/** * @param App\GameModule\DTO\Building $building * @param int $field * @param App\GameModule\DTO\Village $village * @return bool */ public function canBuildLevel($building, $field, $village) { if (!$building) { return 'Building is at maximum level'; } $current = $this->getBuilding($village->getFData()['f' . $field . 't'], $village->getFData()['f' . $field], $village); if ($current) { if ($current->getLevel() === $building->getLevel()) { return 'Building is at same level.'; } /** @var \stdClass $maxLevel */ $maxLevel = $this->buildingModel->getBuildingMaxLevel($building->getBuilding()); if ($current->getLevel() === $maxLevel->level) { return 'Building is at maximum level'; } $queue = $this->BDataModel->getBuildingQueue($village->getId()); foreach ($queue as $single) { if ($single->level === $building->getLevel() && $single->type === $building->getBuilding() && $single->field == $field) { return 'Building is already being build.'; } if ($maxLevel->level === $single->level && $single->type === $building->getBuilding() && $single->field == $field) { return 'Building max level under construction'; } } } return TRUE; }