From dd1643eafadd1e17a6c1b112a0da9328f2b3decf Mon Sep 17 00:00:00 2001 From: devZoGok Date: Tue, 3 Jan 2023 09:49:28 +0200 Subject: [PATCH] player updating moved to the Map class removed unused methods --- activeGameState.cpp | 7 ++--- activeGameState.h | 3 +- consoleCommand.cpp | 11 +++---- inGameAppState.cpp | 71 +++++---------------------------------------- inGameAppState.h | 4 --- map.cpp | 6 ++++ map.h | 9 +++++- player.cpp | 3 ++ projectile.cpp | 12 ++++---- 9 files changed, 39 insertions(+), 87 deletions(-) diff --git a/activeGameState.cpp b/activeGameState.cpp index ec22967..2f6dc45 100755 --- a/activeGameState.cpp +++ b/activeGameState.cpp @@ -46,16 +46,15 @@ namespace battleship{ ActiveGameState::StructureFrame::~StructureFrame(){ } - ActiveGameState::ActiveGameState(GuiAppState *guiState, vector players, int playerId) : AbstractAppState( + ActiveGameState::ActiveGameState(GuiAppState *guiState, int playerId) : AbstractAppState( AppStateType::ACTIVE_STATE, configData::calcSumBinds(AppStateType::ACTIVE_STATE, true), configData::calcSumBinds(AppStateType::ACTIVE_STATE, false), GameManager::getSingleton()->getPath() + "Scripts/options.lua"){ this->guiState = guiState; - this->players = players; this->playerId = playerId; - mainPlayer = players[playerId]; + mainPlayer = Map::getSingleton()->getPlayer(playerId); initDragbox(); initDepthText(); @@ -134,7 +133,7 @@ namespace battleship{ void ActiveGameState::renderUnits() { vector units; - for (Player *p : players) + for (Player *p : Map::getSingleton()->getPlayers()) for (Unit *u : p->getUnits()) units.push_back(u); diff --git a/activeGameState.h b/activeGameState.h index 76c3abe..0a50874 100755 --- a/activeGameState.h +++ b/activeGameState.h @@ -24,7 +24,7 @@ namespace battleship{ ~StructureFrame(); }; - ActiveGameState(GuiAppState*, std::vector players, int); + ActiveGameState(GuiAppState*, int); ~ActiveGameState(); void onAttached(); void onDettached(); @@ -48,7 +48,6 @@ namespace battleship{ bool isInLineOfSight(vb01::Vector3, float, Unit*); GuiAppState *guiState; - std::vector players; std::vector structureFrames; Player *mainPlayer; vb01::Quad *dragbox = nullptr; diff --git a/consoleCommand.cpp b/consoleCommand.cpp index f08ea35..580b139 100755 --- a/consoleCommand.cpp +++ b/consoleCommand.cpp @@ -69,10 +69,7 @@ namespace battleship{ } void ConsoleCommand::executeAddUnit(int playerId, int unitId, Vector3 pos, Quaternion rot) { - GameManager *gm = GameManager::getSingleton(); - StateManager *stateManager = gm->getStateManager(); - InGameAppState *inGameState = (InGameAppState*)stateManager->getAppStateByType(AppStateType::IN_GAME_STATE); - vector players = inGameState->getPlayers(); + Player* player = Map::getSingleton()->getPlayer(playerId); Vehicle *vehicle = nullptr; LuaManager *luaManager = LuaManager::getSingleton(); @@ -80,13 +77,13 @@ namespace battleship{ switch((UnitClass)unitClass){ case UnitClass::ENGINEER: - vehicle = new Engineer(players[playerId], unitId, pos, rot); + vehicle = new Engineer(player, unitId, pos, rot); break; default: - vehicle = new Vehicle(players[playerId], unitId, pos, rot); + vehicle = new Vehicle(player, unitId, pos, rot); break; } - players[playerId]->addUnit(vehicle); + player->addUnit(vehicle); } } diff --git a/inGameAppState.cpp b/inGameAppState.cpp index fd8ffc7..5d32461 100755 --- a/inGameAppState.cpp +++ b/inGameAppState.cpp @@ -165,7 +165,8 @@ namespace battleship{ void InGameAppState::onAttached() { AbstractAppState::onAttached(); - Map::getSingleton()->load(mapName); + Map *map = Map::getSingleton(); + map->load(mapName); for (int i = 0; i < factions.size(); i++) { int faction, difficulty; @@ -183,16 +184,16 @@ namespace battleship{ faction = factions[i][0] - 48; Player *p = new Player(difficulty, faction, i); - players.push_back(p); - p->setId(players.size() - 1); + p->setId(map->getNumPlayers() - 1); + map->addPlayer(p); } - mainPlayer = players[playerId]; + mainPlayer = map->getPlayer(playerId); GameManager *gm = GameManager::getSingleton(); StateManager *stateManager = gm->getStateManager(); guiState = ((GuiAppState*)stateManager->getAppStateByType((int)AppStateType::GUI_STATE)); - activeState = new ActiveGameState(guiState, players, playerId); + activeState = new ActiveGameState(guiState, playerId); stateManager->attachAppState(activeState); AssetManager *assetManager = AssetManager::getSingleton(); @@ -202,64 +203,8 @@ namespace battleship{ void InGameAppState::onDettached() {} - void InGameAppState::updateUnits(Player *p){ - for (int i = 0; i < p->getNumberOfUnits(); i++){ - Unit *u = p->getUnit(i); - - if(u->isWorking()) - u->update(); - else{ - int selectedId = -1; - std::vector &units = p->getUnits(); - units.erase(units.begin() + i); - - for(int j = 0; j < maxNumGroups; j++){ - int id = -1; - std::vector &group = activeState->getUnitGroup(j); - - for(int k = 0; k < group.size() && id == -1; k++) - if(group[k] == u) - id = k; - - if(id != -1) - group.erase(group.begin() + id); - } - - const vector &selectedUnits = mainPlayer->getSelectedUnits(); - - for(int j = 0; j < selectedUnits.size() && selectedId == -1; j++) - if(selectedUnits[j] == u) - selectedId = j; - - if(selectedId != -1) - mainPlayer->deselectUnit(selectedId); - - delete u; - } - } - } - - void InGameAppState::updateProjectiles(){ - for(int i = 0; i < projectiles.size(); i++){ - Projectile *p = projectiles[i]; - - if(!p->isExploded()) - p->update(); - else{ - delete p; - projectiles.erase(projectiles.begin() + i); - } - } - } - void InGameAppState::update() { - for (Player *p : players) - if (p) { - p->update(); - updateUnits(p); - } - - updateProjectiles(); + Map::getSingleton()->update(); } void InGameAppState::toggleMainMenu() { @@ -298,7 +243,7 @@ namespace battleship{ AssetManager::getSingleton()->load(gm->getPath() + LuaManager::getSingleton()->getString("modelPrefix"), true); - for(Player *p : players) + for(Player *p : Map::getSingleton()->getPlayers()) for(Unit *u : p->getUnits()) u->reinitUnit(); } diff --git a/inGameAppState.h b/inGameAppState.h index cfb8be3..0c22b6c 100755 --- a/inGameAppState.h +++ b/inGameAppState.h @@ -28,7 +28,6 @@ namespace battleship{ void onAction(int, bool); void onAnalog(int, float); std::vector getSelectedUnits(Player*); - inline std::vector getPlayers() {return players;} inline std::vector& getProjectiles(){return projectiles;} inline void addFx(Fx fx){this->fx.push_back(fx);} inline void addProjectile(Projectile *p){projectiles.push_back(p);} @@ -98,7 +97,6 @@ namespace battleship{ MainMenuButton *mainMenuButton; ExitButton *exitButton; bool isMainMenuActive = false; - std::vector players; std::vector difficultyLevels, factions, modelPaths; std::vector projectiles; std::vector fx; @@ -109,8 +107,6 @@ namespace battleship{ GuiAppState* guiState; void toggleMainMenu(); - void updateUnits(Player*); - void updateProjectiles(); public: inline void setResumeButton(ResumeButton *r){this->resumeButton = r;} inline void setConsoleButton(ConsoleButton *c){this->consoleButton = c;} diff --git a/map.cpp b/map.cpp index 70f601f..4bf1769 100755 --- a/map.cpp +++ b/map.cpp @@ -7,6 +7,7 @@ #include #include "map.h" +#include "player.h" #include "pathfinder.h" #include "gameManager.h" #include "defConfigs.h" @@ -27,6 +28,11 @@ namespace battleship{ return map; } + void Map::update(){ + for(Player *p : players) + p->update(); + } + void Map::loadSkybox(LuaManager *luaManager){ int numPaths = 6; string skyTable = "skybox", basePath = GameManager::getSingleton()->getPath() + "Models/Maps/" + mapName + "/"; diff --git a/map.h b/map.h index 92be68a..327c7dc 100755 --- a/map.h +++ b/map.h @@ -18,6 +18,8 @@ namespace vb01{ } namespace battleship{ + class Player; + struct Cell{ bool land, impassible; vb01::Vector3 pos; @@ -50,7 +52,7 @@ namespace battleship{ public: static Map* getSingleton(); ~Map(){} - void update(){} + void update(); void load(std::string, bool = false); void unload(); int getCellId(vb01::Vector3, int); @@ -60,12 +62,17 @@ namespace battleship{ inline int getNumTerrainObjects(){return terrainObjects.size();} inline vb01::Node* getNodeParent(){return nodeParent;} inline vb01::Vector3 getCellSize(){return cellSize;} + inline std::vector getPlayers() {return players;} + inline Player* getPlayer(int i){return players[i];} + inline void addPlayer(Player *p){players.push_back(p);} + inline int getNumPlayers(){return players.size();} private: std::string mapTable = "map"; vb01::Node *nodeParent = nullptr; std::string mapName; std::vector terrainObjects; vb01::Vector3 cellSize; + std::vector players; Map(){} void preprareScene(); diff --git a/player.cpp b/player.cpp index 7bf45e6..380023a 100755 --- a/player.cpp +++ b/player.cpp @@ -23,6 +23,9 @@ namespace battleship{ void Player::update() { LuaManager *lm = LuaManager::getSingleton(); lm->executeCode("players[" + to_string(id + 1) + "]:update()"); + + for(Unit *u : units) + u->update(); } void Player::issueOrder(Order::TYPE type, vector targets, bool append){ diff --git a/projectile.cpp b/projectile.cpp index 74ace5a..8bfeb10 100755 --- a/projectile.cpp +++ b/projectile.cpp @@ -9,11 +9,12 @@ #include #include +#include "map.h" +#include "unit.h" +#include "util.h" #include "projectile.h" #include "defConfigs.h" #include "inGameAppState.h" -#include "unit.h" -#include "util.h" #include "explosion.h" using namespace std; @@ -104,16 +105,15 @@ namespace battleship{ void Projectile::explode(Node *collNode) { exploded = true; - StateManager *stateManager = GameManager::getSingleton()->getStateManager(); - vector players = ((InGameAppState*) stateManager->getAppStateByType((int)AppStateType::IN_GAME_STATE))->getPlayers(); - for (Player *p : players) { + for (Player *p : Map::getSingleton()->getPlayers()) { for (Unit *u : p->getUnits()) if (collNode == u->getNode()) u->takeDamage(damage); } - InGameAppState *inGameState = ((InGameAppState*)stateManager->getAppStateByType((int)AppStateType::IN_GAME_STATE)); + StateManager *sm = GameManager::getSingleton()->getStateManager(); + InGameAppState *inGameState = ((InGameAppState*)sm->getAppStateByType((int)AppStateType::IN_GAME_STATE)); if(id == 8) detonateTorpedo(inGameState, pos);