picking give the ID of the node owning the mesh

This commit is contained in:
Lendemor 2018-06-04 19:00:31 +02:00
parent bcc0cade80
commit 445f39825e
7 changed files with 35 additions and 9 deletions

View File

@ -14,6 +14,7 @@ KeyMapper::KeyMapper() :
m_keymap_file("keymap.json"), m_keymap_file("keymap.json"),
m_waiting_for_input(-1) m_waiting_for_input(-1)
{ {
setID("keymapper");
// mapping between action numerical value and text value // mapping between action numerical value and text value
m_actions_list[DefaultKeysMap::MAIN_ACTION] = "Main Action"; m_actions_list[DefaultKeysMap::MAIN_ACTION] = "Main Action";
m_actions_list[DefaultKeysMap::SECONDARY_ACTION] = "Secondary 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::Space] = "Space";
m_keyboard_keys[sf::Keyboard::LShift]= "Left Shift"; m_keyboard_keys[sf::Keyboard::LShift]= "Left Shift";
m_keyboard_keys[sf::Keyboard::LControl] = "Left Control"; m_keyboard_keys[sf::Keyboard::LControl] = "Left Control";
} }
void KeyMapper::update() void KeyMapper::update()

View File

@ -21,8 +21,9 @@ void SceneNode::setParent(SceneNode* parent)
m_parent = parent; m_parent = parent;
} }
SceneNode::SceneNode(Script* script) : SceneNode::SceneNode(std::string node_id,Script* script) :
m_toDestroy(false), m_toDestroy(false),
m_id(node_id),
m_parentVisible(true), m_parentVisible(true),
m_visible(true), m_visible(true),
m_enabled(true), m_enabled(true),
@ -40,6 +41,10 @@ SceneNode::SceneNode(Script* script) :
m_script->begin(this); m_script->begin(this);
} }
std::string SceneNode::getID(){
return m_id;
}
SceneNode::~SceneNode() SceneNode::~SceneNode()
{ {
if(m_script != nullptr) if(m_script != nullptr)
@ -277,7 +282,7 @@ void SceneNode::setRigidBody(btRigidBody* body)
SceneNode* SceneNode::clone() SceneNode* SceneNode::clone()
{ {
SceneNode* node = new SceneNode(m_script); SceneNode* node = new SceneNode(m_id,m_script);
node->setMesh(getMesh()); node->setMesh(getMesh());
node->setTransform(getTransform()); node->setTransform(getTransform());
node->setLight(getLight()); node->setLight(getLight());

View File

@ -44,6 +44,8 @@ private:
std::vector<SceneNode*> m_nodesToRemove; std::vector<SceneNode*> m_nodesToRemove;
std::vector<SceneNode*> m_nodesToAdd; std::vector<SceneNode*> m_nodesToAdd;
std::string m_id;
bool m_parentVisible; bool m_parentVisible;
bool m_visible; bool m_visible;
bool m_enabled; bool m_enabled;
@ -83,7 +85,7 @@ private:
public: public:
// constructor/destructor // constructor/destructor
SceneNode(Script *script = nullptr); SceneNode(std::string node_id = "undefined id",Script *script = nullptr);
virtual ~SceneNode(); virtual ~SceneNode();
// game logic methods // game logic methods
@ -94,6 +96,8 @@ public:
void setEnabled(bool isEnabled) { m_enabled = isEnabled; } void setEnabled(bool isEnabled) { m_enabled = isEnabled; }
Script* getScript(); Script* getScript();
std::string getID();
void setID(std::string id){m_id = id;}
// methods called to access the graphic propeties of the node // methods called to access the graphic propeties of the node
void setMesh(Mesh* mesh) { m_geometry.mesh = mesh; } void setMesh(Mesh* mesh) { m_geometry.mesh = mesh; }

View File

@ -84,7 +84,7 @@ public:
void generateTerrain(SceneTree *scene) void generateTerrain(SceneTree *scene)
{ {
SceneNode* terrainContainer = new SceneNode(); SceneNode* terrainContainer = new SceneNode("terrain container");
TestGen gen; TestGen gen;
PBRMaterial *mat = new PBRMaterial(); PBRMaterial *mat = new PBRMaterial();
mat->albedo = glm::vec3(0.1f, 0.4f, 0.2f); mat->albedo = glm::vec3(0.1f, 0.4f, 0.2f);
@ -104,7 +104,7 @@ void generateTerrain(SceneTree *scene)
{ {
chunk->mesh->setMaterial(mat); chunk->mesh->setMaterial(mat);
chunk->mesh->initGL(); chunk->mesh->initGL();
SceneNode *node = new SceneNode(); SceneNode *node = new SceneNode("terrain element");
node->setMesh(chunk->mesh); node->setMesh(chunk->mesh);
node->getGeometryNode()->modelMatrix = glm::translate(glm::scale(glm::mat4(), glm::vec3(2.f)), pos*8.f); node->getGeometryNode()->modelMatrix = glm::translate(glm::scale(glm::mat4(), glm::vec3(2.f)), pos*8.f);
node->setTransform(node->getGeometryNode()->modelMatrix); node->setTransform(node->getGeometryNode()->modelMatrix);
@ -286,6 +286,7 @@ public:
// load sandbox // load sandbox
SceneNode* sandbox = Loader::loadMesh("sandbox.obj"); SceneNode* sandbox = Loader::loadMesh("sandbox.obj");
sandbox->setID("sandbox");
btRigidBody* sandboxBody = utils::buildStaticCollider(sandbox->getGeometryNode()); btRigidBody* sandboxBody = utils::buildStaticCollider(sandbox->getGeometryNode());
sandbox->setRigidBody(sandboxBody); sandbox->setRigidBody(sandboxBody);
scene->getPhysics()->addRigidBody(sandboxBody); scene->getPhysics()->addRigidBody(sandboxBody);

View File

@ -251,6 +251,21 @@ MeshResource::MeshResource():
} }
MeshResource::~MeshResource(){ MeshResource::~MeshResource()
{
destroy(); destroy();
} }
void MeshResource::destroy()
{
//TODO
}
void MeshResource::loadResource(float &progress)
{
//TODO
}
void MeshResource::gui(){
ImGui::Text("TODO");
}

View File

@ -132,7 +132,7 @@ public:
class MeshResource : public ResourceInterface class MeshResource : public ResourceInterface
{ {
//add metadata for mesh //add metadata for mesh here
Mesh* m_mesh; Mesh* m_mesh;
public: public:

View File

@ -57,10 +57,11 @@ void ScenePicker::update()
{ {
ImGui::Text("Intersection : ( %.3f, %.3f, %.3f )", m_pickedPos.x, m_pickedPos.y, m_pickedPos.z); ImGui::Text("Intersection : ( %.3f, %.3f, %.3f )", m_pickedPos.x, m_pickedPos.y, m_pickedPos.z);
if(!isVisible()) setVisible(m_pickSucceeded); if(!isVisible()) setVisible(m_pickSucceeded);
ImGui::Text("Node : %s",m_pickedNode->getID().data());
} }
else else
{ {
ImGui::Text("No intesection"); ImGui::Text("No intersection");
if(isVisible()) setVisible(m_pickSucceeded); if(isVisible()) setVisible(m_pickSucceeded);
} }
// if(ImGui::Button("Teleport")) // if(ImGui::Button("Teleport"))