From b5891b28f58da9be1e8211d2453383e5c0d3852c Mon Sep 17 00:00:00 2001 From: devZoGok Date: Fri, 7 Feb 2025 21:26:28 +0200 Subject: [PATCH] unit frames placed at coresponding point on the map when rotating before move orders --- activeGameState.cpp | 15 +++++++++------ gameObjectFrameController.cpp | 8 ++++---- gameObjectFrameController.h | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/activeGameState.cpp b/activeGameState.cpp index 51cbfa5..7d21344 100755 --- a/activeGameState.cpp +++ b/activeGameState.cpp @@ -162,13 +162,15 @@ namespace battleship{ GameObjectFrameController *fc = GameObjectFrameController::getSingleton(); if(!selectingDestOrient && orderMouseClicked && !selectedUnits.empty() && getTime() - lastOrderMouseClicked > 100){ - selectingDestOrient = true; + if(targets.empty()) castRayToTerrain(); + + for(int i = 0; i < selectedUnits.size(); i++){ + fc->addGameObjectFrame(GameObjectFrame(selectedUnits[i]->getId(), GameObject::Type::UNIT)); + fc->placeGameObjectFrame(fc->getNumGameObjectFrames() - 1, targets[0].pos, selectedUnits[i]->getWidth(), selectedUnits[i]->getLength()); + } - fc->setPlacingFrames(true); fc->setRotatingFrames(true); - - for(Unit *unit : selectedUnits) - fc->addGameObjectFrame(GameObjectFrame(unit->getId(), GameObject::Type::UNIT)); + selectingDestOrient = true; } else if(selectingDestOrient && !orderMouseClicked){ selectingDestOrient = false; @@ -597,7 +599,8 @@ namespace battleship{ issueOrder(Order::TYPE::BUILD, targets, shiftPressed); } else if(!canSelect){ - castRayToTerrain(); + if(targets.empty()) castRayToTerrain(); + issueOrder(Order::TYPE::MOVE, targets, shiftPressed); } } diff --git a/gameObjectFrameController.cpp b/gameObjectFrameController.cpp index 926466c..7a65ba1 100644 --- a/gameObjectFrameController.cpp +++ b/gameObjectFrameController.cpp @@ -52,6 +52,7 @@ namespace battleship{ } } + //TODO specify what to snap the frame to void GameObjectFrameController::snapToObj(GameObjectFrame &s, GameObject::Type type, int unitId, float maxDist){ if(s.getType() == GameObject::Type::UNIT && s.getId() == unitId){ s.status = GameObjectFrame::NOT_PLACEABLE; @@ -101,9 +102,7 @@ namespace battleship{ } GameObjectFrame &s = gameObjectFrames[id]; - - if(!rotatingStructure) - s.placeAt(newPos); + s.placeAt(newPos); s.status = (unevenness < maxUnevenness ? GameObjectFrame::PLACEABLE : GameObjectFrame::NOT_PLACEABLE); snapToObj(s, GameObject::Type::UNIT, 20, 3); @@ -138,7 +137,8 @@ namespace battleship{ newPos = paintSelectRowStart + dir * hypothenuse * i; } - placeGameObjectFrame(i, newPos, width, length); + + if(!rotatingStructure) placeGameObjectFrame(i, newPos, width, length); } } diff --git a/gameObjectFrameController.h b/gameObjectFrameController.h index a431c68..aaf83fa 100644 --- a/gameObjectFrameController.h +++ b/gameObjectFrameController.h @@ -21,6 +21,7 @@ namespace battleship{ void removeGameObjectFrame(int); void removeGameObjectFrames(); void rotateGameObjectFrames(float); + void placeGameObjectFrame(int, vb01::Vector3, float, float); inline int getNumGameObjectFrames(){return gameObjectFrames.size();} inline void addGameObjectFrame(GameObjectFrame u){gameObjectFrames.push_back(u);} inline GameObjectFrame& getGameObjectFrame(int i){return gameObjectFrames[i];} @@ -34,7 +35,6 @@ namespace battleship{ private: GameObjectFrameController(){} void paintSelect(vb01::Vector3, float, float); - void placeGameObjectFrame(int, vb01::Vector3, float, float); void snapToObj(GameObjectFrame&, GameObject::Type, int, float); std::vector gameObjectFrames;