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_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()

View File

@ -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());

View File

@ -44,6 +44,8 @@ private:
std::vector<SceneNode*> m_nodesToRemove;
std::vector<SceneNode*> 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; }

View File

@ -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);

View File

@ -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");
}

View File

@ -132,7 +132,7 @@ public:
class MeshResource : public ResourceInterface
{
//add metadata for mesh
//add metadata for mesh here
Mesh* m_mesh;
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);
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"))