Example #1
0
        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
Example #2
0
        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
Example #3
0
 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
         {
         }
     }
 }