|
From: <a-...@us...> - 2010-01-26 11:23:50
|
Revision: 151
http://simspark.svn.sourceforge.net/simspark/?rev=151&view=rev
Author: a-held
Date: 2010-01-26 11:23:42 +0000 (Tue, 26 Jan 2010)
Log Message:
-----------
Corrected some code so that really nothing is stored in implementation objects
Modified Paths:
--------------
branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h
branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h
branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.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/odecontactjointhandler.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h
branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.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/world.cpp
branches/multiphys/spark/lib/oxygen/physicsserver/world.h
branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -32,11 +32,12 @@
ContactJointHandler::ContactJointHandler() : CollisionHandler()
{
mContactJointHandlerImp = boost::shared_ptr<ODEContactJointHandler>(new ODEContactJointHandler());
- mContactJointHandlerImp->Initialize();
+ mSurfaceParameter = mContactJointHandlerImp->Initialize();
}
ContactJointHandler::~ContactJointHandler()
{
+ delete mSurfaceParameter;
}
void
@@ -75,7 +76,7 @@
// calculate the resulting surface parameters
mContactJointHandlerImp->CalcSurfaceParam(
- contact, handler->GetSurfaceParameter());
+ contact, handler->GetSurfaceParameter(), mSurfaceParameter);
// create the contact joint and attach it to the body
long joint = mContactJointHandlerImp->CreateContactJoint(
@@ -87,120 +88,115 @@
void
ContactJointHandler::SetSurfaceParameter(const GenericSurfaceParameter& surface)
{
- mContactJointHandlerImp->SetSurfaceParameter(surface);
+ GenericSurfaceParameter* newSurface = (GenericSurfaceParameter*) &surface;
+ mSurfaceParameter = newSurface;
}
GenericSurfaceParameter&
ContactJointHandler::GetSurfaceParameter() const
{
- return mContactJointHandlerImp->GetSurfaceParameter();
+ return (GenericSurfaceParameter&) *mSurfaceParameter;
}
-void
-ContactJointHandler::SetContactMode(int mode, bool set)
-{
- mContactJointHandlerImp->SetContactMode(mode, set);
-}
-
int
ContactJointHandler::GetContactMode() const
{
- return mContactJointHandlerImp->GetContactMode();
+ return mContactJointHandlerImp->GetContactMode(mSurfaceParameter);
}
void
ContactJointHandler::SetContactBounceMode(bool set)
{
- mContactJointHandlerImp->SetContactBounceMode(set);
+ mContactJointHandlerImp->SetContactBounceMode(set, mSurfaceParameter);
}
void
ContactJointHandler::SetMinBounceVel(float vel)
{
- mContactJointHandlerImp->SetMinBounceVel(vel);
+ mContactJointHandlerImp->SetMinBounceVel(vel, mSurfaceParameter);
}
float
ContactJointHandler::GetMinBounceVel() const
{
- return mContactJointHandlerImp->GetMinBounceVel();
+ return mContactJointHandlerImp->GetMinBounceVel(mSurfaceParameter);
}
void
ContactJointHandler::SetBounceValue(float bounce)
{
- mContactJointHandlerImp->SetBounceValue(bounce);
+ mContactJointHandlerImp->SetBounceValue(bounce, mSurfaceParameter);
}
float
ContactJointHandler::GetBounceValue() const
{
- return mContactJointHandlerImp->GetBounceValue();
+ return mContactJointHandlerImp->GetBounceValue(mSurfaceParameter);
}
void
ContactJointHandler::SetContactSoftERPMode(bool set)
{
- mContactJointHandlerImp->SetContactSoftERPMode(set);
+ mContactJointHandlerImp->SetContactSoftERPMode(set, mSurfaceParameter);
}
void
ContactJointHandler::SetContactSoftERP(float erp)
{
- mContactJointHandlerImp->SetContactSoftERP(erp);
+ mContactJointHandlerImp->SetContactSoftERP(erp, mSurfaceParameter);
}
float
ContactJointHandler::GetContactSoftERP() const
{
- return mContactJointHandlerImp->GetContactSoftERP();
+ return mContactJointHandlerImp->GetContactSoftERP(mSurfaceParameter);
}
void
ContactJointHandler::SetContactSoftCFMMode(bool set)
{
- mContactJointHandlerImp->SetContactSoftCFMMode(set);
+ mContactJointHandlerImp->SetContactSoftCFMMode(set, mSurfaceParameter);
}
void
ContactJointHandler::SetContactSoftCFM(float cfm)
{
- mContactJointHandlerImp->SetContactSoftCFM(cfm);
+ mContactJointHandlerImp->SetContactSoftCFM(cfm, mSurfaceParameter);
}
float ContactJointHandler::GetContactSoftCFM() const
{
- return mContactJointHandlerImp->GetContactSoftCFM();
+ return mContactJointHandlerImp->GetContactSoftCFM(mSurfaceParameter);
}
void ContactJointHandler::SetContactSlipMode (bool set)
{
- mContactJointHandlerImp->SetContactSlipMode(set);
+ mContactJointHandlerImp->SetContactSlipMode(set, mSurfaceParameter);
}
void ContactJointHandler::SetContactSlip(float slip)
{
- mContactJointHandlerImp->SetContactSlip(slip);
+ mContactJointHandlerImp->SetContactSlip(slip, mSurfaceParameter);
}
float
ContactJointHandler::GetContactSlip1() const
{
- return mContactJointHandlerImp->GetContactSlip1();
+ return mContactJointHandlerImp->GetContactSlip1(mSurfaceParameter);
}
float
ContactJointHandler::GetContactSlip2() const
{
- return mContactJointHandlerImp->GetContactSlip2();
+ return mContactJointHandlerImp->GetContactSlip2(mSurfaceParameter);
}
void ContactJointHandler::SetContactMu(float mu)
{
- mContactJointHandlerImp->SetContactMu(mu);
+ mContactJointHandlerImp->SetContactMu(mu, mSurfaceParameter);
}
float ContactJointHandler::GetContactMu() const
{
- return mContactJointHandlerImp->GetContactMu();
+ return mContactJointHandlerImp->GetContactMu(mSurfaceParameter);
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/contactjointhandler.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -70,9 +70,6 @@
*/
GenericSurfaceParameter& GetSurfaceParameter() const;
- /** sets or resets a contact mode flag in the surface parameter*/
- void SetContactMode(int mode, bool set);
-
/** returns the current set of contact mode flags in the surface
parameter
*/
@@ -142,6 +139,8 @@
protected:
boost::shared_ptr<ContactJointHandlerInt> mContactJointHandlerImp;
+
+ GenericSurfaceParameter* mSurfaceParameter;
};
DECLARE_CLASS(ContactJointHandler);
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/int/contactjointhandlerint.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -35,36 +35,31 @@
{
public:
virtual float MixValues(const float v1, const float v2, const int n) const = 0;
- virtual void Initialize() = 0;
+ virtual GenericSurfaceParameter* Initialize() = 0;
virtual long RetrieveBody(long geomID) = 0;
virtual long CreateContactJoint(long worldID, long jointGroupID, GenericContact& contact) = 0;
virtual void AttachContactJoint(long jointID, long bodyID1, long bodyID2) = 0;
- virtual void CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam) = 0;
-
- virtual void SetSurfaceParameter(const GenericSurfaceParameter& surface) = 0;
- virtual GenericSurfaceParameter& GetSurfaceParameter() const = 0;
- virtual void SetContactMode(int mode, bool set) = 0;
- virtual int GetContactMode() const = 0;
- virtual void SetContactBounceMode(bool set) = 0;
- virtual void SetBounceValue(float bounce) = 0;
- virtual float GetBounceValue() const = 0;
- virtual void SetMinBounceVel(float vel) = 0;
- virtual float GetMinBounceVel() const = 0;
- virtual void SetContactSoftERPMode(bool set) = 0;
- virtual void SetContactSoftERP(float erp) = 0;
- virtual float GetContactSoftERP() const = 0;
- virtual void SetContactSoftCFMMode(bool set) = 0;
- virtual void SetContactSoftCFM(float cfm) = 0;
- virtual float GetContactSoftCFM() const = 0;
- virtual void SetContactSlipMode (bool set) = 0;
- virtual void SetContactSlip(float slip) = 0;
- virtual float GetContactSlip1() const = 0;
- virtual float GetContactSlip2() const = 0;
- virtual void SetContactMu(float mu) = 0;
- virtual float GetContactMu() const = 0;
-
- /** the ODE surface parameters of the created contact joint */
- dSurfaceParameters mSurfaceParameter;
+ virtual void CalcSurfaceParam(GenericContact& surface,
+ GenericSurfaceParameter& collideeParam,
+ GenericSurfaceParameter* surfacePtr) = 0;
+ virtual int GetContactMode(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetContactBounceMode(bool set, GenericSurfaceParameter* surface) = 0;
+ virtual void SetBounceValue(float bounce, GenericSurfaceParameter* surface) = 0;
+ virtual float GetBounceValue(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetMinBounceVel(float vel, GenericSurfaceParameter* surface) = 0;
+ virtual float GetMinBounceVel(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface) = 0;
+ virtual void SetContactSoftERP(float erp, GenericSurfaceParameter* surface) = 0;
+ virtual float GetContactSoftERP(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface) = 0;
+ virtual void SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface) = 0;
+ virtual float GetContactSoftCFM(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetContactSlipMode (bool set, GenericSurfaceParameter* surface) = 0;
+ virtual void SetContactSlip(float slip, GenericSurfaceParameter* surface) = 0;
+ virtual float GetContactSlip1(GenericSurfaceParameter* surface) const = 0;
+ virtual float GetContactSlip2(GenericSurfaceParameter* surface) const = 0;
+ virtual void SetContactMu(float mu, GenericSurfaceParameter* surface) = 0;
+ virtual float GetContactMu(GenericSurfaceParameter* surface) const = 0;
};
} //namespace oxygen
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/int/jointint.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -39,14 +39,18 @@
{
public:
- virtual void DestroyJoint(long jointID) = 0;
+ virtual void DestroyJoint(long jointID,
+ boost::shared_ptr<GenericJointFeedback> feedback) = 0;
virtual void Attach(long bodyID1, long bodiID2, long jointID) = 0;
virtual int GetType(long jointID) const = 0;
virtual long GetBodyID(int idx, long jointID) = 0;
- virtual void EnableFeedback(bool enable, long jointID) = 0;
+ virtual void EnableFeedback(bool enable, long jointID,
+ boost::shared_ptr<GenericJointFeedback> feedback) = 0;
virtual bool FeedbackEnabled(long jointID) const = 0;
- virtual salt::Vector3f GetFeedbackForce(int idx) const = 0;
- virtual salt::Vector3f GetFeedbackTorque(int idx) const = 0;
+ virtual salt::Vector3f GetFeedbackForce(int idx,
+ boost::shared_ptr<GenericJointFeedback> feedback) const = 0;
+ virtual salt::Vector3f GetFeedbackTorque(int idx,
+ boost::shared_ptr<GenericJointFeedback> feedback) const = 0;
virtual void SetFudgeFactor(int idx, float fudge_factor, long jointID) = 0;
virtual float GetFudgeFactor(int idx, long jointID) const = 0;
virtual void SetBounce(int idx, float bounce, long jointID) = 0;
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/int/worldint.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -32,23 +32,19 @@
{
public:
- 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;
- virtual float GetERP() const = 0;
- virtual void SetCFM(float cfm) = 0;
- virtual float GetCFM() const = 0;
- virtual void Step(float deltaTime) = 0;
- virtual bool GetAutoDisableFlag() const = 0;
- virtual void SetAutoDisableFlag(bool flag) = 0;
- virtual void SetContactSurfaceLayer(float depth) = 0;
- virtual float GetContactSurfaceLayer() const = 0;
- virtual void CreateWorld() = 0;
- virtual void DestroyWorld() = 0;
-
-protected:
- long mWorldID;
+ virtual void SetGravity(const salt::Vector3f& gravity, long worldID) = 0;
+ virtual salt::Vector3f GetGravity(long worldID) const = 0;
+ virtual void SetERP(float erp, long worldID) = 0;
+ virtual float GetERP(long worldID) const = 0;
+ virtual void SetCFM(float cfm, long worldID) = 0;
+ virtual float GetCFM(long worldID) const = 0;
+ virtual void Step(float deltaTime, long worldID) = 0;
+ virtual bool GetAutoDisableFlag(long worldID) const = 0;
+ virtual void SetAutoDisableFlag(bool flag, long worldID) = 0;
+ virtual void SetContactSurfaceLayer(float depth, long worldID) = 0;
+ virtual float GetContactSurfaceLayer(long worldID) const = 0;
+ virtual long CreateWorld() = 0;
+ virtual void DestroyWorld(long worldID) = 0;
};
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -208,7 +208,7 @@
void Joint::EnableFeedback(bool enable)
{
- mJointImp->EnableFeedback(enable, mJointID);
+ mJointImp->EnableFeedback(enable, mJointID, mFeedback);
}
bool Joint::FeedBackEnabled() const
@@ -218,12 +218,12 @@
Vector3f Joint::GetFeedbackForce(EBodyIndex idx) const
{
- return mJointImp->GetFeedbackForce(idx);
+ return mJointImp->GetFeedbackForce(idx, mFeedback);
}
Vector3f Joint::GetFeedbackTorque(EBodyIndex idx) const
{
- return mJointImp->GetFeedbackTorque(idx);
+ return mJointImp->GetFeedbackTorque(idx, mFeedback);
}
void Joint::SetFudgeFactor(EAxisIndex idx, float fudge_factor)
@@ -374,7 +374,7 @@
}
EnableFeedback(false);
- mJointImp->DestroyJoint(mJointID);
+ mJointImp->DestroyJoint(mJointID, mFeedback);
mJointID = 0;
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/joint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/joint.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -279,11 +279,15 @@
/** gets the node at 'path' and tries a cast to Body */
boost::shared_ptr<RigidBody> GetBody(const std::string& path);
-protected:
+ //
+ // Members
+ //
+
/** the ID of the managed joint */
long mJointID;
+
+ boost::shared_ptr<GenericJointFeedback> mFeedback;
-protected:
/** The maximum joint speed in rad, valid for both hingejoint and universaljoint */
float mJointMaxSpeed1;
bool mIsLimitJointMaxSpeed1;
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -25,18 +25,22 @@
}
-void ODEContactJointHandler::Initialize(){
+GenericSurfaceParameter* ODEContactJointHandler::Initialize(){
+ dSurfaceParameters* ODESurface = new dSurfaceParameters();
+
// set up default contact surface parameters
- mSurfaceParameter.mode = dContactBounce;
- mSurfaceParameter.mu = dInfinity;
- mSurfaceParameter.bounce = 0.8f;
- mSurfaceParameter.bounce_vel = 2.0f;
+ ODESurface->mode = dContactBounce;
+ ODESurface->mu = dInfinity;
+ ODESurface->bounce = 0.8f;
+ ODESurface->bounce_vel = 2.0f;
// In contactjointhandler_c.cpp, setContactSlip function, only
// accept one parameter, so two parameter is a mistake, and then
// these two value will be not initialized, but slipe mode is open
- mSurfaceParameter.slip1 = 5e-3;
- mSurfaceParameter.slip2 = 5e-3;
+ ODESurface->slip1 = 5e-3;
+ ODESurface->slip2 = 5e-3;
+
+ return (GenericSurfaceParameter*) ODESurface;
}
long ODEContactJointHandler::RetrieveBody(long geomID){
@@ -66,11 +70,14 @@
}
void
-ODEContactJointHandler::CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam){
+ODEContactJointHandler::CalcSurfaceParam(GenericContact& surface,
+ GenericSurfaceParameter& collideeParam,
+ GenericSurfaceParameter* surfacePtr){
dContact& ODEContact = (dContact&) surface;
dSurfaceParameters& ODEParams = (dSurfaceParameters&) collideeParam;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surfacePtr;
- CalcSurfaceParamInternal(ODEContact.surface, ODEParams);
+ CalcSurfaceParamInternal(ODEContact.surface, ODEParams, ODESurface);
}
float
@@ -99,209 +106,215 @@
void
ODEContactJointHandler::CalcSurfaceParamInternal(dSurfaceParameters& surface,
- const dSurfaceParameters& collideeParam)
+ const dSurfaceParameters& collideeParam,
+ const dSurfaceParameters* surfacePtr)
{
// init surface
surface.mode = 0;
// calculate average mu; mu can be dInfinity, so first multiply with
// 0.5 and the sum up to avoid a range error
- surface.mu = mSurfaceParameter.mu*0.5f + collideeParam.mu*0.5f;
+ surface.mu = surfacePtr->mu*0.5f + collideeParam.mu*0.5f;
// soft cfm
const int nCfm =
- ((mSurfaceParameter.mode & dContactSoftCFM) ? 1:0) +
+ ((surfacePtr->mode & dContactSoftCFM) ? 1:0) +
((collideeParam.mode & dContactSoftCFM) ? 2:0);
if (nCfm>0)
{
surface.soft_cfm = MixValues
- (mSurfaceParameter.soft_cfm, collideeParam.soft_cfm, nCfm);
+ (surfacePtr->soft_cfm, collideeParam.soft_cfm, nCfm);
surface.mode |= dContactSoftCFM;
}
// soft_erp
const int nErp =
- ((mSurfaceParameter.mode & dContactSoftERP) ? 1:0) +
+ ((surfacePtr->mode & dContactSoftERP) ? 1:0) +
((collideeParam.mode & dContactSoftERP) ? 2:0);
if (nErp>0)
{
surface.soft_erp = MixValues
- (mSurfaceParameter.soft_erp, collideeParam.soft_erp, nErp);
+ (surfacePtr->soft_erp, collideeParam.soft_erp, nErp);
surface.mode |= dContactSoftERP;
}
// bounce
const int nBounce =
- ((mSurfaceParameter.mode & dContactBounce) ? 1:0) +
+ ((surfacePtr->mode & dContactBounce) ? 1:0) +
((collideeParam.mode & dContactBounce) ? 2:0);
if (nBounce>0)
{
surface.bounce = MixValues
- (mSurfaceParameter.bounce, collideeParam.bounce, nBounce);
+ (surfacePtr->bounce, collideeParam.bounce, nBounce);
surface.bounce_vel = MixValues
- (mSurfaceParameter.bounce_vel, collideeParam.bounce_vel, nBounce);
+ (surfacePtr->bounce_vel, collideeParam.bounce_vel, nBounce);
surface.mode |= dContactBounce;
}
// slip1
const int nSlip1 =
- ((mSurfaceParameter.mode & dContactSlip1) ? 1 : 0) +
+ ((surfacePtr->mode & dContactSlip1) ? 1 : 0) +
((collideeParam.mode & dContactSlip1) ? 2 : 0);
if (nSlip1 > 0)
{
surface.slip1 = MixValues
- (mSurfaceParameter.slip1, collideeParam.slip1, nSlip1);
+ (surfacePtr->slip1, collideeParam.slip1, nSlip1);
surface.mode |= dContactSlip1;
}
// slip2
const int nSlip2 =
- ((mSurfaceParameter.mode & dContactSlip2) ? 1 : 0) +
+ ((surfacePtr->mode & dContactSlip2) ? 1 : 0) +
((collideeParam.mode & dContactSlip2) ? 2 : 0);
if (nSlip2 > 0)
{
surface.slip2 = MixValues
- (mSurfaceParameter.slip2, collideeParam.slip2, nSlip2);
+ (surfacePtr->slip2, collideeParam.slip2, nSlip2);
surface.mode |= dContactSlip2;
}
}
void
-ODEContactJointHandler::SetSurfaceParameter(const GenericSurfaceParameter& surface)
+ODEContactJointHandler::SetContactMode(int mode, bool set, dSurfaceParameters* ODESurface)
{
- dSurfaceParameters& ODESurface = (dSurfaceParameters&) surface;
- mSurfaceParameter = ODESurface;
-}
-
-GenericSurfaceParameter&
-ODEContactJointHandler::GetSurfaceParameter() const
-{
- return (GenericSurfaceParameter&) mSurfaceParameter;
-}
-
-void
-ODEContactJointHandler::SetContactMode(int mode, bool set)
-{
if (set)
{
- mSurfaceParameter.mode |= mode;
+ ODESurface->mode |= mode;
} else
{
- mSurfaceParameter.mode &= ~mode;
+ ODESurface->mode &= ~mode;
}
}
int
-ODEContactJointHandler::GetContactMode() const
+ODEContactJointHandler::GetContactMode(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.mode;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->mode;
}
void
-ODEContactJointHandler::SetContactBounceMode(bool set)
+ODEContactJointHandler::SetContactBounceMode(bool set, GenericSurfaceParameter* surface)
{
- SetContactMode(dContactBounce,set);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ SetContactMode(dContactBounce, set, ODESurface);
}
void
-ODEContactJointHandler::SetMinBounceVel(float vel)
+ODEContactJointHandler::SetMinBounceVel(float vel, GenericSurfaceParameter* surface)
{
- mSurfaceParameter.bounce_vel = std::max<float>(0.0f,vel);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ ODESurface->bounce_vel = std::max<float>(0.0f,vel);
}
float
-ODEContactJointHandler::GetMinBounceVel() const
+ODEContactJointHandler::GetMinBounceVel(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.bounce_vel;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->bounce_vel;
}
void
-ODEContactJointHandler::SetBounceValue(float bounce)
+ODEContactJointHandler::SetBounceValue(float bounce, GenericSurfaceParameter* surface)
{
- mSurfaceParameter.bounce = std::max<float>(0.0f,bounce);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ ODESurface->bounce = std::max<float>(0.0f,bounce);
}
float
-ODEContactJointHandler::GetBounceValue() const
+ODEContactJointHandler::GetBounceValue(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.bounce;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->bounce;
}
void
-ODEContactJointHandler::SetContactSoftERPMode(bool set)
+ODEContactJointHandler::SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface)
{
- SetContactMode(dContactSoftERP,set);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ SetContactMode(dContactSoftERP, set, ODESurface);
}
void
-ODEContactJointHandler::SetContactSoftERP(float erp)
-{
+ODEContactJointHandler::SetContactSoftERP(float erp, GenericSurfaceParameter* surface)
+{
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
salt::gClamp(erp,0.0f,1.0f);
- mSurfaceParameter.soft_erp = erp;
+ ODESurface->soft_erp = erp;
}
float
-ODEContactJointHandler::GetContactSoftERP() const
+ODEContactJointHandler::GetContactSoftERP(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.soft_erp;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->soft_erp;
}
void
-ODEContactJointHandler::SetContactSoftCFMMode(bool set)
+ODEContactJointHandler::SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface)
{
- SetContactMode(dContactSoftCFM,set);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ SetContactMode(dContactSoftCFM, set, ODESurface);
}
void
-ODEContactJointHandler::SetContactSoftCFM(float cfm)
+ODEContactJointHandler::SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface)
{
- mSurfaceParameter.soft_cfm = std::max<float>(0.0f,cfm);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ ODESurface->soft_cfm = std::max<float>(0.0f,cfm);
}
-float ODEContactJointHandler::GetContactSoftCFM() const
+float ODEContactJointHandler::GetContactSoftCFM(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.soft_cfm;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->soft_cfm;
}
-void ODEContactJointHandler::SetContactSlipMode (bool set)
+void ODEContactJointHandler::SetContactSlipMode (bool set, GenericSurfaceParameter* surface)
{
- SetContactMode(dContactSlip1,set);
- SetContactMode(dContactSlip2,set);
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ SetContactMode(dContactSlip1,set,ODESurface);
+ SetContactMode(dContactSlip2,set,ODESurface);
}
-void ODEContactJointHandler::SetContactSlip(float slip)
+void ODEContactJointHandler::SetContactSlip(float slip, GenericSurfaceParameter* surface)
{
- mSurfaceParameter.slip1 = slip;
- mSurfaceParameter.slip2 = slip;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ ODESurface->slip1 = slip;
+ ODESurface->slip2 = slip;
}
float
-ODEContactJointHandler::GetContactSlip1() const
+ODEContactJointHandler::GetContactSlip1(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.slip1;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->slip1;
}
float
-ODEContactJointHandler::GetContactSlip2() const
+ODEContactJointHandler::GetContactSlip2(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.slip2;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->slip2;
}
-void ODEContactJointHandler::SetContactMu(float mu)
+void ODEContactJointHandler::SetContactMu(float mu, GenericSurfaceParameter* surface)
{
- mSurfaceParameter.mu = mu;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ ODESurface->mu = mu;
}
-float ODEContactJointHandler::GetContactMu() const
+float ODEContactJointHandler::GetContactMu(GenericSurfaceParameter* surface) const
{
- return mSurfaceParameter.mu;
+ dSurfaceParameters* ODESurface = (dSurfaceParameters*) surface;
+ return ODESurface->mu;
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odecontactjointhandler.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -32,38 +32,38 @@
{
public:
ODEContactJointHandler();
- void Initialize();
+ GenericSurfaceParameter* Initialize();
long RetrieveBody(long geomID);
long CreateContactJoint(long worldID, long jointGroupID, GenericContact& contact);
void AttachContactJoint(long jointID, long bodyID1, long bodyID2);
- void CalcSurfaceParam(GenericContact& surface, GenericSurfaceParameter& collideeParam);
-
- void SetSurfaceParameter(const GenericSurfaceParameter& surface);
- GenericSurfaceParameter& GetSurfaceParameter() const;
- void SetContactMode(int mode, bool set);
- int GetContactMode() const;
- void SetContactBounceMode(bool set);
- void SetBounceValue(float bounce);
- float GetBounceValue() const;
- void SetMinBounceVel(float vel);
- float GetMinBounceVel() const;
- void SetContactSoftERPMode(bool set);
- void SetContactSoftERP(float erp);
- float GetContactSoftERP() const;
- void SetContactSoftCFMMode(bool set);
- void SetContactSoftCFM(float cfm);
- float GetContactSoftCFM() const;
- void SetContactSlipMode (bool set);
- void SetContactSlip(float slip);
- float GetContactSlip1() const;
- float GetContactSlip2() const;
- void SetContactMu(float mu);
- float GetContactMu() const;
+ void CalcSurfaceParam(GenericContact& surface,
+ GenericSurfaceParameter& collideeParam,
+ GenericSurfaceParameter* surfacePtr);
+ int GetContactMode(GenericSurfaceParameter* surface) const;
+ void SetContactBounceMode(bool set, GenericSurfaceParameter* surface);
+ void SetBounceValue(float bounce, GenericSurfaceParameter* surface);
+ float GetBounceValue(GenericSurfaceParameter* surface) const;
+ void SetMinBounceVel(float vel, GenericSurfaceParameter* surface);
+ float GetMinBounceVel(GenericSurfaceParameter* surface) const;
+ void SetContactSoftERPMode(bool set, GenericSurfaceParameter* surface);
+ void SetContactSoftERP(float erp, GenericSurfaceParameter* surface);
+ float GetContactSoftERP(GenericSurfaceParameter* surface) const;
+ void SetContactSoftCFMMode(bool set, GenericSurfaceParameter* surface);
+ void SetContactSoftCFM(float cfm, GenericSurfaceParameter* surface);
+ float GetContactSoftCFM(GenericSurfaceParameter* surface) const;
+ void SetContactSlipMode (bool set, GenericSurfaceParameter* surface);
+ void SetContactSlip(float slip, GenericSurfaceParameter* surface);
+ float GetContactSlip1(GenericSurfaceParameter* surface) const;
+ float GetContactSlip2(GenericSurfaceParameter* surface) const;
+ void SetContactMu(float mu, GenericSurfaceParameter* surface);
+ float GetContactMu(GenericSurfaceParameter* surface) const;
protected:
f_inline float MixValues(const float v1, const float v2, const int n) const;
void CalcSurfaceParamInternal(dSurfaceParameters& surface,
- const dSurfaceParameters& collideeParam);
+ const dSurfaceParameters& collideeParam,
+ const dSurfaceParameters* ODESurface);
+ void SetContactMode(int mode, bool set, dSurfaceParameters* ODESurface);
};
} //namespace oxygen
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -57,26 +57,32 @@
return (long) ODEBodyID;
}
-void ODEJoint::EnableFeedback(bool enable, long jointID)
+void ODEJoint::EnableFeedback(bool enable, long jointID,
+ shared_ptr<GenericJointFeedback> feedback)
{
dJointID ODEJoint = (dJointID) jointID;
if (enable)
{
- if (mFeedback.get() == 0)
+ if (feedback.get() == 0)
{
- mFeedback = shared_ptr<dJointFeedback>(new dJointFeedback());
- memset(mFeedback.get(),0,sizeof(dJointFeedback));
+ feedback = shared_ptr<GenericJointFeedback>(
+ (GenericJointFeedback*) new dJointFeedback());
+ memset(feedback.get(),0,sizeof(dJointFeedback));
}
} else
{
- if (mFeedback.get() != 0)
+ if (feedback.get() != 0)
{
- mFeedback.reset();
+ feedback.reset();
}
}
- dJointSetFeedback(ODEJoint,mFeedback.get());
+ cout << "bla";
+ std::cin;
+ dJointFeedback* ODEFeedback = (dJointFeedback*) feedback.get();
+
+ dJointSetFeedback(ODEJoint,ODEFeedback);
}
bool ODEJoint::FeedbackEnabled(long jointID) const
@@ -85,9 +91,10 @@
return (dJointGetFeedback(ODEJoint) != 0);
}
-Vector3f ODEJoint::GetFeedbackForce(int idx) const
+Vector3f ODEJoint::GetFeedbackForce(int idx,
+ shared_ptr<GenericJointFeedback> feedback) const
{
- dJointFeedback* fb = mFeedback.get();
+ dJointFeedback* fb = (dJointFeedback*) feedback.get();
if (fb == 0)
{
return Vector3f(0,0,0);
@@ -114,9 +121,10 @@
}
}
-Vector3f ODEJoint::GetFeedbackTorque(int idx) const
+Vector3f ODEJoint::GetFeedbackTorque(int idx,
+ shared_ptr<GenericJointFeedback> feedback) const
{
- dJointFeedback* fb = mFeedback.get();
+ dJointFeedback* fb = (dJointFeedback*) feedback.get();
if (fb == 0)
{
return Vector3f(0,0,0);
@@ -283,10 +291,11 @@
return GetParameter(dParamFMax + (idx * dParamGroup), jointID);
}
-void ODEJoint::DestroyJoint(long jointID)
+void ODEJoint::DestroyJoint(long jointID,
+ shared_ptr<GenericJointFeedback> feedback)
{
dJointID ODEJoint = (dJointID) jointID;
- EnableFeedback(false, jointID);
+ EnableFeedback(false, jointID, feedback);
dJointDestroy(ODEJoint);
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odejoint.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -22,6 +22,7 @@
#ifndef OXYGEN_ODEJOINT_H
#define OXYGEN_ODEJOINT_H
+#include <oxygen/physicsserver/genericphysicsobjects.h>
#include <oxygen/physicsserver/ode/odephysicsobject.h>
#include <oxygen/physicsserver/int/jointint.h>
@@ -33,14 +34,18 @@
public:
ODEJoint();
- virtual void DestroyJoint(long jointID);
- virtual void Attach(long bodyID1, long bodiID2, long jointID);
+ virtual void DestroyJoint(long jointID,
+ boost::shared_ptr<GenericJointFeedback> feedback);
+ virtual void Attach(long bodyID1, long bodyID2, long jointID);
int GetType(long jointID) const;
long GetBodyID(int idx, long jointID);
- void EnableFeedback(bool enable, long jointID);
+ void EnableFeedback(bool enable, long jointID,
+ boost::shared_ptr<GenericJointFeedback> feedback);
bool FeedbackEnabled(long jointID) const;
- salt::Vector3f GetFeedbackForce(int idx) const;
- salt::Vector3f GetFeedbackTorque(int idx) const;
+ salt::Vector3f GetFeedbackForce(int idx,
+ boost::shared_ptr<GenericJointFeedback> feedback) const;
+ salt::Vector3f GetFeedbackTorque(int idx,
+ boost::shared_ptr<GenericJointFeedback> feedback) const;
void SetFudgeFactor(int idx, float fudge_factor, long jointID);
float GetFudgeFactor(int idx, long jointID) const;
void SetBounce(int idx, float bounce, long jointID);
@@ -69,14 +74,9 @@
float GetAngularMotorVelocity(int idx, long jointID) const;
void SetMaxMotorForce(int idx, float f, long jointID);
float GetMaxMotorForce(int idx, long jointID) const;
- virtual void SetParameter(int parameter, float value, long jointID);
- virtual float GetParameter(int parameter, long jointID) const;
+ void SetParameter(int parameter, float value, long jointID);
+ float GetParameter(int parameter, long jointID) const;
void OnLink(long jointID, Joint* joint);
-
-protected:
- //It is encouraged to not store any member variables in the implementation.
- //This can cause major problems. However, here, I found no way to avoid it.
- boost::shared_ptr<dJointFeedback> mFeedback;
};
} //namespace oxygen
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -21,90 +21,94 @@
#include <oxygen/physicsserver/ode/odeworld.h>
#include <oxygen/physicsserver/space.h>
-#include <oxygen/sceneserver/scene.h>
using namespace boost;
using namespace oxygen;
using namespace salt;
ODEWorld::ODEWorld() : ODEPhysicsObject(){
- mWorldID = 0;
}
-long ODEWorld::GetWorldID() const
+void ODEWorld::SetGravity(const Vector3f& gravity, long worldID)
{
- return mWorldID;
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldSetGravity(ODEWorld,
+ gravity.x(),
+ gravity.y(),
+ gravity.z()
+ );
}
-void ODEWorld::SetGravity(const Vector3f& gravity)
+salt::Vector3f ODEWorld::GetGravity(long worldID) const
{
- dWorldSetGravity(mODEWorld,
- gravity.x(),
- gravity.y(),
- gravity.z()
- );
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dVector3 dGravity;
+ dWorldGetGravity(ODEWorld,dGravity);
+ return Vector3f(dGravity[0],dGravity[1],dGravity[2]);
}
-salt::Vector3f ODEWorld::GetGravity() const
+void ODEWorld::SetERP(float erp, long worldID)
{
- dVector3 dGravity;
- dWorldGetGravity(mODEWorld,dGravity);
- return Vector3f(dGravity[0],dGravity[1],dGravity[2]);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldSetERP(ODEWorld, erp);
}
-void ODEWorld::SetERP(float erp)
+float ODEWorld::GetERP(long worldID) const
{
- dWorldSetERP(mODEWorld, erp);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ return dWorldGetERP(ODEWorld);
}
-float ODEWorld::GetERP() const
+void ODEWorld::SetCFM(float cfm, long worldID)
{
- return dWorldGetERP(mODEWorld);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldSetCFM(ODEWorld, cfm);
}
-void ODEWorld::SetCFM(float cfm)
+float ODEWorld::GetCFM(long worldID) const
{
- dWorldSetCFM(mODEWorld, cfm);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ return dWorldGetCFM(ODEWorld);
}
-float ODEWorld::GetCFM() const
+void ODEWorld::Step(float deltaTime, long worldID)
{
- return dWorldGetCFM(mODEWorld);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldStep(ODEWorld, deltaTime);
}
-void ODEWorld::Step(float deltaTime)
+bool ODEWorld::GetAutoDisableFlag(long worldID) const
{
- dWorldStep(mODEWorld, deltaTime);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ return (dWorldGetAutoDisableFlag(ODEWorld) == 1);
}
-bool ODEWorld::GetAutoDisableFlag() const
+void ODEWorld::SetAutoDisableFlag(bool flag, long worldID)
{
- return (dWorldGetAutoDisableFlag(mODEWorld) == 1);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldSetAutoDisableFlag(ODEWorld, static_cast<int>(flag));
}
-void ODEWorld::SetAutoDisableFlag(bool flag)
+void ODEWorld::SetContactSurfaceLayer(float depth, long worldID)
{
- dWorldSetAutoDisableFlag(mODEWorld, static_cast<int>(flag));
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldSetContactSurfaceLayer(ODEWorld, depth);
}
-void ODEWorld::SetContactSurfaceLayer(float depth)
+float ODEWorld::GetContactSurfaceLayer(long worldID) const
{
- dWorldSetContactSurfaceLayer(mODEWorld, depth);
+ dWorldID ODEWorld = (dWorldID) worldID;
+ return dWorldGetContactSurfaceLayer(ODEWorld);
}
-float ODEWorld::GetContactSurfaceLayer() const
+long ODEWorld::CreateWorld()
{
- return dWorldGetContactSurfaceLayer(mODEWorld);
+ dWorldID ODEWorld = dWorldCreate();
+ return (long) ODEWorld;
}
-void ODEWorld::CreateWorld()
+void ODEWorld::DestroyWorld(long worldID)
{
- mODEWorld = dWorldCreate();
- mWorldID = (long) mODEWorld;
+ dWorldID ODEWorld = (dWorldID) worldID;
+ dWorldDestroy(ODEWorld);
}
-
-void ODEWorld::DestroyWorld()
-{
- dWorldDestroy(mODEWorld);
- mWorldID = 0;
-}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/ode/odeworld.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -35,23 +35,19 @@
public:
ODEWorld();
- long GetWorldID() const;
- void SetGravity(const salt::Vector3f& gravity);
- salt::Vector3f GetGravity() const;
- void SetERP(float erp);
- float GetERP() const;
- void SetCFM(float cfm);
- float GetCFM() const;
- void Step(float deltaTime);
- bool GetAutoDisableFlag() const;
- void SetAutoDisableFlag(bool flag);
- void SetContactSurfaceLayer(float depth);
- float GetContactSurfaceLayer() const;
- void CreateWorld();
- void DestroyWorld();
-
-private:
- dWorldID mODEWorld;
+ void SetGravity(const salt::Vector3f& gravity, long worldID);
+ salt::Vector3f GetGravity(long worldID) const;
+ void SetERP(float erp, long worldID);
+ float GetERP(long worldID) const;
+ void SetCFM(float cfm, long worldID);
+ float GetCFM(long worldID) const;
+ void Step(float deltaTime, long worldID);
+ bool GetAutoDisableFlag(long worldID) const;
+ void SetAutoDisableFlag(bool flag, long worldID);
+ void SetContactSurfaceLayer(float depth, long worldID);
+ float GetContactSurfaceLayer(long worldID) const;
+ long CreateWorld();
+ void DestroyWorld(long worldID);
};
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/world.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -39,69 +39,69 @@
long World::GetWorldID() const
{
- return mWorldImp->GetWorldID();
+ return mWorldID;
}
void World::SetGravity(const Vector3f& gravity)
{
- mWorldImp->SetGravity(gravity);
+ mWorldImp->SetGravity(gravity, mWorldID);
}
salt::Vector3f World::GetGravity() const
{
- return mWorldImp->GetGravity();
+ return mWorldImp->GetGravity(mWorldID);
}
void World::SetERP(float erp)
{
- mWorldImp->SetERP(erp);
+ mWorldImp->SetERP(erp, mWorldID);
}
float World::GetERP() const
{
- return mWorldImp->GetERP();
+ return mWorldImp->GetERP(mWorldID);
}
void World::SetCFM(float cfm)
{
- mWorldImp->SetCFM(cfm);
+ mWorldImp->SetCFM(cfm, mWorldID);
}
float World::GetCFM() const
{
- return mWorldImp->GetCFM();
+ return mWorldImp->GetCFM(mWorldID);
}
void World::Step(float deltaTime)
{
- mWorldImp->Step(deltaTime);
+ mWorldImp->Step(deltaTime, mWorldID);
}
bool World::GetAutoDisableFlag() const
{
- return mWorldImp->GetAutoDisableFlag();
+ return mWorldImp->GetAutoDisableFlag(mWorldID);
}
void World::SetAutoDisableFlag(bool flag)
{
- mWorldImp->SetAutoDisableFlag(flag);
+ mWorldImp->SetAutoDisableFlag(flag, mWorldID);
}
void World::SetContactSurfaceLayer(float depth)
{
- mWorldImp->SetContactSurfaceLayer(depth);
+ mWorldImp->SetContactSurfaceLayer(depth, mWorldID);
}
float World::GetContactSurfaceLayer() const
{
- return mWorldImp->GetContactSurfaceLayer();
+ return mWorldImp->GetContactSurfaceLayer(mWorldID);
}
bool World::ConstructInternal()
{
- mWorldImp->CreateWorld();
+ mWorldID = mWorldImp->CreateWorld();
- return (mWorldImp->GetWorldID() != 0);
+ return (mWorldID != 0);
}
void World::DestroyPhysicsObject()
@@ -120,12 +120,13 @@
space->DestroyPhysicsObject();
}
- if (mWorldImp->GetWorldID() == 0)
+ if (mWorldID == 0)
{
return;
}
- mWorldImp->DestroyWorld();
+ mWorldImp->DestroyWorld(mWorldID);
+ mWorldID = 0;
recurseLock = false;
}
Modified: branches/multiphys/spark/lib/oxygen/physicsserver/world.h
===================================================================
--- branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/lib/oxygen/physicsserver/world.h 2010-01-26 11:23:42 UTC (rev 151)
@@ -122,6 +122,9 @@
the desired physics engine.
*/
boost::shared_ptr<WorldInt> mWorldImp;
+
+ /** The ID of the managed physics world */
+ long mWorldID;
};
DECLARE_CLASS(World);
Modified: branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp
===================================================================
--- branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2010-01-18 19:59:05 UTC (rev 150)
+++ branches/multiphys/spark/plugin/collisionperceptor/touchperceptorhandler.cpp 2010-01-26 11:23:42 UTC (rev 151)
@@ -79,7 +79,7 @@
return;
mContactJointHandlerImp->CalcSurfaceParam(
- contact, handler->GetSurfaceParameter());
+ contact, handler->GetSurfaceParameter(), mSurfaceParameter);
// create the contact joint and attach it to the body
long joint = mContactJointHandlerImp->CreateContactJoint(
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|