adding choosable and civilian players separately

This commit is contained in:
devZoGok
2025-07-06 15:05:28 +03:00
parent f072ad1586
commit 9a2db1d0ba
4 changed files with 52 additions and 43 deletions
+1 -1
View File
@@ -62,7 +62,7 @@ namespace battleship{
Map *map = Map::getSingleton(); Map *map = Map::getSingleton();
map->load(mapName); map->load(mapName);
map->loadPlayerGameObjects(); map->loadPlayersGameObjects();
Camera *cam = Root::getSingleton()->getCamera(); Camera *cam = Root::getSingleton()->getCamera();
cam->setPosition(Map::getSingleton()->getSpawnPoint(playerId) + Vector3(1, 1, 1) * configData::CAMERA_DISTANCE); cam->setPosition(Map::getSingleton()->getSpawnPoint(playerId) + Vector3(1, 1, 1) * configData::CAMERA_DISTANCE);
+46 -39
View File
@@ -420,52 +420,59 @@ namespace battleship{
} }
} }
//TODO move minimap loading elsewhere void Map::loadPlayerGameObjects(Player *player, sol::table playerTbl){
void Map::loadPlayerGameObjects(){ string resDepInd = "resourceDeposits";
vector<Player*> players = Game::getSingleton()->getPlayers(true);
sol::state_view SOL_LUA_VIEW = generateView(); sol::state_view SOL_LUA_VIEW = generateView();
string playerInd = "players"; sol::table resDepTbl = playerTbl["resourceDeposits"];
int numNpcObjs = resDepTbl.size();
for(int i = 0; i < players.size(); i++){ for(int j = 0; j < numNpcObjs; j++){
string resDepInd = "resourceDeposits"; sol::table npcObjTable = resDepTbl[j + 1];
SOL_LUA_VIEW.script("numResourceDeposits = #" + mapTable + "." + playerInd + "[" + to_string(i + 1) + "]." + resDepInd); int id = npcObjTable["id"];
int numNpcObjs = SOL_LUA_VIEW["numResourceDeposits"];
Player *player = players[i];
for(int j = 0; j < numNpcObjs; j++){ sol::table posTable = npcObjTable["pos"];
sol::table npcObjTable = SOL_LUA_VIEW[mapTable][playerInd][i + 1][resDepInd][j + 1]; Vector3 pos = Vector3(posTable["x"], posTable["y"], posTable["z"]);
int id = npcObjTable["id"];
sol::table posTable = npcObjTable["pos"]; sol::table rotTable = npcObjTable["rot"];
Vector3 pos = Vector3(posTable["x"], posTable["y"], posTable["z"]); Quaternion rot = Quaternion(rotTable["w"], rotTable["x"], rotTable["y"], rotTable["z"]);
int initAmmount = resDepTbl[j + 1]["initAmmount"];
sol::table rotTable = npcObjTable["rot"]; player->addResourceDeposit(GameObjectFactory::createResourceDeposit(player, id, pos, rot, initAmmount));
Quaternion rot = Quaternion(rotTable["w"], rotTable["x"], rotTable["y"], rotTable["z"]);
int initAmmount = SOL_LUA_VIEW[mapTable][playerInd][i + 1][resDepInd][j + 1]["initAmmount"];
player->addResourceDeposit(GameObjectFactory::createResourceDeposit(player, id, pos, rot, initAmmount));
}
//int spawnPointId = SOL_LUA_STATE[mapTable]["spawnPointInd"][i + 1][spawnPointId];
string unitInd = "units";
SOL_LUA_VIEW.script("numUnits = #" + mapTable + "." + playerInd + "[" + to_string(i + 1) + "]." + unitInd);
int numUnits = SOL_LUA_VIEW["numUnits"];
for(int j = 0; j < numUnits; j++){
sol::table unitTable = SOL_LUA_VIEW[mapTable][playerInd][i + 1][unitInd][j + 1];
string posInd = "pos";
Vector3 pos = Vector3(unitTable[posInd]["x"], unitTable[posInd]["y"], unitTable[posInd]["z"]);
string rotInd = "rot";
Quaternion rot = Quaternion(unitTable[rotInd]["w"], unitTable[rotInd]["x"], unitTable[rotInd]["x"], unitTable[rotInd]["x"]);
int id = unitTable["id"];
int buildStatus = unitTable["buildStatus"].get_or(0);
player->addUnit(GameObjectFactory::createUnit(player, id, pos, rot, buildStatus));
}
} }
string unitInd = "units";
sol::table unitsTbl = playerTbl["units"];
int numUnits = unitsTbl.size();
for(int j = 0; j < numUnits; j++){
sol::table unitTable = unitsTbl[j + 1];
string posInd = "pos";
Vector3 pos = Vector3(unitTable[posInd]["x"], unitTable[posInd]["y"], unitTable[posInd]["z"]);
string rotInd = "rot";
Quaternion rot = Quaternion(unitTable[rotInd]["w"], unitTable[rotInd]["x"], unitTable[rotInd]["x"], unitTable[rotInd]["x"]);
int id = unitTable["id"];
int buildStatus = unitTable["buildStatus"].get_or(0);
player->addUnit(GameObjectFactory::createUnit(player, id, pos, rot, buildStatus));
}
}
//TODO move minimap loading elsewhere
void Map::loadPlayersGameObjects(){
Game *game = Game::getSingleton();
vector<Player*> choosablePlayers = game->getPlayers(false);
sol::state_view SOL_LUA_VIEW = generateView();
for(int i = 0; i < choosablePlayers.size(); i++){
sol::table playerTbl = SOL_LUA_VIEW[mapTable]["choosablePlayers"][i + 1];
loadPlayerGameObjects(choosablePlayers[i], playerTbl);
}
sol::table civPlayerTbl = SOL_LUA_VIEW[mapTable]["civilianPlayer"];
loadPlayerGameObjects(game->getCivilianPlayer(), civPlayerTbl);
Minimap::getSingleton()->load(); Minimap::getSingleton()->load();
} }
+4 -2
View File
@@ -8,6 +8,8 @@
#include <vector.h> #include <vector.h>
#include <util.h> #include <util.h>
#include <solUtil.h>
namespace vb01{ namespace vb01{
class Model; class Model;
class Material; class Material;
@@ -76,7 +78,7 @@ namespace battleship{
std::vector<vb01::RayCaster::CollisionResult> raycastTerrain(vb01::Vector3, vb01::Vector3, bool); std::vector<vb01::RayCaster::CollisionResult> raycastTerrain(vb01::Vector3, vb01::Vector3, bool);
int getCellId(vb01::Vector3, bool = true); int getCellId(vb01::Vector3, bool = true);
bool isPointWithinTerrainObject(vb01::Vector3, int); bool isPointWithinTerrainObject(vb01::Vector3, int);
void loadPlayerGameObjects(); void loadPlayersGameObjects();
int getNumMapSpawnPoints(std::string = ""); int getNumMapSpawnPoints(std::string = "");
std::vector<int> getSurroundingCells(vb01::Vector3, int); std::vector<int> getSurroundingCells(vb01::Vector3, int);
void blockCells(Unit*); void blockCells(Unit*);
@@ -111,6 +113,7 @@ namespace battleship{
void loadLights(); void loadLights();
void loadSkybox(); void loadSkybox();
void loadCells(); void loadCells();
void loadPlayerGameObjects(Player*, sol::table);
void loadTerrainObject(int); void loadTerrainObject(int);
void unloadTerrainObjects(); void unloadTerrainObjects();
void unloadCells(); void unloadCells();
@@ -121,5 +124,4 @@ namespace battleship{
template<typename T> int bsearch(std::vector<T>, T, float); template<typename T> int bsearch(std::vector<T>, T, float);
}; };
} }
#endif #endif
+1 -1
View File
@@ -73,7 +73,7 @@ namespace battleship{
for(int i = 0; i < numPlayers; i++) for(int i = 0; i < numPlayers; i++)
game->addPlayer(new Player(0, 0, 0, Vector3(1, 1, 1))); game->addPlayer(new Player(0, 0, 0, Vector3(1, 1, 1)));
map->loadPlayerGameObjects(); map->loadPlayersGameObjects();
} }
} }