diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs index c3b4dd862d..d8a2272cd3 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEDynamics.cs @@ -935,8 +935,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde float roll; float pitch; - - float ftmp = m_invtimestep / m_verticalAttractionTimescale / m_verticalAttractionTimescale; float ftmp2; @@ -957,7 +955,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde effroll = 1 - effroll; effroll *= roll; - torque.X += effroll * ftmp; if ((m_flags & VehicleFlag.LIMIT_ROLL_ONLY) == 0) @@ -1074,10 +1071,14 @@ namespace OpenSim.Region.PhysicsModule.ubOde torque.Z -= curLocalAngVel.Z * m_amdampZ; } + force *= dmass.mass; + + force += rootPrim.m_force; + force += rootPrim.m_forceacc; + rootPrim.m_forceacc = Vector3.Zero; if (force.X != 0 || force.Y != 0 || force.Z != 0) { - force *= dmass.mass; d.BodyAddForce(Body, force.X, force.Y, force.Z); } @@ -1091,6 +1092,12 @@ namespace OpenSim.Region.PhysicsModule.ubOde d.MultiplyM3V3(out dvtmp, ref dmass.I, ref dtorque); d.BodyAddRelTorque(Body, dvtmp.X, dvtmp.Y, dvtmp.Z); // add torque in object frame } + + torque = rootPrim.m_torque; + torque += rootPrim.m_angularForceacc; + rootPrim.m_angularForceacc = Vector3.Zero; + if (torque.X != 0 || torque.Y != 0 || torque.Z != 0) + d.BodyAddTorque(Body,torque.X, torque.Y, torque.Z); } } } diff --git a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs index aaa2203a70..ebaa875536 100644 --- a/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs +++ b/OpenSim/Region/PhysicsModules/ubOde/ODEPrim.cs @@ -81,7 +81,6 @@ namespace OpenSim.Region.PhysicsModule.ubOde private Vector3 _position; private Vector3 _velocity; - private Vector3 m_torque; private Vector3 m_lastVelocity; private Vector3 m_lastposition; private Vector3 m_rotationalVelocity; @@ -89,9 +88,10 @@ namespace OpenSim.Region.PhysicsModule.ubOde private Vector3 _acceleration; private IntPtr Amotor; - private Vector3 m_force; - private Vector3 m_forceacc; - private Vector3 m_angularForceacc; + internal Vector3 m_force; + internal Vector3 m_forceacc; + internal Vector3 m_torque; + internal Vector3 m_angularForceacc; private float m_invTimeStep; private float m_timeStep;