diff --git a/activeGameState.cpp b/activeGameState.cpp index 66ac08c..9c6d3c1 100755 --- a/activeGameState.cpp +++ b/activeGameState.cpp @@ -311,10 +311,8 @@ namespace battleship{ if(targets.empty()) castRayToTerrain(); if(!buildableStructSelected) - 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()); - } + for(int i = 0; i < selectedUnits.size(); i++) + fc->addGameObjectFrame(GameObjectFrame(selectedUnits[i]->getId(), GameObject::Type::UNIT, targets[0].pos)); selectingDestOrient = true; fc->setRotating(true); diff --git a/gameObjectFrame.h b/gameObjectFrame.h index 87407c4..3ea600b 100644 --- a/gameObjectFrame.h +++ b/gameObjectFrame.h @@ -13,6 +13,8 @@ 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(); + placeAt(pos); + orientAt(rot); } ~GameObjectFrame(){} void destroy(){destroyModel();} diff --git a/gameObjectFrameController.cpp b/gameObjectFrameController.cpp index 82a816a..3827579 100644 --- a/gameObjectFrameController.cpp +++ b/gameObjectFrameController.cpp @@ -76,7 +76,7 @@ namespace battleship{ //TODO implement terrain evenness check //TODO factor out literal values //TODO fix which unit frames light green or red - void GameObjectFrameController::placeGameObjectFrame(int id, Vector3 newPos, float width, float length){ + void GameObjectFrameController::checkPlacement(GameObjectFrame &s){ Map *map = Map::getSingleton(); MeshData meshData = map->getNodeParent()->getChild(0)->getMesh(0)->getMeshBase(); MeshData::Vertex *verts = meshData.vertices; @@ -86,11 +86,11 @@ namespace battleship{ bool placeable = true; for(int i = 0; i < numVerts; i++){ - float diffX = fabs(newPos.x - verts[i].pos->x); - float diffY = fabs(newPos.y - verts[i].pos->y); - float diffZ = fabs(newPos.z - verts[i].pos->z); + 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 * width && diffZ < 0.5 * length && diffY > unevenness){ + if(diffX < 0.5 * s.getWidth() && diffZ < 0.5 * s.getLength() && diffY > unevenness){ unevenness = diffY; if(unevenness > maxUnevenness){ @@ -100,12 +100,9 @@ namespace battleship{ } } - GameObjectFrame &s = gameObjectFrames[id]; - s.placeAt(newPos); - vector units; - for(Player *player : Game::getSingleton()->getPlayers()){ + for(Player *player : Game::getSingleton()->getPlayers(true)){ vector u = player->getUnits(); units.insert(units.end(), u.begin(), u.end()); } @@ -139,8 +136,6 @@ namespace battleship{ } } - snapToObj(s, GameObject::Type::UNIT, 20, 3); - Vector4 color; if(placeable){ @@ -226,7 +221,9 @@ namespace battleship{ } if(!rotating && (placingOnSurface || placingVertically)) - placeGameObjectFrame(i, placementPos, width, length); + gameObjectFrames[i].placeAt(placementPos); + + checkPlacement(gameObjectFrames[i]); } } diff --git a/gameObjectFrameController.h b/gameObjectFrameController.h index 488c7df..c0c1f74 100644 --- a/gameObjectFrameController.h +++ b/gameObjectFrameController.h @@ -21,7 +21,7 @@ namespace battleship{ void removeGameObjectFrame(int); void removeGameObjectFrames(); void rotateGameObjectFrames(float); - void placeGameObjectFrame(int, vb01::Vector3, float, float); + void checkPlacement(GameObjectFrame&); inline int getNumGameObjectFrames(){return gameObjectFrames.size();} inline void addGameObjectFrame(GameObjectFrame u){gameObjectFrames.push_back(u);} inline GameObjectFrame& getGameObjectFrame(int i){return gameObjectFrames[i];}