From 18c959df12983256d73240a86fa0bad12c4e36ce Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Thu, 17 Jan 2008 14:59:05 +0000 Subject: * Added llApplyImpulse in the global frame. The object must be physical before this'll do anything. Be careful with this function as it's easy to loose prim. --- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'OpenSim/Region/Physics/OdePlugin') diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 6d08f98..bf88fc4 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -27,6 +27,7 @@ */ using System; +using System.Collections.Generic; using Axiom.Math; using Ode.NET; using OpenSim.Framework; @@ -51,6 +52,9 @@ namespace OpenSim.Region.Physics.OdePlugin private bool m_taintPhysics = false; public bool m_taintremove = false; + private bool m_taintforce = false; + private List m_forcelist = new List(); + private IMesh _mesh; private PrimitiveBaseShape _pbs; private OdeScene _parent_scene; @@ -355,6 +359,9 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_taintshape) changeshape(timestep); // + + if (m_taintforce) + changeAddForce(timestep); } public void Move(float timestep) @@ -541,6 +548,27 @@ namespace OpenSim.Region.Physics.OdePlugin m_taintshape = false; } + public void changeAddForce(float timestamp) + { + lock (m_forcelist) + { + //OpenSim.Framework.Console.MainLog.Instance.Verbose("PHYSICS", "dequeing forcelist"); + if (IsPhysical) + { + PhysicsVector iforce = new PhysicsVector(); + for (int i = 0; i < m_forcelist.Count; i++) + { + iforce = iforce + (m_forcelist[i]*100); + } + d.BodyEnable(Body); + d.BodyAddForce(Body, iforce.X, iforce.Y, iforce.Z); + } + m_forcelist.Clear(); + } + m_taintforce = false; + + } + public override bool IsPhysical { get { return m_isphysical; } @@ -663,6 +691,9 @@ namespace OpenSim.Region.Physics.OdePlugin public override void AddForce(PhysicsVector force) { + m_forcelist.Add(force); + m_taintforce = true; + //OpenSim.Framework.Console.MainLog.Instance.Verbose("PHYSICS", "Added Force:" + force.ToString() + " to prim at " + Position.ToString()); } public override PhysicsVector RotationalVelocity -- cgit v1.1