From a3e40d7810e3742b2833beeb1931cf2135a37e2e Mon Sep 17 00:00:00 2001 From: devZoGok Date: Wed, 1 Nov 2023 09:32:55 +0200 Subject: [PATCH] C++ - Lua player syncing refactoring --- Assets/Scripts/Core/main.lua | 4 +++- activeGameState.cpp | 12 +++++++++--- game.cpp | 8 ++++++-- playButton.cpp | 2 +- player.cpp | 12 +++++++++--- player.h | 12 +++++++----- 6 files changed, 35 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/Core/main.lua b/Assets/Scripts/Core/main.lua index 67aa084..735df3e 100644 --- a/Assets/Scripts/Core/main.lua +++ b/Assets/Scripts/Core/main.lua @@ -1 +1,3 @@ -players = {} +game = { + players = {} +} diff --git a/activeGameState.cpp b/activeGameState.cpp index 8d28ff6..d8fe016 100755 --- a/activeGameState.cpp +++ b/activeGameState.cpp @@ -334,9 +334,15 @@ namespace battleship{ if(selectingPatrolPoints){ castRayToTerrain(); - if(!shiftPressed){ - issueOrder(Order::TYPE::PATROL, targets, shiftPressed); - selectingPatrolPoints = false; + if(!(targets.empty() || selectingPatrolPoints)){ + Order::TYPE type = Order::TYPE::MOVE; + + if(controlPressed || (targets[0].unit && targets[0].unit->getPlayer()->getTeam() != mainPlayer->getTeam())) + type = Order::TYPE::ATTACK; + else if(ufCtr->isPlacingFrames() && !selectingDestOrient) + type = Order::TYPE::BUILD; + + issueOrder(type, shiftPressed); } } else{ diff --git a/game.cpp b/game.cpp index 9ffc652..2c62c3e 100644 --- a/game.cpp +++ b/game.cpp @@ -30,8 +30,12 @@ namespace battleship{ } void Game::update(){ - for(Player *p : players) - p->update(); + for(int i = 0; i < players.size(); i++){ + players[i]->update(); + + if(players[i]->isCpuPlayer()) + generateView().script("game.players[" + to_string(i + 1) + "]:update()"); + } for(Projectile *proj : projectiles) proj->update(); diff --git a/playButton.cpp b/playButton.cpp index ecf803e..71a57dc 100644 --- a/playButton.cpp +++ b/playButton.cpp @@ -38,7 +38,7 @@ namespace battleship{ int numPlayers = map->getNumSpawnPoints(); for(int i = 0; i < numPlayers; i++){ - Player *player = new Player(0, 0, 0); + Player *player = new Player(0, 0, i + 1, false); map->loadPlayerGameObjects(player); Game::getSingleton()->addPlayer(player); } diff --git a/player.cpp b/player.cpp index d9dfb17..5f45b9d 100755 --- a/player.cpp +++ b/player.cpp @@ -11,15 +11,21 @@ namespace battleship{ using namespace gameBase; using namespace std; - Player::Player(int diff, int fac, int i, Vector3 sp) : difficulty(diff), faction(fac), id(i), spawnPoint(sp) { - //SOL_LUA_STATE.script("players[" + to_string(id + 1) + "] = Player:new({id = " + to_string(id + 1) + "})"); + Player::Player(int diff, int fac, int t, bool cpuPl, Vector3 sp) : difficulty(diff), faction(fac), team(t), cpuPlayer(cpuPl), spawnPoint(sp) { + sol::state_view SOL_LUA_VIEW = generateView(); + SOL_LUA_VIEW.script("numPlayers = #game.players"); + int numPlayers = SOL_LUA_VIEW["numPlayers"]; + SOL_LUA_VIEW.script("game.players[" + to_string(numPlayers + 1) + "] = Player:new({id = " + to_string(numPlayers + 1) + "})"); } Player::~Player() { } + void Player::syncLuaPlayer(){ + } + void Player::update() { - //SOL_LUA_STATE.script("players[" + to_string(id + 1) + "]:update()"); + syncLuaPlayer(); for(Unit *u : units) u->update(); diff --git a/player.h b/player.h index a7c8968..582b2b3 100755 --- a/player.h +++ b/player.h @@ -12,7 +12,7 @@ namespace battleship{ class Player { public: - Player(int, int, int, vb01::Vector3 = vb01::Vector3::VEC_ZERO); + Player(int, int, int, bool = true, vb01::Vector3 = vb01::Vector3::VEC_ZERO); ~Player(); void update(); void issueOrder(Order::TYPE, vb01::Vector3, std::vector, bool); @@ -32,11 +32,10 @@ namespace battleship{ inline void addResourceDeposit(ResourceDeposit *rd){resourceDeposits.push_back(rd);} inline Unit* getUnit(int i){return units[i];} inline std::vector& getUnits(){return units;} - inline void setId(int i){id=i;} - inline int getId(){return id;} + inline void setTeam(int t){team = t;} + inline int getTeam(){return team;} inline int getNumberOfUnits(){return units.size();} inline int getFaction(){return faction;} - inline int getSide(){return side;} inline vb01::Vector3 getSpawnPoint(){return spawnPoint;} inline int getRefineds(){return refineds;} inline void setRefineds(int ref){this->refineds = ref;} @@ -47,14 +46,17 @@ namespace battleship{ inline int getResearch(){return research;} inline void setResearch(int r){this->research = r;} inline void addResearch(int r){this->research += r;} + inline bool isCpuPlayer(){return cpuPlayer;} private: - int refineds = 0, wealth = 0, research = 0, faction, difficulty,side,id; + bool cpuPlayer = false; + int refineds = 0, wealth = 0, research = 0, faction, difficulty, team; std::vector units; std::vector projectiles; std::vector resourceDeposits; vb01::Vector3 spawnPoint; int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3); + void syncLuaPlayer(); }; }