From: <a-...@us...> - 2009-12-02 10:06:12
|
Revision: 112 http://simspark.svn.sourceforge.net/simspark/?rev=112&view=rev Author: a-held Date: 2009-12-02 10:06:02 +0000 (Wed, 02 Dec 2009) Log Message: ----------- Improved bridge pattern for World class nearly completed bridge pattern for PhysicsObject did some more work on the RigidBody class, too Modified Paths: -------------- branches/multiphys/spark/lib/oxygen/physicsserver/angularmotor.cpp branches/multiphys/spark/lib/oxygen/physicsserver/balljoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/body.h branches/multiphys/spark/lib/oxygen/physicsserver/collider.cpp branches/multiphys/spark/lib/oxygen/physicsserver/collider.h branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp branches/multiphys/spark/lib/oxygen/physicsserver/fixedjoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/hinge2joint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/hingejoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/int/bodyint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/dynamicbodyint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsobjectint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsserverint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/softbodyint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/spaceint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/staticbodyint.h branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/joint.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.h branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.cpp branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.h branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h branches/multiphys/spark/lib/oxygen/physicsserver/sliderjoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/space.cpp branches/multiphys/spark/lib/oxygen/physicsserver/space.h branches/multiphys/spark/lib/oxygen/physicsserver/universaljoint.cpp branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp branches/multiphys/spark/lib/oxygen/physicsserver/world.h branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp Modified: branches/multiphys/spark/lib/oxygen/physicsserver/angularmotor.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/angularmotor.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/angularmotor.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,13 +34,13 @@ void AngularMotor::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateAMotor(world, 0); + mODEJoint = dJointCreateAMotor((dWorldID) world, 0); } void AngularMotor::SetMode(EMotorMode mode) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/balljoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/balljoint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/balljoint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -33,13 +33,13 @@ void BallJoint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateBall(world, 0); + mODEJoint = dJointCreateBall((dWorldID) world, 0); } void BallJoint::SetAnchor(const Vector3f& anchor) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/body.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/body.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/body.h 2009-12-02 10:06:02 UTC (rev 112) @@ -23,6 +23,7 @@ #define OXYGEN_BODY_H #include <oxygen/physicsserver/physicsobject.h> +#include <oxygen/physicsserver/ode/odewrapper.h> namespace oxygen { Modified: branches/multiphys/spark/lib/oxygen/physicsserver/collider.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/collider.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/collider.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -68,14 +68,14 @@ // this geom is independent, so register to space and body // if we have a space add the geom to it - dSpaceID space = FindSpaceID(); + long spaceID = FindSpaceID(); if ( - (space) && - (! dSpaceQuery(space, mODEGeom)) + (spaceID) && + (! dSpaceQuery((dSpaceID) spaceID, mODEGeom)) ) { dGeomSetData(mODEGeom, this); - dSpaceAdd(space, mODEGeom); + dSpaceAdd((dSpaceID) spaceID, mODEGeom); } // if there is a Body below our parent, link to it shared_ptr<RigidBody> body = shared_static_cast<RigidBody> @@ -83,7 +83,7 @@ if (body.get() != 0) { - dGeomSetBody (mODEGeom, body->GetODEBody()); + dGeomSetBody (mODEGeom, (dBodyID) body->GetBodyID()); } else { // no body node found, setup initial position and @@ -98,7 +98,7 @@ PhysicsObject::OnUnlink(); // remove collision geometry from space - dSpaceID space = GetParentSpaceID(); + long space = GetParentSpaceID(); if ( (mODEGeom == 0) || @@ -110,7 +110,7 @@ if (space) { - dSpaceRemove(space, mODEGeom); + dSpaceRemove((dSpaceID) space, mODEGeom); } } @@ -230,14 +230,14 @@ return Vector3f(pos[0],pos[1],pos[2]); } -dSpaceID Collider::GetParentSpaceID() +long Collider::GetParentSpaceID() { if (mODEGeom == 0) { return 0; } - return dGeomGetSpace(mODEGeom); + return (long) dGeomGetSpace(mODEGeom); } bool Collider::Intersects(boost::shared_ptr<Collider> collider) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/collider.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/collider.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/collider.h 2009-12-02 10:06:02 UTC (rev 112) @@ -22,6 +22,7 @@ #ifndef OXYGEN_COLLIDER_H #define OXYGEN_COLLIDER_H +#include <oxygen/physicsserver/ode/odewrapper.h> #include <oxygen/physicsserver/physicsobject.h> #include <oxygen/oxygen_defines.h> #include <string> @@ -124,7 +125,7 @@ bool Intersects(boost::shared_ptr<Collider> collider); /** returns the ODE handle ID of the containing parent space */ - virtual dSpaceID GetParentSpaceID(); + virtual long GetParentSpaceID(); /** Add/Reomve a collider name that not collide with */ void AddNotCollideWithColliderName(const std::string & colliderName, bool isAdd); Modified: branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -188,7 +188,7 @@ // create the contact joint and attach it to the body dJointID joint = dJointCreateContact - (mWorld->GetODEWorld(), mSpace->GetODEJointGroup(), &contact); + ((dWorldID) mWorld->GetWorldID(), mSpace->GetODEJointGroup(), &contact); dJointAttach (joint, myBody, collideeBody); } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/fixedjoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/fixedjoint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/fixedjoint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,13 +34,13 @@ void FixedJoint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateFixed(world, 0); + mODEJoint = dJointCreateFixed((dWorldID) world, 0); } void FixedJoint::SetParameter(int /*parameter*/, float /*value*/) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/hinge2joint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/hinge2joint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/hinge2joint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,13 +34,13 @@ void Hinge2Joint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateHinge2(world, 0); + mODEJoint = dJointCreateHinge2((dWorldID) world, 0); } void Hinge2Joint::SetAnchor(const Vector3f& anchor) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/hingejoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/hingejoint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/hingejoint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,13 +34,13 @@ void HingeJoint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateHinge(world, 0); + mODEJoint = dJointCreateHinge((dWorldID) world, 0); } void HingeJoint::SetAnchor(const Vector3f& anchor) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/bodyint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/bodyint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/bodyint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -32,9 +32,9 @@ class OXYGEN_API BodyInt : public ODEPhysicsObject { -public: - BodyInt() : ODEPhysicsObject(){}; - virtual ~BodyInt(){}; +protected: + BodyInt() : ODEPhysicsObject(){ + }; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/dynamicbodyint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/dynamicbodyint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/dynamicbodyint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -32,9 +32,8 @@ class OXYGEN_API DynamicBodyInt : public ODEBody { -public: +protected: DynamicBodyInt() : ODEBody(){}; - virtual ~DynamicBodyInt(){}; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsobjectint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsobjectint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsobjectint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -30,26 +30,17 @@ namespace oxygen { -class World; -class Space; -class OXYGEN_API PhysicsObjectInt : public BaseNode +class OXYGEN_API PhysicsObjectInt { -public: - PhysicsObjectInt(){}; - virtual ~PhysicsObjectInt(){}; - - virtual dWorldID GetWorldID() = 0; - virtual dSpaceID FindSpaceID() = 0; - virtual dSpaceID GetParentSpaceID() = 0; +public: virtual void ConvertRotationMatrix(const salt::Matrix& rot, dMatrix3& matrix) = 0; virtual void ConvertRotationMatrix(const dReal* matrix, salt::Matrix& rot) const = 0; - virtual void DestroyPhysicsObject() = 0; - boost::shared_ptr<Scene> scene; - boost::shared_ptr<Space> space; - boost::shared_ptr<World> world; +protected: + PhysicsObjectInt(){ + }; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsserverint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsserverint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/physicsserverint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,9 +31,8 @@ class OXYGEN_API PhysicsServerInt { -public: +protected: PhysicsServerInt(){}; - virtual ~PhysicsServerInt(){}; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/rigidbodyint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -34,10 +34,6 @@ { public: - RigidBodyInt() : ODEBody(){}; - virtual ~RigidBodyInt(){}; - - virtual dBodyID GetODEBody() const = 0; virtual void Enable() = 0; virtual void Disable() = 0; virtual bool IsEnabled() const = 0; @@ -82,7 +78,16 @@ virtual void BodySetData(RigidBody* rb) = 0; virtual RigidBody* BodyGetData(long bodyID) = 0; + virtual long GetBodyID() = 0; + virtual salt::Vector3f GetMassTrans() = 0; + virtual void SetMassTrans(salt::Vector3f massTrans) = 0; + virtual bool GetMassTransformed() = 0; + virtual void SetMassTransformed(bool f) = 0; + protected: + RigidBodyInt() : ODEBody(), mBodyID(0), mMassTrans(0,0,0), mMassTransformed(false){ + }; + /** sets up an ode mass struct representing a box of the given size and total_mass */ @@ -137,10 +142,7 @@ */ virtual void PrepareCapsuleTotal(dMass& mass, float total_mass, float radius, float length) const = 0; -private: - virtual void PrePhysicsUpdateInternal(float deltaTime) = 0; - -public: +protected: long mBodyID; salt::Vector3f mMassTrans; bool mMassTransformed; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/softbodyint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/softbodyint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/softbodyint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -32,9 +32,8 @@ class OXYGEN_API SoftBodyInt : public ODEBody { -public: +protected: SoftBodyInt() : ODEBody(){}; - virtual ~SoftBodyInt(){}; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/spaceint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/spaceint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/spaceint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -39,15 +39,12 @@ public: typedef std::set<dSpaceID> TSpaceIdSet; - SpaceInt() : ODEPhysicsObject(){}; - virtual ~SpaceInt(){}; - //virtual void collisionNearCallback (void *data, dGeomID obj1, dGeomID obj2) = 0; - virtual dSpaceID GetODESpace() const = 0; + virtual long GetSpaceID() const = 0; virtual dJointGroupID GetODEJointGroup() const = 0; virtual void Collide() = 0; virtual void DestroyPhysicsObject() = 0; - virtual dSpaceID GetParentSpaceID() = 0; + virtual long GetParentSpaceID() = 0; virtual bool IsGlobalSpace() = 0; virtual void DisableInnerCollision(bool disable) = 0; virtual bool GetDisableInnerCollision() const = 0; @@ -61,6 +58,10 @@ virtual void DestroySpaceObjects() = 0; boost::shared_ptr<Scene> scene; + +protected: + SpaceInt() : ODEPhysicsObject(){ + }; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/staticbodyint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/staticbodyint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/staticbodyint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -32,9 +32,8 @@ class OXYGEN_API StaticBodyInt : public ODEBody { -public: +protected: StaticBodyInt() : ODEBody(){}; - virtual ~StaticBodyInt(){}; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -32,10 +32,7 @@ { public: - WorldInt() : ODEPhysicsObject(){}; - virtual ~WorldInt(){}; - - virtual dWorldID GetODEWorld() const = 0; + virtual long GetWorldID() const = 0; virtual void SetGravity(const salt::Vector3f& gravity) = 0; virtual salt::Vector3f GetGravity() const = 0; virtual void SetERP(float erp) = 0; @@ -47,8 +44,14 @@ virtual void SetAutoDisableFlag(bool flag) = 0; virtual void SetContactSurfaceLayer(float depth) = 0; virtual float GetContactSurfaceLayer() const = 0; - virtual void DestroyPhysicsObject() = 0; - virtual bool ConstructInternal() = 0; + virtual void CreateWorld() = 0; + virtual void DestroyWorld() = 0; + +protected: + WorldInt() : ODEPhysicsObject(), mWorldID(0){ + }; + + long mWorldID; }; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -88,7 +88,7 @@ } string path1,path2; - dBodyID id1,id2; + long id1,id2; static const char strStaticEnv[] = "<static environment>"; @@ -98,7 +98,7 @@ path1 = strStaticEnv; } else { - id1 = body1->GetODEBody(); + id1 = body1->GetBodyID(); path1 = body1->GetFullPath(); } @@ -108,14 +108,14 @@ path2 = strStaticEnv; } else { - id2 = body2->GetODEBody(); + id2 = body2->GetBodyID(); path2 = body2->GetFullPath(); } GetLog()->Debug() << "(Joint) Attaching '" << path1 << "' to '" << path2 << '\n'; - dJointAttach(mODEJoint, id1, id2); + dJointAttach(mODEJoint, (dBodyID) id1, (dBodyID) id2); } shared_ptr<RigidBody> Joint::GetBody(const std::string& path) @@ -179,7 +179,7 @@ } const bool connected = - (dAreConnected(body1->GetODEBody(),body2->GetODEBody()) + (dAreConnected((dBodyID) body1->GetBodyID(), (dBodyID) body2->GetBodyID()) == 1); return connected; @@ -198,8 +198,8 @@ } const bool connected = - (dAreConnectedExcluding(body1->GetODEBody(), - body2->GetODEBody(), + (dAreConnectedExcluding((dBodyID) body1->GetBodyID(), + (dBodyID) body2->GetBodyID(), joint_type ) == 1); Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2009-12-02 10:06:02 UTC (rev 112) @@ -23,6 +23,7 @@ #define OXYGEN_JOINT_H #include <oxygen/oxygen_defines.h> +#include <oxygen/physicsserver/ode/odewrapper.h> #include <oxygen/physicsserver/physicsobject.h> namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -26,7 +26,3 @@ ODEBody::ODEBody() : BodyInt(){ } - -ODEBody::~ODEBody(){ - -} Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odebody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,7 +31,6 @@ { public: ODEBody(); - virtual ~ODEBody(); }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -26,7 +26,3 @@ ODEDynamicBody::ODEDynamicBody() : DynamicBodyInt(){ } - -ODEDynamicBody::~ODEDynamicBody(){ - -} Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odedynamicbody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,7 +31,6 @@ { public: ODEDynamicBody(); - virtual ~ODEDynamicBody(); }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -33,48 +33,6 @@ { } -ODEPhysicsObject::~ODEPhysicsObject() -{ -} - -dWorldID ODEPhysicsObject::GetWorldID() -{ - if (world.get() == 0) - { - return 0; - } - - dWorldID worldId = world->GetODEWorld(); - if (worldId == 0) - { - cerr << "(ODEObject) ERROR: World returned empty ODE handle\n"; - } - - return worldId; -} - -dSpaceID ODEPhysicsObject::FindSpaceID() -{ - if (space.get() == 0) - { - return 0; - } - - dSpaceID spaceId = space->GetODESpace(); - - if (spaceId == 0) - { - cerr << "(ODEObject) ERROR: Space returned empty ODE handle\n"; - } - - return spaceId; -} - -dSpaceID ODEPhysicsObject::GetParentSpaceID() -{ - return 0; -} - void ODEPhysicsObject::ConvertRotationMatrix(const salt::Matrix& rot, dMatrix3& matrix) { matrix[0] = rot.m[0]; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odephysicsobject.h 2009-12-02 10:06:02 UTC (rev 112) @@ -29,21 +29,11 @@ namespace oxygen { -class Space; -class World; class OXYGEN_API ODEPhysicsObject : public PhysicsObjectInt { public: ODEPhysicsObject(); - virtual ~ODEPhysicsObject(); - - dWorldID GetWorldID(); - dSpaceID FindSpaceID(); - virtual dSpaceID GetParentSpaceID(); - virtual void DestroyPhysicsObject(){}; - -protected: void ConvertRotationMatrix(const salt::Matrix& rot, dMatrix3& matrix); void ConvertRotationMatrix(const dReal* matrix, salt::Matrix& rot) const; }; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -32,19 +32,30 @@ using namespace salt; using namespace std; -ODERigidBody::ODERigidBody() : RigidBodyInt(), mMassTrans(0,0,0), mMassTransformed(false){ - mBodyID = 0; +ODERigidBody::ODERigidBody() : RigidBodyInt(){ } -ODERigidBody::~ODERigidBody(){ +long ODERigidBody::GetBodyID() +{ + return mBodyID; +} +salt::Vector3f ODERigidBody::GetMassTrans(){ + return mMassTrans; } -dBodyID ODERigidBody::GetODEBody() const -{ - return (dBodyID)mBodyID; +void ODERigidBody::SetMassTrans(Vector3f massTrans){ + mMassTrans = massTrans; } +bool ODERigidBody::GetMassTransformed(){ + return mMassTransformed; +} + +void ODERigidBody::SetMassTransformed(bool f){ + mMassTransformed = f; +} + void ODERigidBody::Enable() { dBodyEnable((dBodyID)mBodyID); @@ -393,45 +404,6 @@ return mat; } -void ODERigidBody::PrePhysicsUpdateInternal(float /*deltaTime*/) -{ - // Check whether mass/body has been translated - if (mMassTransformed) - { - weak_ptr<Node> parent = GetParent(); - - // Update colliders (only those encapsulated in transform colliders) - TLeafList transformColliders; - parent.lock()->ListChildrenSupportingClass<TransformCollider>(transformColliders); - - for (TLeafList::iterator iter = transformColliders.begin(); iter != transformColliders.end(); ++iter) - { - // Only move non-transform colliders - shared_ptr<Collider> collider = shared_static_cast<TransformCollider>(*iter)->FindChildSupportingClass<Collider>(); - if (collider.get()) - { - Vector3f pos = collider->GetPosition(); - pos = pos + mMassTrans; - collider->SetLocalPosition(pos); - } - } - - // Update visuals (or other transforms in the tree) - TLeafList transforms; - parent.lock()->ListShallowChildrenSupportingClass<Transform>(transforms); - for (TLeafList::iterator iter = transforms.begin(); iter != transforms.end(); ++iter) - { - shared_ptr<Transform> transform = shared_dynamic_cast<Transform>(*iter); - Matrix worldTransform = transform->GetWorldTransform(); - worldTransform.Pos() = worldTransform.Pos() + mMassTrans; - transform->SetWorldTransform(worldTransform); - } - - mMassTrans = Vector3f(0,0,0); - mMassTransformed = false; - } -} - RigidBody* ODERigidBody::BodyGetData(long bodyID) { RigidBody* bodyPtr = Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/oderigidbody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,9 +31,7 @@ { public: ODERigidBody(); - virtual ~ODERigidBody(); - dBodyID GetODEBody() const; void Enable(); void Disable(); bool IsEnabled() const; @@ -77,6 +75,12 @@ void BodySetData(RigidBody* rb); RigidBody* BodyGetData(long bodyID); + long GetBodyID(); + salt::Vector3f GetMassTrans(); + void SetMassTrans(salt::Vector3f massTrans); + bool GetMassTransformed(); + void SetMassTransformed(bool f); + protected: void CreateBody(long world); void PrepareBoxTotal(dMass& mass, float total_mass, const salt::Vector3f& size) const; @@ -87,13 +91,6 @@ void PrepareCylinderTotal(dMass& mass, float total_mass, float radius, float length) const; void PrepareCapsule(dMass& mass, float density, float radius, float length) const; void PrepareCapsuleTotal(dMass& mass, float total_mass, float radius, float length) const; - -private: - void PrePhysicsUpdateInternal(float deltaTime); - -protected: - salt::Vector3f mMassTrans; - bool mMassTransformed; }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -26,7 +26,3 @@ ODESoftBody::ODESoftBody() : SoftBodyInt(){ } - -ODESoftBody::~ODESoftBody(){ - -} Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odesoftbody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,7 +31,6 @@ { public: ODESoftBody(); - virtual ~ODESoftBody(); }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -42,15 +42,11 @@ { } -ODESpace::~ODESpace() +long ODESpace::GetSpaceID() const { + return (long) mODESpace; } -dSpaceID ODESpace::GetODESpace() const -{ - return mODESpace; -} - dJointGroupID ODESpace::GetODEJointGroup() const { return mODEContactGroup; @@ -184,32 +180,29 @@ void ODESpace::OnUnlink() { DisableInnerCollision(false); - ODEPhysicsObject::OnUnlink(); } void ODESpace::OnLink() { - ODEPhysicsObject::OnLink(); + /*shared_ptr<Space> space = GetSpace(); + dSpaceID spaceID = 0; - //shared_ptr<Space> space = GetSpace(); - dSpaceID spaceId = 0; - if (space.get() != 0) { - spaceId = space->GetODESpace(); + spaceID = (dSpaceID) space->GetSpaceID(); } - mODESpace = dHashSpaceCreate(spaceId); + mODESpace = dHashSpaceCreate(spaceID);*/ } -dSpaceID ODESpace::GetParentSpaceID() +long ODESpace::GetParentSpaceID() { if (mODESpace == 0) { return 0; } - return dGeomGetSpace((dGeomID)mODESpace); + return (long) dGeomGetSpace((dGeomID)mODESpace); } bool ODESpace::IsGlobalSpace() @@ -235,8 +228,8 @@ dJointGroupEmpty (mODEContactGroup); } -void ODESpace::DestroySpaceObjects() -{ +void ODESpace::DestroySpaceObjects(){} +/*{ if (scene.get() == 0) { return; @@ -263,19 +256,19 @@ // destroy objects registered to this space; the top level // space object also destroy any other ODE object - const dSpaceID parentSpace = object->GetParentSpaceID(); + const long parentSpace = object->GetParentSpaceID(); if ( ( (globalSpace) && (parentSpace == 0) ) || - (parentSpace == mODESpace) + (parentSpace == (long) mODESpace) ) { object->DestroyPhysicsObject(); } } -} +}*/ void ODESpace::DestroyPhysicsObject() { Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odespace.h 2009-12-02 10:06:02 UTC (rev 112) @@ -36,13 +36,12 @@ public: ODESpace(); - virtual ~ODESpace(); - dSpaceID GetODESpace() const; + long GetSpaceID() const; dJointGroupID GetODEJointGroup() const; void Collide(); virtual void DestroyPhysicsObject(); - virtual dSpaceID GetParentSpaceID(); + virtual long GetParentSpaceID(); bool IsGlobalSpace(); void DisableInnerCollision(bool disable); bool GetDisableInnerCollision() const; Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -26,7 +26,3 @@ ODEStaticBody::ODEStaticBody() : StaticBodyInt(){ } - -ODEStaticBody::~ODEStaticBody(){ - -} Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odestaticbody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -31,7 +31,6 @@ { public: ODEStaticBody(); - virtual ~ODEStaticBody(); }; } //namespace oxygen Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -27,22 +27,18 @@ using namespace oxygen; using namespace salt; -ODEWorld::ODEWorld() : WorldInt(), mODEWorld(0) +ODEWorld::ODEWorld() : WorldInt() { } -ODEWorld::~ODEWorld() +long ODEWorld::GetWorldID() const { + return mWorldID; } -dWorldID ODEWorld::GetODEWorld() const -{ - return mODEWorld; -} - void ODEWorld::SetGravity(const Vector3f& gravity) { - dWorldSetGravity(mODEWorld, + dWorldSetGravity((dWorldID) mWorldID, gravity.x(), gravity.y(), gravity.z() @@ -52,87 +48,62 @@ salt::Vector3f ODEWorld::GetGravity() const { dVector3 dGravity; - dWorldGetGravity(mODEWorld,dGravity); + dWorldGetGravity((dWorldID) mWorldID,dGravity); return Vector3f(dGravity[0],dGravity[1],dGravity[2]); } void ODEWorld::SetERP(float erp) { - dWorldSetERP(mODEWorld, erp); + dWorldSetERP((dWorldID) mWorldID, erp); } float ODEWorld::GetERP() const { - return dWorldGetERP(mODEWorld); + return dWorldGetERP((dWorldID) mWorldID); } void ODEWorld::SetCFM(float cfm) { - dWorldSetCFM(mODEWorld, cfm); + dWorldSetCFM((dWorldID) mWorldID, cfm); } float ODEWorld::GetCFM() const { - return dWorldGetCFM(mODEWorld); + return dWorldGetCFM((dWorldID) mWorldID); } void ODEWorld::Step(float deltaTime) { - dWorldStep(mODEWorld, deltaTime); + dWorldStep((dWorldID) mWorldID, deltaTime); } bool ODEWorld::GetAutoDisableFlag() const { - return (dWorldGetAutoDisableFlag(mODEWorld) == 1); + return (dWorldGetAutoDisableFlag((dWorldID) mWorldID) == 1); } void ODEWorld::SetAutoDisableFlag(bool flag) { - dWorldSetAutoDisableFlag(mODEWorld, static_cast<int>(flag)); + dWorldSetAutoDisableFlag((dWorldID) mWorldID, static_cast<int>(flag)); } void ODEWorld::SetContactSurfaceLayer(float depth) { - dWorldSetContactSurfaceLayer(mODEWorld, depth); + dWorldSetContactSurfaceLayer((dWorldID) mWorldID, depth); } float ODEWorld::GetContactSurfaceLayer() const { - return dWorldGetContactSurfaceLayer(mODEWorld); + return dWorldGetContactSurfaceLayer((dWorldID) mWorldID); } -bool ODEWorld::ConstructInternal() +void ODEWorld::CreateWorld() { - // create an ode world - mODEWorld = dWorldCreate(); - - return (mODEWorld != 0); + mWorldID = (long) dWorldCreate(); } -void ODEWorld::DestroyPhysicsObject() +void ODEWorld::DestroyWorld() { - static bool recurseLock = false; - if (recurseLock) - { - return; - } - - recurseLock = true; - - //shared_ptr<Space> space = GetSpace(); - if (space.get() != 0) - { - space->DestroyPhysicsObject(); - } - - if (mODEWorld == 0) - { - return; - } - - // release the ODE world - dWorldDestroy(mODEWorld); - mODEWorld = 0; - - recurseLock = false; + dWorldDestroy((dWorldID) mWorldID); + mWorldID = 0; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2009-12-02 10:06:02 UTC (rev 112) @@ -33,9 +33,8 @@ public: ODEWorld(); - virtual ~ODEWorld(); - dWorldID GetODEWorld() const; + long GetWorldID() const; void SetGravity(const salt::Vector3f& gravity); salt::Vector3f GetGravity() const; void SetERP(float erp); @@ -47,13 +46,8 @@ void SetAutoDisableFlag(bool flag); void SetContactSurfaceLayer(float depth); float GetContactSurfaceLayer() const; - virtual void DestroyPhysicsObject(); - -protected: - virtual bool ConstructInternal(); - -private: - dWorldID mODEWorld; + void CreateWorld(); + void DestroyWorld(); }; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -41,7 +41,7 @@ void PhysicsObject::OnUnlink() { - mPhysicsObjectImp->DestroyPhysicsObject(); + DestroyPhysicsObject(); } /** returns the world node */ @@ -91,38 +91,48 @@ return spaceNode; } -dWorldID PhysicsObject::GetWorldID() -{ - mPhysicsObjectImp->world = GetWorld(); - +long PhysicsObject::GetWorldID() +{ shared_ptr<World> world = GetWorld(); - //mPhysicsObjectImp->GetWorld(); if (world.get() == 0) { return 0; } - dWorldID worldId = world->GetODEWorld(); - if (worldId == 0) + long worldID = world->GetWorldID(); + + if (worldID == 0) { GetLog()->Error() << "(ODEObject) ERROR: World returned empty ODE handle\n"; } - return worldId; + return worldID; } -dSpaceID PhysicsObject::FindSpaceID() +long PhysicsObject::FindSpaceID() { - mPhysicsObjectImp->space = GetSpace(); - - return mPhysicsObjectImp->FindSpaceID(); + shared_ptr<Space> space = GetSpace(); + if (space.get() == 0) + { + return 0; + } + + long spaceID = space->GetSpaceID(); + + if (spaceID == 0) + { + GetLog()->Error() + << "(ODEObject) ERROR: Space returned empty ODE handle\n"; + } + + return spaceID; } -dSpaceID PhysicsObject::GetParentSpaceID() +long PhysicsObject::GetParentSpaceID() { - return mPhysicsObjectImp->GetParentSpaceID(); + return 0; } void PhysicsObject::ConvertRotationMatrix(const salt::Matrix& rot, dMatrix3& matrix) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/physicsobject.h 2009-12-02 10:06:02 UTC (rev 112) @@ -51,13 +51,13 @@ virtual void OnUnlink(); /** returns the ODE world handle */ - dWorldID GetWorldID(); + long GetWorldID(); /** returns the nearest parent space ODE handle */ - dSpaceID FindSpaceID(); + long FindSpaceID(); /** returns the ODE handle ID of the containing parent space */ - virtual dSpaceID GetParentSpaceID(); + virtual long GetParentSpaceID(); /** this method is not implemented here because PhysicsObject is an abstract class. However, it is declared here so that it can be Modified: branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -39,9 +39,9 @@ { } -dBodyID RigidBody::GetODEBody() const +long RigidBody::GetBodyID() const { - return (dBodyID) mRigidBodyImp->mBodyID; + return mRigidBodyImp->GetBodyID(); } void RigidBody::Enable() @@ -71,7 +71,7 @@ bool RigidBody::CreateBody() { - long bodyID = mRigidBodyImp->mBodyID; + long bodyID = mRigidBodyImp->GetBodyID(); if (bodyID != 0) { @@ -86,9 +86,9 @@ mRigidBodyImp->CreateBody(world); - mODEBody = (dBodyID) mRigidBodyImp->mBodyID; + mODEBody = (dBodyID) mRigidBodyImp->GetBodyID(); - if (mRigidBodyImp->mBodyID == 0) + if (mRigidBodyImp->GetBodyID() == 0) { GetLog()->Error() << "(Body) ERROR: could not create new ODE body\n"; @@ -140,12 +140,12 @@ void RigidBody::GetMassParameters(dMass& mass) const { - dBodyGetMass(mODEBody, &mass); + mRigidBodyImp->GetMassParameters(mass); } void RigidBody::SetMassParameters(const dMass& mass) { - dBodySetMass(mODEBody, &mass); + mRigidBodyImp->SetMassParameters(mass); } void RigidBody::SetSphere(float density, float radius) @@ -271,7 +271,7 @@ void RigidBody::PrePhysicsUpdateInternal(float /*deltaTime*/) { // Check whether mass/body has been translated - if (mRigidBodyImp->mMassTransformed) + if (mRigidBodyImp->GetMassTransformed()) { weak_ptr<Node> parent = GetParent(); @@ -302,8 +302,8 @@ transform->SetWorldTransform(worldTransform); } - mRigidBodyImp->mMassTrans = Vector3f(0,0,0); - mRigidBodyImp->mMassTransformed = false; + mRigidBodyImp->SetMassTrans(Vector3f(0,0,0)); + mRigidBodyImp->SetMassTransformed(false); } } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/rigidbody.h 2009-12-02 10:06:02 UTC (rev 112) @@ -47,7 +47,7 @@ virtual ~RigidBody(); /** returns the ID of the mangaged ODE body */ - dBodyID GetODEBody() const; + long GetBodyID() const; /** enables this body. Each body can be enabled or disabled. Disabled bodies are effectively turned off and are Modified: branches/multiphys/spark/lib/oxygen/physicsserver/sliderjoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/sliderjoint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/sliderjoint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,13 +34,13 @@ void SliderJoint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateSlider(world, 0); + mODEJoint = dJointCreateSlider((dWorldID) world, 0); } void SliderJoint::Attach(shared_ptr<RigidBody> body1, shared_ptr<RigidBody> body2) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/space.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/space.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/space.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -47,9 +47,9 @@ { } -dSpaceID Space::GetODESpace() const +long Space::GetSpaceID() const { - return mSpaceImp->GetODESpace(); + return mSpaceImp->GetSpaceID(); } dJointGroupID Space::GetODEJointGroup() const @@ -197,20 +197,20 @@ PhysicsObject::OnLink(); shared_ptr<Space> space = GetSpace(); - dSpaceID spaceId = 0; + long spaceID = 0; if (space.get() != 0) { - spaceId = space->GetODESpace(); + spaceID = space->GetSpaceID(); } - mODESpace = dHashSpaceCreate(spaceId); + mODESpace = dHashSpaceCreate((dSpaceID) spaceID); shared_ptr<ODESpace> odespace = shared_static_cast<ODESpace>(mSpaceImp); odespace->mODESpace = mODESpace; } -dSpaceID Space::GetParentSpaceID() +long Space::GetParentSpaceID() { return mSpaceImp->GetParentSpaceID(); } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/space.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/space.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/space.h 2009-12-02 10:06:02 UTC (rev 112) @@ -23,6 +23,7 @@ #define OXYGEN_SPACE_H #include <oxygen/physicsserver/physicsobject.h> +#include <oxygen/physicsserver/ode/odewrapper.h> #include <set> #include <oxygen/oxygen_defines.h> @@ -47,8 +48,8 @@ Space(); virtual ~Space(); - /** returns the ID of the managed ODE space */ - dSpaceID GetODESpace() const; + /** returns the ID of the managed space */ + long GetSpaceID() const; /** retuns the ID of joint group for all created contact joints */ dJointGroupID GetODEJointGroup() const; @@ -65,7 +66,7 @@ virtual void DestroyPhysicsObject(); /** returns the ODE handle ID of the containing parent space */ - virtual dSpaceID GetParentSpaceID(); + virtual long GetParentSpaceID(); /** returns true if this is the top global, i.e. top level space object */ bool IsGlobalSpace(); Modified: branches/multiphys/spark/lib/oxygen/physicsserver/universaljoint.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/universaljoint.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/universaljoint.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -34,14 +34,14 @@ void UniversalJoint::OnLink() { - dWorldID world = GetWorldID(); + long world = GetWorldID(); if (world == 0) { return; } - mODEJoint = dJointCreateUniversal(world, 0); + mODEJoint = dJointCreateUniversal((dWorldID) world, 0); } void UniversalJoint::SetAnchor(const Vector3f& anchor) Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -20,8 +20,8 @@ */ #include <oxygen/physicsserver/ode/odeworld.h> +#include <oxygen/physicsserver/space.h> #include <oxygen/physicsserver/world.h> -#include <oxygen/physicsserver/space.h> #include <oxygen/sceneserver/scene.h> using namespace boost; @@ -37,72 +37,95 @@ { } -dWorldID World::GetODEWorld() const +long World::GetWorldID() const { - return mWorldImp->GetODEWorld(); + return mWorldImp->GetWorldID(); } void World::SetGravity(const Vector3f& gravity) { - mWorldImp->SetGravity(gravity); + mWorldImp->SetGravity(gravity); } salt::Vector3f World::GetGravity() const { - return mWorldImp->GetGravity(); + return mWorldImp->GetGravity(); } void World::SetERP(float erp) { - mWorldImp->SetERP(erp); + mWorldImp->SetERP(erp); } float World::GetERP() const { - return mWorldImp->GetERP(); + return mWorldImp->GetERP(); } void World::SetCFM(float cfm) { - mWorldImp->SetCFM(cfm); + mWorldImp->SetCFM(cfm); } float World::GetCFM() const { - return mWorldImp->GetCFM(); + return mWorldImp->GetCFM(); } void World::Step(float deltaTime) { - mWorldImp->Step(deltaTime); + mWorldImp->Step(deltaTime); } bool World::GetAutoDisableFlag() const { - return mWorldImp->GetAutoDisableFlag(); + return mWorldImp->GetAutoDisableFlag(); } void World::SetAutoDisableFlag(bool flag) { - mWorldImp->SetAutoDisableFlag(flag); + mWorldImp->SetAutoDisableFlag(flag); } void World::SetContactSurfaceLayer(float depth) { - mWorldImp->SetContactSurfaceLayer(depth); + mWorldImp->SetContactSurfaceLayer(depth); } float World::GetContactSurfaceLayer() const { - return mWorldImp->GetContactSurfaceLayer(); + return mWorldImp->GetContactSurfaceLayer(); } bool World::ConstructInternal() { - return mWorldImp->ConstructInternal(); + mWorldImp->CreateWorld(); + + return (mWorldImp->GetWorldID() != 0); } void World::DestroyPhysicsObject() { - mWorldImp->DestroyPhysicsObject(); + static bool recurseLock = false; + if (recurseLock) + { + return; + } + + recurseLock = true; + + shared_ptr<Space> space = GetSpace(); + if (space.get() != 0) + { + space->DestroyPhysicsObject(); + } + + if (mWorldImp->GetWorldID() == 0) + { + return; + } + + mWorldImp->DestroyWorld(); + + recurseLock = false; } Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.h =================================================================== --- branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2009-12-02 10:06:02 UTC (rev 112) @@ -23,15 +23,15 @@ #define OXYGEN_WORLD_H #include <oxygen/oxygen_defines.h> +#include <oxygen/physicsserver/ode/odewrapper.h> #include <oxygen/physicsserver/physicsobject.h> namespace oxygen { class WorldInt; -class ODEWorld; -/** World encapsulates an ODE world object. It is a container for +/** World encapsulates a world object. It is a container for rigid bodies and joints. Objects in different worlds can not interact, for example rigid bodies from two different worlds can not collide. All the objects in a world exist at the same point in @@ -47,10 +47,10 @@ World(); virtual ~World(); - /** returns the ID of the managed ODE world */ - dWorldID GetODEWorld() const; + /** returns the ID of the managed world */ + long GetWorldID() const; - /** sets the gravity vector of this vorld */ + /** sets the gravity vector of this world */ void SetGravity(const salt::Vector3f& gravity); /** gets the gravity vector of this world */ @@ -105,17 +105,22 @@ void SetContactSurfaceLayer(float depth); float GetContactSurfaceLayer() const; - /** destroy the managed ODE object */ + /** destroy the managed world and all objects in it */ virtual void DestroyPhysicsObject(); protected: - /** creates them managed ODE world */ + /** creates a new physics world */ virtual bool ConstructInternal(); // // Members // private: + /** Pointer to the implementation of this class. + If a method contains engine-specific commands, these commands are + carried out in a subclass of WorldInt that has the right calls for + the desired physics engine. + */ boost::shared_ptr<WorldInt> mWorldImp; }; Modified: branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp =================================================================== --- branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2009-12-01 09:08:17 UTC (rev 111) +++ branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2009-12-02 10:06:02 UTC (rev 112) @@ -79,7 +79,7 @@ CalcSurfaceParam(contact.surface,handler->GetSurfaceParameter()); - dJointID joint = dJointCreateContact(mWorld->GetODEWorld(), + dJointID joint = dJointCreateContact((dWorldID) mWorld->GetWorldID(), mSpace->GetODEJointGroup(), &contact); dJointAttach (joint, myBody, collideeBody); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |