From 1999e1dad9d8f89bbed37d5e842d655694628937 Mon Sep 17 00:00:00 2001 From: devZoGok Date: Fri, 21 Nov 2025 20:24:10 +0200 Subject: [PATCH] checking for rectangle check for buildable structures --- external/vb01 | 2 +- gameObjectFrame.h | 1 + gameObjectFrameController.cpp | 36 +++++++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/external/vb01 b/external/vb01 index 8acc008..91a3e00 160000 --- a/external/vb01 +++ b/external/vb01 @@ -1 +1 @@ -Subproject commit 8acc008fa42cd6f585d71785246c6be410520a27 +Subproject commit 91a3e00265cc75f420b9f6db1bd5192e7c3b47f4 diff --git a/gameObjectFrame.h b/gameObjectFrame.h index f9b5924..87407c4 100644 --- a/gameObjectFrame.h +++ b/gameObjectFrame.h @@ -12,6 +12,7 @@ namespace battleship{ GameObjectFrame(int i, GameObject::Type t, vb01::Vector3 pos = vb01::Vector3::VEC_ZERO, vb01::Quaternion rot = vb01::Quaternion::QUAT_W) : GameObject(t, i, nullptr, pos, rot) { initModel(false); + initProperties(); } ~GameObjectFrame(){} void destroy(){destroyModel();} diff --git a/gameObjectFrameController.cpp b/gameObjectFrameController.cpp index 51e6020..82a816a 100644 --- a/gameObjectFrameController.cpp +++ b/gameObjectFrameController.cpp @@ -103,6 +103,42 @@ namespace battleship{ GameObjectFrame &s = gameObjectFrames[id]; s.placeAt(newPos); + vector units; + + for(Player *player : Game::getSingleton()->getPlayers()){ + vector u = player->getUnits(); + units.insert(units.end(), u.begin(), u.end()); + } + + for(Unit *unit : units){ + Vector3 gm1Pos = s.getPos(); + Vector3 gm1Dir = s.getDirVec(); + gm1Dir = Vector3(gm1Dir.x, 0, gm1Dir.z).norm(); + + Vector3 gm2Pos = unit->getPos(); + + Vector3 gm2Dir = unit->getDirVec(); + gm2Dir = Vector3(gm2Dir.x, 0, gm2Dir.z).norm(); + + Vector3 gm2Left = unit->getLeftVec(); + gm2Left = Vector3(gm2Left.x, 0, gm2Left.z).norm(); + + bool intersects = rectanglesIntersect( + Vector2(gm1Pos.x, gm1Pos.z), + Vector2(gm1Dir.x, gm1Dir.z), + Vector2(s.getWidth(), s.getLength()), + Vector2(gm2Pos.x, gm2Pos.z), + Vector2(gm2Dir.x, gm2Dir.z), + Vector2(gm2Left.x, gm2Left.z), + Vector2(unit->getWidth(), unit->getLength()) + ); + + if(intersects){ + placeable = false; + break; + } + } + snapToObj(s, GameObject::Type::UNIT, 20, 3); Vector4 color;