added color change upon changing a unit's player

This commit is contained in:
devZoGok
2025-06-24 12:23:56 +03:00
parent 7c4d26e08c
commit 86f73ca279
5 changed files with 46 additions and 35 deletions
+43 -16
View File
@@ -79,6 +79,29 @@ namespace battleship{
delete hitbox;
}
//TODO use a vector for the color nodes
void GameObject::useColor(Material *colorMat){
if(hitbox) model->dettachChild(hitbox);
model->setMaterial(model->getMaterial());
if(hitbox) model->attachChild(hitbox);
sol::table gameObjTable = generateView()[GameObject::getGameObjTableName()][id + 1];
sol::table colNodeTbl = gameObjTable["colorNodes"];
int numColorNodes = colNodeTbl.size();
for(int i = 0; i < numColorNodes; i++){
string name = colNodeTbl[i + 1];
Node *node = model->findDescendant(name, true);
if(!node) continue;
vector<Mesh*> meshes = node->getMeshes();
for(Mesh *mesh : meshes)
mesh->setMaterial(colorMat);
}
}
void GameObject::initProperties(){
sol::table sizeTable = generateView()[GameObject::getGameObjTableName()][id + 1]["size"];
width = sizeTable["x"];
@@ -123,22 +146,8 @@ namespace battleship{
model->setMaterial(mat);
sol::optional<sol::table> colNodeOpt = gameObjTable["colorNodes"];
if(player && colNodeOpt != sol::nullopt){
sol::table colNodeTbl = gameObjTable["colorNodes"];
int numColorNodes = colNodeTbl.size();
for(int i = 0; i < numColorNodes; i++){
string name = colNodeTbl[i + 1];
Node *node = model->findDescendant(name, true);
if(!node) continue;
vector<Mesh*> meshes = node->getMeshes();
for(Mesh *mesh : meshes)
mesh->setMaterial(player->getColorMaterial());
}
}
if(player && colNodeOpt != sol::nullopt)
useColor(player->getColorMaterial());
root->getRootNode()->attachChild(model);
}
@@ -179,6 +188,24 @@ namespace battleship{
return within;
}
//TODO improve for other game objs, too
void GameObject::changePlayer(Player *newPlayer){
vector<Unit*> &oldPlayerUnits = player->getUnits();
int oldId = -1;
for(int i = 0; i < oldPlayerUnits.size(); i++)
if(oldPlayerUnits[i] == (Unit*)this){
oldId = i;
break;
}
oldPlayerUnits.erase(oldPlayerUnits.begin() + oldId);
newPlayer->addUnit((Unit*)this);
setPlayer(newPlayer);
useColor(newPlayer->getColorMaterial());
((Unit*)this)->halt();
}
string GameObject::getGameObjTableName(){
switch(type){
case GameObject::Type::UNIT: