refactoring for object cloning
git-svn-id: svn://anubis/misc/OdeWorld@167 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
parent
0496353916
commit
023e06a8d0
54
OdeWorld.cc
54
OdeWorld.cc
@ -118,6 +118,60 @@ OdeWorld::Object::Object(bool is_static, dWorldID world, dSpaceID space)
|
||||
m_body = 0;
|
||||
}
|
||||
|
||||
OdeWorld::Object::Object(const OdeWorld::Object & orig)
|
||||
{
|
||||
m_is_static = orig.m_is_static;
|
||||
m_world = orig.m_world;
|
||||
m_space = orig.m_space;
|
||||
/* make a copy of the ODE body */
|
||||
if (orig.m_body != 0)
|
||||
{
|
||||
m_body = dBodyCreate(m_world);
|
||||
dMass mass;
|
||||
dBodyGetMass(orig.m_body, &mass);
|
||||
dBodySetMass(m_body, &mass);
|
||||
const dReal * pos = dBodyGetPosition(orig.m_body);
|
||||
dBodySetPosition(m_body, pos[0], pos[1], pos[2]);
|
||||
const dReal * rot = dBodyGetRotation(orig.m_body);
|
||||
dBodySetRotation(m_body, rot);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_body = 0;
|
||||
}
|
||||
/* make a copy of the ODE geoms */
|
||||
for (int i = 0, sz = orig.m_geoms.size(); i < sz; i++)
|
||||
{
|
||||
m_geoms.push_back(cloneGeom(orig.m_geoms[i], m_body));
|
||||
}
|
||||
}
|
||||
|
||||
dGeomID OdeWorld::Object::cloneGeom(dGeomID geom, dBodyID body)
|
||||
{
|
||||
/* TODO: clone the geom */
|
||||
switch (dGeomGetClass(geom))
|
||||
{
|
||||
case dSphereClass:
|
||||
break;
|
||||
case dBoxClass:
|
||||
break;
|
||||
case dCCylinderClass:
|
||||
break;
|
||||
case dCylinderClass:
|
||||
break;
|
||||
case dPlaneClass:
|
||||
break;
|
||||
case dGeomTransformClass:
|
||||
break;
|
||||
case dRayClass:
|
||||
case dTriMeshClass:
|
||||
case dSimpleSpaceClass:
|
||||
case dHashSpaceClass:
|
||||
/* unsupported for cloning */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void OdeWorld::Object::setPosition(double x, double y, double z)
|
||||
{
|
||||
if (m_is_static)
|
||||
|
@ -17,6 +17,7 @@ class OdeWorld
|
||||
{
|
||||
public:
|
||||
Object(bool is_static, dWorldID world, dSpaceID space);
|
||||
Object(const Object & orig);
|
||||
|
||||
void loadPhy(const std::string & path);
|
||||
void setPosition(double x, double y, double z);
|
||||
@ -41,7 +42,7 @@ class OdeWorld
|
||||
void setupGeom(dGeomID geom, dMass * mass,
|
||||
float locx, float locy, float locz,
|
||||
float rotx, float roty, float rotz);
|
||||
|
||||
dGeomID cloneGeom(dGeomID geom, dBodyID body);
|
||||
};
|
||||
|
||||
Object * createObject(bool is_static);
|
||||
|
Loading…
x
Reference in New Issue
Block a user