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:
parent
f9d1fde72a
commit
09c46c6799
14
Engine.cc
14
Engine.cc
@ -283,6 +283,7 @@ int Engine::addObject(WFObj * obj, bool is_static, bool is_reference,
|
|||||||
{
|
{
|
||||||
int id = m_next_object_index++;
|
int id = m_next_object_index++;
|
||||||
Object * o = new Object(is_static, is_reference, m_world, obj, scale);
|
Object * o = new Object(is_static, is_reference, m_world, obj, scale);
|
||||||
|
o->setID(id);
|
||||||
m_objects[id] = o;
|
m_objects[id] = o;
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -292,6 +293,7 @@ int Engine::addObject(bool is_static, bool is_reference,
|
|||||||
{
|
{
|
||||||
int id = m_next_object_index++;
|
int id = m_next_object_index++;
|
||||||
Object * o = new Object(is_static, is_reference, m_world, geom_type, args);
|
Object * o = new Object(is_static, is_reference, m_world, geom_type, args);
|
||||||
|
o->setID(id);
|
||||||
m_objects[id] = o;
|
m_objects[id] = o;
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -407,6 +409,7 @@ int Engine::cloneObject(const Engine::Object * obj)
|
|||||||
{
|
{
|
||||||
int id = m_next_object_index++;
|
int id = m_next_object_index++;
|
||||||
Object * o = new Object(*obj);
|
Object * o = new Object(*obj);
|
||||||
|
o->setID(id);
|
||||||
m_objects[id] = o;
|
m_objects[id] = o;
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -660,7 +663,13 @@ refptr< vector<int> > Engine::pickObjects(int x, int y)
|
|||||||
rotated_direction[0], rotated_direction[1], rotated_direction[2]);
|
rotated_direction[0], rotated_direction[1], rotated_direction[2]);
|
||||||
|
|
||||||
refptr< vector<int> > ret = new vector<int>();
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1130,6 +1139,7 @@ Engine::Object::Object(bool is_static, bool is_reference,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_ode_object = world.createObject(is_static, scale);
|
m_ode_object = world.createObject(is_static, scale);
|
||||||
|
m_ode_object->setUserData(this);
|
||||||
}
|
}
|
||||||
m_is_static = is_static;
|
m_is_static = is_static;
|
||||||
m_display_list = obj->render();
|
m_display_list = obj->render();
|
||||||
@ -1167,6 +1177,7 @@ Engine::Object::Object(bool is_static, bool is_reference, OdeWorld & world,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_ode_object = world.createObject(m_is_static, m_scale);
|
m_ode_object = world.createObject(m_is_static, m_scale);
|
||||||
|
m_ode_object->setUserData(this);
|
||||||
}
|
}
|
||||||
m_is_managed = true;
|
m_is_managed = true;
|
||||||
m_geom_type = geom_type;
|
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 = new OdeWorld::Object(*orig.m_ode_object);
|
||||||
}
|
}
|
||||||
|
m_ode_object->setUserData(this);
|
||||||
if (m_is_managed)
|
if (m_is_managed)
|
||||||
{
|
{
|
||||||
createManagedObject();
|
createManagedObject();
|
||||||
|
3
Engine.h
3
Engine.h
@ -89,6 +89,8 @@ class Engine
|
|||||||
if (m_ode_object != NULL)
|
if (m_ode_object != NULL)
|
||||||
m_ode_object->setGravityMode(enabled);
|
m_ode_object->setGravityMode(enabled);
|
||||||
}
|
}
|
||||||
|
void setID(int id) { m_id = id; }
|
||||||
|
int getID() { return m_id; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void createManagedObject();
|
void createManagedObject();
|
||||||
@ -108,6 +110,7 @@ class Engine
|
|||||||
dReal m_mass;
|
dReal m_mass;
|
||||||
bool m_mass_is_set;
|
bool m_mass_is_set;
|
||||||
bool m_gravity_mode;
|
bool m_gravity_mode;
|
||||||
|
int m_id;
|
||||||
|
|
||||||
/* for "pre-loaded" objects */
|
/* for "pre-loaded" objects */
|
||||||
int * m_display_list_refcnt;
|
int * m_display_list_refcnt;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user