setting user data in OdeWorld objects to Engine::Object pointer; added ID parameter to Engine::Objects to keep track of their integer ID; finished Engine::pickObjects() which now returns a list of Object IDs

git-svn-id: svn://anubis/anaglym/trunk@253 99a6e188-d820-4881-8870-2d33a10e2619
This commit is contained in:
Josh Holtrop 2010-02-21 17:25:05 +00:00
parent f9d1fde72a
commit 09c46c6799
2 changed files with 16 additions and 1 deletions

View File

@ -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<int> > Engine::pickObjects(int x, int y)
rotated_direction[0], rotated_direction[1], rotated_direction[2]);
refptr< vector<int> > ret = new vector<int>();
/* TODO: finish */
for (vector<OdeWorld::Object *>::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();

View File

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