From 445f39825e2480241617f03e06174663f08b362d Mon Sep 17 00:00:00 2001 From: Lendemor Date: Mon, 4 Jun 2018 19:00:31 +0200 Subject: [PATCH] picking give the ID of the node owning the mesh --- src/keymapper.cpp | 2 +- src/scene/scenenode.cpp | 9 +++++++-- src/scene/scenenode.h | 6 +++++- src/test/main.cpp | 5 +++-- src/tools/resourcepack.cpp | 17 ++++++++++++++++- src/tools/resourcepack.h | 2 +- src/tools/scenepicker.cpp | 3 ++- 7 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/keymapper.cpp b/src/keymapper.cpp index bac9998..2c56149 100644 --- a/src/keymapper.cpp +++ b/src/keymapper.cpp @@ -14,6 +14,7 @@ KeyMapper::KeyMapper() : m_keymap_file("keymap.json"), m_waiting_for_input(-1) { + setID("keymapper"); // mapping between action numerical value and text value m_actions_list[DefaultKeysMap::MAIN_ACTION] = "Main Action"; m_actions_list[DefaultKeysMap::SECONDARY_ACTION] = "Secondary Action"; @@ -98,7 +99,6 @@ KeyMapper::KeyMapper() : m_keyboard_keys[sf::Keyboard::Space] = "Space"; m_keyboard_keys[sf::Keyboard::LShift]= "Left Shift"; m_keyboard_keys[sf::Keyboard::LControl] = "Left Control"; - } void KeyMapper::update() diff --git a/src/scene/scenenode.cpp b/src/scene/scenenode.cpp index d82bf79..de3c1ad 100644 --- a/src/scene/scenenode.cpp +++ b/src/scene/scenenode.cpp @@ -21,8 +21,9 @@ void SceneNode::setParent(SceneNode* parent) m_parent = parent; } -SceneNode::SceneNode(Script* script) : +SceneNode::SceneNode(std::string node_id,Script* script) : m_toDestroy(false), + m_id(node_id), m_parentVisible(true), m_visible(true), m_enabled(true), @@ -40,6 +41,10 @@ SceneNode::SceneNode(Script* script) : m_script->begin(this); } +std::string SceneNode::getID(){ + return m_id; +} + SceneNode::~SceneNode() { if(m_script != nullptr) @@ -277,7 +282,7 @@ void SceneNode::setRigidBody(btRigidBody* body) SceneNode* SceneNode::clone() { - SceneNode* node = new SceneNode(m_script); + SceneNode* node = new SceneNode(m_id,m_script); node->setMesh(getMesh()); node->setTransform(getTransform()); node->setLight(getLight()); diff --git a/src/scene/scenenode.h b/src/scene/scenenode.h index c99f174..c703cfb 100644 --- a/src/scene/scenenode.h +++ b/src/scene/scenenode.h @@ -44,6 +44,8 @@ private: std::vector m_nodesToRemove; std::vector m_nodesToAdd; + std::string m_id; + bool m_parentVisible; bool m_visible; bool m_enabled; @@ -83,7 +85,7 @@ private: public: // constructor/destructor - SceneNode(Script *script = nullptr); + SceneNode(std::string node_id = "undefined id",Script *script = nullptr); virtual ~SceneNode(); // game logic methods @@ -94,6 +96,8 @@ public: void setEnabled(bool isEnabled) { m_enabled = isEnabled; } Script* getScript(); + std::string getID(); + void setID(std::string id){m_id = id;} // methods called to access the graphic propeties of the node void setMesh(Mesh* mesh) { m_geometry.mesh = mesh; } diff --git a/src/test/main.cpp b/src/test/main.cpp index 225c395..e5dd78c 100644 --- a/src/test/main.cpp +++ b/src/test/main.cpp @@ -84,7 +84,7 @@ public: void generateTerrain(SceneTree *scene) { - SceneNode* terrainContainer = new SceneNode(); + SceneNode* terrainContainer = new SceneNode("terrain container"); TestGen gen; PBRMaterial *mat = new PBRMaterial(); mat->albedo = glm::vec3(0.1f, 0.4f, 0.2f); @@ -104,7 +104,7 @@ void generateTerrain(SceneTree *scene) { chunk->mesh->setMaterial(mat); chunk->mesh->initGL(); - SceneNode *node = new SceneNode(); + SceneNode *node = new SceneNode("terrain element"); node->setMesh(chunk->mesh); node->getGeometryNode()->modelMatrix = glm::translate(glm::scale(glm::mat4(), glm::vec3(2.f)), pos*8.f); node->setTransform(node->getGeometryNode()->modelMatrix); @@ -286,6 +286,7 @@ public: // load sandbox SceneNode* sandbox = Loader::loadMesh("sandbox.obj"); + sandbox->setID("sandbox"); btRigidBody* sandboxBody = utils::buildStaticCollider(sandbox->getGeometryNode()); sandbox->setRigidBody(sandboxBody); scene->getPhysics()->addRigidBody(sandboxBody); diff --git a/src/tools/resourcepack.cpp b/src/tools/resourcepack.cpp index dc950c7..ef04d99 100644 --- a/src/tools/resourcepack.cpp +++ b/src/tools/resourcepack.cpp @@ -251,6 +251,21 @@ MeshResource::MeshResource(): } -MeshResource::~MeshResource(){ +MeshResource::~MeshResource() +{ destroy(); } + +void MeshResource::destroy() +{ + //TODO +} + +void MeshResource::loadResource(float &progress) +{ + //TODO +} + +void MeshResource::gui(){ + ImGui::Text("TODO"); +} diff --git a/src/tools/resourcepack.h b/src/tools/resourcepack.h index c8077f6..64c8934 100644 --- a/src/tools/resourcepack.h +++ b/src/tools/resourcepack.h @@ -132,7 +132,7 @@ public: class MeshResource : public ResourceInterface { - //add metadata for mesh + //add metadata for mesh here Mesh* m_mesh; public: diff --git a/src/tools/scenepicker.cpp b/src/tools/scenepicker.cpp index e163a7f..166f73a 100644 --- a/src/tools/scenepicker.cpp +++ b/src/tools/scenepicker.cpp @@ -57,10 +57,11 @@ void ScenePicker::update() { ImGui::Text("Intersection : ( %.3f, %.3f, %.3f )", m_pickedPos.x, m_pickedPos.y, m_pickedPos.z); if(!isVisible()) setVisible(m_pickSucceeded); + ImGui::Text("Node : %s",m_pickedNode->getID().data()); } else { - ImGui::Text("No intesection"); + ImGui::Text("No intersection"); if(isVisible()) setVisible(m_pickSucceeded); } // if(ImGui::Button("Teleport"))