diff --git a/App/Config/config.neon b/App/Config/config.neon index 647a3936..8be9d4d4 100644 --- a/App/Config/config.neon +++ b/App/Config/config.neon @@ -59,6 +59,7 @@ services: - App\GameModule\Model\Units\UnitModel - App\GameModule\Model\Units\UnitService(%speed%) - App\GameModule\Model\Units\TrainingModel + - App\GameModule\Model\Event\ProcessTraining # commands - diff --git a/App/GameModule/Controls/BuildingDetail/Template/Barracks.latte b/App/GameModule/Controls/BuildingDetail/Template/Barracks.latte index 388fe53c..b31d5c45 100644 --- a/App/GameModule/Controls/BuildingDetail/Template/Barracks.latte +++ b/App/GameModule/Controls/BuildingDetail/Template/Barracks.latte @@ -40,7 +40,7 @@

- +
diff --git a/App/GameModule/Model/Event/ProcessEvents.php b/App/GameModule/Model/Event/ProcessEvents.php index 6e6a0ed2..55f6f125 100644 --- a/App/GameModule/Model/Event/ProcessEvents.php +++ b/App/GameModule/Model/Event/ProcessEvents.php @@ -27,6 +27,10 @@ class ProcessEvents * @var App\FrontModule\Model\VData\VDataModel */ private $VDataModel; + /** + * @var ProcessTraining + */ + private $processTraining; public function __construct( @@ -35,12 +39,14 @@ public function __construct( App\FrontModule\Model\VData\VillageService $villageService, Kdyby\Clock\IDateTimeProvider $dateTimeProvider, App\FrontModule\Model\VData\VDataModel $VDataModel + , ProcessTraining $processTraining ){ $this->buildingService = $buildingService; $this->productionService = $productionService; $this->villageService = $villageService; $this->dateTimeProvider = $dateTimeProvider; $this->VDataModel = $VDataModel; + $this->processTraining = $processTraining; } @@ -54,6 +60,7 @@ public function process() $this->productionService->processProduction($village, $time); } $this->buildingService->processBuildings($time); + $this->processTraining->process($time); $this->releaseLock(); } diff --git a/App/GameModule/Model/Event/ProcessTraining.php b/App/GameModule/Model/Event/ProcessTraining.php new file mode 100644 index 00000000..516a8ec9 --- /dev/null +++ b/App/GameModule/Model/Event/ProcessTraining.php @@ -0,0 +1,64 @@ +unitsModel = $unitsModel; + $this->trainingModel = $trainingModel; + } + + + public function process($time) + { + $trainData = $this->trainingModel->getProcessData($time); + foreach ($trainData as $single) { + if ($single->timestamp2 < ($time + $single->eachtime)) { + $diff = $time - $single->timestamp2; + $amount = floor($diff / $single->eachtime); + if ($amount > $single->amt) { + $amount = $single->amt; + } + $remaining = $single->amt - $amount; + if ($remaining < 1) { + $this->trainingModel->delete($single->id); + } else { + $this->trainingModel->update($single->id, [ + 'amt' => $remaining, + 'timestamp2' => $single->timestamp2 + ($single->eachtime * $amount) + ]); + } + /** @var \stdClass $units */ + $units = $this->unitsModel->get($single->vref); + $unitName = 'u' . $single->unit; + if ($units) { + $unitAmount = $units['u' . $single->unit] + $amount; + $this->unitsModel->update($units['vref'], [ + $unitName => $unitAmount, + ]); + } else { + $this->unitsModel->add([ + $unitName => $amount, + ]); + } + } + } + } +} \ No newline at end of file diff --git a/App/GameModule/Model/Units/TrainingModel.php b/App/GameModule/Model/Units/TrainingModel.php index 908a87da..9d57daad 100644 --- a/App/GameModule/Model/Units/TrainingModel.php +++ b/App/GameModule/Model/Units/TrainingModel.php @@ -27,4 +27,12 @@ public function getByBuilding($village, $building) return $query->fetchAll(); } + + + public function getProcessData($time) + { + return $this->database->select('*')->from($this->table) + ->where('timestamp < %i', $time) + ->fetchAll(); + } } \ No newline at end of file diff --git a/App/GameModule/Model/Units/UnitsModel.php b/App/GameModule/Model/Units/UnitsModel.php index c5f69a62..983d1775 100644 --- a/App/GameModule/Model/Units/UnitsModel.php +++ b/App/GameModule/Model/Units/UnitsModel.php @@ -21,4 +21,12 @@ public function get($id) ->toArray(); } + + public function update($id, $data) + { + return $this->database->update($this->table, $data) + ->where('vref = %i', $id) + ->execute(); + } + } \ No newline at end of file
Troops in training