示例#1
0
 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');
 }
示例#2
0
 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;
 }
示例#4
0
 /**
  * @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);
 }
示例#5
0
 /**
  * @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;
 }
示例#6
0
 /**
  * @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;
 }