From 60dd048876abd7f668f0cd6447960f33a21de6cb Mon Sep 17 00:00:00 2001 From: devZoGok Date: Sun, 22 Oct 2023 09:57:21 +0300 Subject: [PATCH] bugfix for issuing orders to garrisoned vehicles --- player.cpp | 42 +++++++++++++++++++++++++++++++++++------- player.h | 14 +++++++------- 2 files changed, 42 insertions(+), 14 deletions(-) diff --git a/player.cpp b/player.cpp index f6c5345..6fb5d72 100755 --- a/player.cpp +++ b/player.cpp @@ -30,6 +30,8 @@ namespace battleship{ order.type = type; order.targets = targets; + vector selectedUnits = getSelectedUnits(); + for(Unit *u : selectedUnits){ if(append) u->addOrder(order); @@ -51,16 +53,11 @@ namespace battleship{ return false; } - void Player::deselectUnit(int i){ - selectedUnits[i]->toggleSelection(false); - selectedUnits.erase(selectedUnits.begin() + i); - } - void Player::deselectUnits(){ + vector selectedUnits = getSelectedUnits(); + for(Unit *u : selectedUnits) u->toggleSelection(false); - - selectedUnits.clear(); } void Player::removeUnit(Unit *unit){ @@ -78,4 +75,35 @@ namespace battleship{ delete units[id]; units.erase(units.begin() + id); } + + vector Player::getSelectedUnits(){ + vector selectedUnits; + + for(Unit *u : units) + if(u->isSelected()) + selectedUnits.push_back(u); + + return selectedUnits; + } + + Unit* Player::getSelectedUnit(int selectedUnitId){ + Unit *selectedUnit = nullptr; + + for(int i = 0, selUnitId = 0; i < units.size(); i++) + if(units[i]->isSelected()){ + if(selUnitId == selectedUnitId){ + selectedUnit = units[i]; + break; + } + + selUnitId++; + } + + return selectedUnit; + } + + void Player::selectUnits(vector selUnits){ + for(Unit *u : selUnits) + u->toggleSelection(true); + } } diff --git a/player.h b/player.h index 81b157b..51fee4c 100755 --- a/player.h +++ b/player.h @@ -16,16 +16,16 @@ namespace battleship{ ~Player(); void update(); void issueOrder(Order::TYPE, std::vector, bool); - void deselectUnit(int); void deselectUnits(); void removeUnit(Unit*); void removeUnit(int); bool isThisPlayersUnit(GameObject*); - const inline std::vector& getSelectedUnits(){return selectedUnits;} - inline Unit* getSelectedUnit(int i){return selectedUnits[i];} - inline int getNumSelectedUnits(){return selectedUnits.size();} - inline void selectUnit(Unit *u){selectedUnits.push_back(u);} - inline void selectUnits(std::vector units){selectedUnits = units;} + std::vector getSelectedUnits(); + Unit* getSelectedUnit(int); + void selectUnits(std::vector); + inline void deselectUnit(int i){getSelectedUnit(i)->toggleSelection(false);} + inline int getNumSelectedUnits(){return getSelectedUnits().size();} + inline void selectUnit(Unit *u){u->toggleSelection(true);} inline void addUnit(Unit *u){units.push_back(u);} inline std::vector& getResourceDeposits(){return resourceDeposits;} inline void addResourceDeposit(ResourceDeposit *rd){resourceDeposits.push_back(rd);} @@ -48,7 +48,7 @@ namespace battleship{ inline void addResearch(int r){this->research += r;} private: int refineds = 0, wealth = 0, research = 0, faction, difficulty,side,id; - std::vector units, selectedUnits; + std::vector units; std::vector projectiles; std::vector resourceDeposits; vb01::Vector3 spawnPoint;