From ce52a85854b63a0a954b70fcfaf5a529057b10a4 Mon Sep 17 00:00:00 2001 From: devZoGok Date: Tue, 25 Nov 2025 08:29:15 +0200 Subject: [PATCH] max unevenness property moved to unit configuration --- Assets/Scripts/GameObjects/Units/unitData.lua | 14 ++++++++++++ external/vb01 | 2 +- gameObject.cpp | 5 ++++- gameObject.h | 3 ++- gameObjectFrameController.cpp | 22 +++++++++---------- 5 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/GameObjects/Units/unitData.lua b/Assets/Scripts/GameObjects/Units/unitData.lua index 50977c5..73426ff 100644 --- a/Assets/Scripts/GameObjects/Units/unitData.lua +++ b/Assets/Scripts/GameObjects/Units/unitData.lua @@ -145,6 +145,7 @@ units = { unitClass = UnitClass.WAR_MECH, unitType = UnitType.LAND, armor = {ArmorType.MECHANIC}, + maxUnevenness = .5, isVehicle = true, health = 500, buildTime = 1000, @@ -200,6 +201,7 @@ units = { unitClass = UnitClass.TANK, unitType = UnitType.LAND, armor = {ArmorType.STEEL}, + maxUnevenness = .5, isVehicle = true, alignToSurface = true, health = 500, @@ -257,6 +259,7 @@ units = { unitClass = UnitClass.ARTILLERY, unitType = UnitType.LAND, armor = {ArmorType.MECHANIC}, + maxUnevenness = .5, alignToSurface = true, isVehicle = true, health = 500, @@ -301,6 +304,7 @@ units = { unitClass = UnitClass.ENGINEER, unitType = UnitType.HOVER, armor = {ArmorType.MECHANIC}, + maxUnevenness = .5, isVehicle = true, health = 500, hackRange = 200, @@ -326,6 +330,7 @@ units = { { unitClass = UnitClass.TRANSPORT, unitType = UnitType.HOVER, + maxUnevenness = .5, alignToSurface = true, isVehicle = true, health = 500, @@ -353,6 +358,7 @@ units = { unitClass = UnitClass.TRANSPORT, unitType = UnitType.HOVER, armor = {ArmorType.MECHANIC}, + maxUnevenness = .5, alignToSurface = true, isVehicle = true, health = 500, @@ -385,6 +391,7 @@ units = { unitClass = UnitClass.RESOURCE_ROVER, unitType = UnitType.HOVER, armor = {ArmorType.CAST}, + maxUnevenness = .5, alignToSurface = true, capacity = 3000, loadRate = 1, @@ -931,6 +938,7 @@ units = { }, unitClass = UnitClass.LAND_FACTORY, unitType = UnitType.LAND, + maxUnevenness = .5, isVehicle = false, health = 500, buildTime = 1000, @@ -972,6 +980,7 @@ units = { {buttonType = ButtonType.BUY_RESEARCH, name = 'Buy rsch', trigger = 75}, {buttonType = ButtonType.SELL_RESEARCH, name = 'Sell rsch', trigger = 76} }, + maxUnevenness = .5, isVehicle = false, health = 500, buildTime = 1000, @@ -990,6 +999,7 @@ units = { { unitClass = UnitClass.LAB, unitType = UnitType.LAND, + maxUnevenness = .5, abilityButtons = {{buttonType = ButtonType.ACTIVE_GAME_STATE, name = 'Tech tree', guiScreen = 'techTree.lua'}}, isVehicle = false, health = 500, @@ -1056,6 +1066,7 @@ units = { }, unitClass = UnitClass.POINT_DEFENSE, unitType = UnitType.LAND, + maxUnevenness = .5, isVehicle = false, health = 500, buildTime = 1000, @@ -1075,6 +1086,7 @@ units = { { unitClass = UnitClass.EXTRACTOR, unitType = UnitType.LAND, + maxUnevenness = .5, isVehicle = false, health = 500, buildTime = 1000, @@ -1095,6 +1107,7 @@ units = { { unitClass = UnitClass.REFINERY, unitType = UnitType.LAND, + maxUnevenness = .5, isVehicle = false, health = 500, buildTime = 1000, @@ -1114,6 +1127,7 @@ units = { buildableUnits = {{id = UnitId.ENGINEER, buildable = true, trigger = 69}}, unitClass = UnitClass.FORT, unitType = UnitType.LAND, + maxUnevenness = .5, isVehicle = false, health = 1000, buildTime = 1000, diff --git a/external/vb01 b/external/vb01 index 91a3e00..d4d188e 160000 --- a/external/vb01 +++ b/external/vb01 @@ -1 +1 @@ -Subproject commit 91a3e00265cc75f420b9f6db1bd5192e7c3b47f4 +Subproject commit d4d188eef722eed15a3b4c7db07c3fc9aab92937 diff --git a/gameObject.cpp b/gameObject.cpp index 23fb3ce..ac75691 100644 --- a/gameObject.cpp +++ b/gameObject.cpp @@ -104,7 +104,10 @@ namespace battleship{ } void GameObject::initProperties(){ - sol::table sizeTable = generateView()[GameObject::getGameObjTableName()][id + 1]["size"]; + sol::table objTable = generateView()[GameObject::getGameObjTableName()][id + 1]; + maxUnevenness = objTable["maxUnevenness"].get_or(0); + + sol::table sizeTable = objTable["size"]; width = sizeTable["x"]; height = sizeTable["y"]; length = sizeTable["z"]; diff --git a/gameObject.h b/gameObject.h index e88e899..aeb501c 100644 --- a/gameObject.h +++ b/gameObject.h @@ -30,6 +30,7 @@ namespace battleship{ static sf::Sound* prepareSfx(sf::SoundBuffer*, std::string); bool pointWithinObj(vb01::Vector3, float = 0, float = 0, bool = false, float = 0); void changePlayer(Player *newPlayer); + inline float getMaxUnevenness(){return maxUnevenness;} inline vb01::Vector2 getScreenPos(){return screenPos;} inline vb01::Vector3 getCorner(int i){return corners[i];} inline bool isSelectable(){return selectable;} @@ -69,7 +70,7 @@ namespace battleship{ vb01::Vector2 screenPos; vb01::Quaternion rot; bool selectable = false, debugging = false, remove = false; - float width, height, length; + float width, height, length, maxUnevenness; }; } diff --git a/gameObjectFrameController.cpp b/gameObjectFrameController.cpp index bdd5c24..ecabcca 100644 --- a/gameObjectFrameController.cpp +++ b/gameObjectFrameController.cpp @@ -75,8 +75,6 @@ namespace battleship{ } } - //TODO implement terrain evenness check - //TODO factor out literal values //TODO fix which unit frames light green or red void GameObjectFrameController::checkPlacement(GameObjectFrame &s){ Map *map = Map::getSingleton(); @@ -84,23 +82,19 @@ namespace battleship{ MeshData::Vertex *verts = meshData.vertices; int numVerts = 3 * meshData.numTris; - float maxUnevenness = .5, unevenness = 0; bool placeable = true; - for(int i = 0; i < numVerts; i++){ - float diffX = fabs(s.getPos().x - verts[i].pos->x); - float diffY = fabs(s.getPos().y - verts[i].pos->y); - float diffZ = fabs(s.getPos().z - verts[i].pos->z); + if(s.getMaxUnevenness() > 0) + for(int i = 0; i < numVerts; i++){ + float diffX = fabs(s.getPos().x - verts[i].pos->x); + float diffY = fabs(s.getPos().y - verts[i].pos->y); + float diffZ = fabs(s.getPos().z - verts[i].pos->z); - if(diffX < 0.5 * s.getWidth() && diffZ < 0.5 * s.getLength() && diffY > unevenness){ - unevenness = diffY; - - if(unevenness > maxUnevenness){ + if(diffX < 0.5 * s.getWidth() && diffZ < 0.5 * s.getLength() && diffY > s.getMaxUnevenness()){ placeable = false; break; } } - } vector units; @@ -114,6 +108,9 @@ namespace battleship{ Vector3 gm1Dir = s.getDirVec(); gm1Dir = Vector3(gm1Dir.x, 0, gm1Dir.z).norm(); + Vector3 gm1Left = s.getLeftVec(); + gm1Left = Vector3(gm1Left.x, 0, gm1Left.z).norm(); + Vector3 gm2Pos = unit->getPos(); Vector3 gm2Dir = unit->getDirVec(); @@ -125,6 +122,7 @@ namespace battleship{ bool intersects = rectanglesIntersect( Vector2(gm1Pos.x, gm1Pos.z), Vector2(gm1Dir.x, gm1Dir.z), + Vector2(gm1Left.x, gm1Left.z), Vector2(s.getWidth(), s.getLength()), Vector2(gm2Pos.x, gm2Pos.z), Vector2(gm2Dir.x, gm2Dir.z),