From f46fcbb9d20525d1b0910ace02558bd54b31bd56 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Mon, 10 Mar 2008 14:14:44 +0000 Subject: [PATCH] * Added Linear Acceleration reporting to the ODEPlugin. * Added support for LSL llGetOmega (Rotational/Angular Velocity)- ODEPlugin is the only physics plugin that reports it. --- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 22 ++++++++++++++++++- .../Common/LSL_BuiltIn_Commands.cs | 3 +-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 7cdc558b8e..6a38037930 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -1770,7 +1770,7 @@ namespace OpenSim.Region.Physics.OdePlugin d.Quaternion ori = d.BodyGetQuaternion(Body); d.Vector3 vel = d.BodyGetLinearVel(Body); d.Vector3 rotvel = d.BodyGetAngularVel(Body); - + PhysicsVector l_position = new PhysicsVector(); @@ -1815,6 +1815,11 @@ namespace OpenSim.Region.Physics.OdePlugin //IsPhysical = false; base.RaiseOutOfBounds(_position); + + _acceleration.X = 0; + _acceleration.Y = 0; + _acceleration.Z = 0; + _velocity.X = 0; _velocity.Y = 0; _velocity.Z = 0; @@ -1850,6 +1855,11 @@ namespace OpenSim.Region.Physics.OdePlugin _velocity.X = 0.0f; _velocity.Y = 0.0f; _velocity.Z = 0.0f; + + _acceleration.X = 0; + _acceleration.Y = 0; + _acceleration.Z = 0; + //_orientation.w = 0f; //_orientation.x = 0f; //_orientation.y = 0f; @@ -1878,6 +1888,11 @@ namespace OpenSim.Region.Physics.OdePlugin _velocity.X = vel.X; _velocity.Y = vel.Y; _velocity.Z = vel.Z; + + _acceleration = ((_velocity - m_lastVelocity) / 0.1f); + _acceleration = new PhysicsVector(_velocity.X - m_lastVelocity.X / 0.1f, _velocity.Y - m_lastVelocity.Y / 0.1f, _velocity.Z - m_lastVelocity.Z / 0.1f); + //m_log.Info("[PHYSICS]: V1: " + _velocity + " V2: " + m_lastVelocity + " Acceleration: " + _acceleration.ToString()); + if (_velocity.IsIdentical(pv, 0.5f)) { m_rotationalVelocity = pv; @@ -1911,6 +1926,11 @@ namespace OpenSim.Region.Physics.OdePlugin _velocity.X = 0; _velocity.Y = 0; _velocity.Z = 0; + + _acceleration.X = 0; + _acceleration.Y = 0; + _acceleration.Z = 0; + m_rotationalVelocity.X = 0; m_rotationalVelocity.Y = 0; m_rotationalVelocity.Z = 0; diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 623ac290ff..b744ee4791 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -1163,8 +1163,7 @@ namespace OpenSim.Region.ScriptEngine.Common public LSL_Types.Vector3 llGetOmega() { m_host.AddScriptLPS(1); - NotImplemented("llGetOmega"); - return new LSL_Types.Vector3(); + return new LSL_Types.Vector3(m_host.RotationalVelocity.X, m_host.RotationalVelocity.Y, m_host.RotationalVelocity.Z); } public double llGetTimeOfDay()