diff --git a/Engine.cc b/Engine.cc index fbeabd9..33c0119 100644 --- a/Engine.cc +++ b/Engine.cc @@ -283,6 +283,7 @@ int Engine::addObject(WFObj * obj, bool is_static, bool is_reference, { int id = m_next_object_index++; Object * o = new Object(is_static, is_reference, m_world, obj, scale); + o->setID(id); m_objects[id] = o; return id; } @@ -292,6 +293,7 @@ int Engine::addObject(bool is_static, bool is_reference, { int id = m_next_object_index++; Object * o = new Object(is_static, is_reference, m_world, geom_type, args); + o->setID(id); m_objects[id] = o; return id; } @@ -407,6 +409,7 @@ int Engine::cloneObject(const Engine::Object * obj) { int id = m_next_object_index++; Object * o = new Object(*obj); + o->setID(id); m_objects[id] = o; return id; } @@ -660,7 +663,13 @@ refptr< vector > Engine::pickObjects(int x, int y) rotated_direction[0], rotated_direction[1], rotated_direction[2]); refptr< vector > ret = new vector(); - /* TODO: finish */ + for (vector::const_iterator it = objects->begin(); + it != objects->end(); + it++) + { + Object * o = (Object *) (*it)->getUserData(); + ret->push_back(o->getID()); + } return ret; } @@ -1130,6 +1139,7 @@ Engine::Object::Object(bool is_static, bool is_reference, else { m_ode_object = world.createObject(is_static, scale); + m_ode_object->setUserData(this); } m_is_static = is_static; m_display_list = obj->render(); @@ -1167,6 +1177,7 @@ Engine::Object::Object(bool is_static, bool is_reference, OdeWorld & world, else { m_ode_object = world.createObject(m_is_static, m_scale); + m_ode_object->setUserData(this); } m_is_managed = true; m_geom_type = geom_type; @@ -1215,6 +1226,7 @@ Engine::Object::Object(const Engine::Object & orig) { m_ode_object = new OdeWorld::Object(*orig.m_ode_object); } + m_ode_object->setUserData(this); if (m_is_managed) { createManagedObject(); diff --git a/Engine.h b/Engine.h index 66bcaf8..3884074 100644 --- a/Engine.h +++ b/Engine.h @@ -89,6 +89,8 @@ class Engine if (m_ode_object != NULL) m_ode_object->setGravityMode(enabled); } + void setID(int id) { m_id = id; } + int getID() { return m_id; } protected: void createManagedObject(); @@ -108,6 +110,7 @@ class Engine dReal m_mass; bool m_mass_is_set; bool m_gravity_mode; + int m_id; /* for "pre-loaded" objects */ int * m_display_list_refcnt;