internal void Step(IntPtr pBody, float pTimestep, AuroraODEPhysicsScene pParentScene, AuroraODEPrim parent) { m_body = pBody; if (pBody == IntPtr.Zero || m_type == Vehicle.TYPE_NONE) return; if (!d.BodyIsEnabled(Body)) d.BodyEnable(Body); frcount++; // used to limit debug comment output if (frcount > 100) frcount = 0; MoveLinear(pTimestep, pParentScene); MoveAngular(pTimestep, pParentScene); LimitRotation(pTimestep); /*if (!parent.m_angularlock.ApproxEquals(Vector3.One, 0.003f) && parent.Amotor != IntPtr.Zero) { d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0f); d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0f); d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0f); d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0f); d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0f); d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0f); d.JointSetAMotorParam(Amotor, (int)dParam.Vel, 9000f); d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f); d.JointSetAMotorParam(Amotor, (int)dParam.FMax, int.MaxValue); d.Vector3 avel2 = d.BodyGetAngularVel(Body); if (parent.m_angularlock.X == 0) avel2.X = 0; if (parent.m_angularlock.Y == 0) avel2.Y = 0; if (parent.m_angularlock.Z == 0) avel2.Z = 0; d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z); d.BodySetAngularDamping(Body, 1); d.BodySetTorque(Body, 0, 0, 0); }*/ // WE deal with updates parent.RequestPhysicsterseUpdate(); } // end Step
internal void Step(IntPtr pBody, float pTimestep, AuroraODEPhysicsScene pParentScene, AuroraODEPrim parent) { m_body = pBody; if (pBody == IntPtr.Zero || m_type == Vehicle.TYPE_NONE) return; if (!d.BodyIsEnabled(Body)) d.BodyEnable(Body); frcount++; // used to limit debug comment output if (frcount > 100) frcount = 0; MoveLinear(pTimestep, pParentScene); MoveAngular(pTimestep, pParentScene); LimitRotation(pTimestep); // WE deal with updates parent.RequestPhysicsterseUpdate(); } // end Step
private void SendUpdate (AuroraODEPrim parent) { // WE deal with updates if(m_linearZeroFlag && m_angularZeroFlag) { if(m_sentZeroFlag > 0) { parent.ForceSetVelocity(Vector3.Zero); parent.ForceSetRotVelocity(Vector3.Zero); m_sentZeroFlag--; parent.RequestPhysicsterseUpdate(); } } else { if(!m_lastVelocity.ApproxEquals(parent.Velocity, 0.1f) || !m_lastAngVelocity.ApproxEquals(parent.RotationalVelocity, 0.1f)) { m_lastVelocity = parent.Velocity; m_lastAngVelocity = parent.RotationalVelocity; m_sentZeroFlag = 5; } else { } } }