From 2a3bdde0fa78c5a59c530e6d974dfd6709aa1519 Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Wed, 23 Apr 2008 15:32:19 +0000 Subject: [PATCH] * Adds llSetStatus(STATUS_ROTATE_X | STATUS_ROTATE_Y | STATUS_ROTATE_Z,TF) * Currently if you apply that to only one or two axis you get unpredictable and sometimes explosive results. * Three axis works well enough to play with it anyway. More work is needed here. * Fixed an incorrectly named method in ODE.NET --- .../Environment/Scenes/SceneObjectGroup.cs | 42 +++++- .../Environment/Scenes/SceneObjectPart.cs | 17 +++ .../BasicPhysicsPlugin/BasicPhysicsPlugin.cs | 5 + .../Physics/BulletXPlugin/BulletXPlugin.cs | 6 + .../Region/Physics/Manager/PhysicsActor.cs | 5 + .../Region/Physics/Manager/PhysicsVector.cs | 2 +- .../Region/Physics/OdePlugin/ODECharacter.cs | 9 +- OpenSim/Region/Physics/OdePlugin/ODEPrim.cs | 141 +++++++++++++++++- OpenSim/Region/Physics/POSPlugin/POSPlugin.cs | 11 ++ .../Region/Physics/PhysXPlugin/PhysXPlugin.cs | 10 ++ .../Common/LSL_BuiltIn_Commands.cs | 16 +- bin/Ode.NET.dll | Bin 61440 -> 61440 bytes 12 files changed, 252 insertions(+), 12 deletions(-) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 6af76622b8..4f65cc7397 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -1179,9 +1179,12 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectPart rootpart = m_rootPart; if (rootpart != null) { - rootpart.PhysActor.PIDTarget = new PhysicsVector(target.X, target.Y, target.Z); - rootpart.PhysActor.PIDTau = tau; - rootpart.PhysActor.PIDActive = true; + if (rootpart.PhysActor != null) + { + rootpart.PhysActor.PIDTarget = new PhysicsVector(target.X, target.Y, target.Z); + rootpart.PhysActor.PIDTau = tau; + rootpart.PhysActor.PIDActive = true; + } } } @@ -2229,5 +2232,38 @@ namespace OpenSim.Region.Environment.Scenes } #endregion + + internal void SetAxisRotation(int axis, int rotate10) + { + bool setX = false; + bool setY = false; + bool setZ = false; + + int xaxis = 2; + int yaxis = 4; + int zaxis = 8; + + if (m_rootPart != null) + { + setX = ((axis & xaxis) != 0) ? true : false; + setY = ((axis & yaxis) != 0) ? true : false; + setZ = ((axis & zaxis) != 0) ? true : false; + + float setval = (rotate10 > 0) ? 1f : 0f; + + if (setX) + m_rootPart.m_rotationAxis.X = setval; + if (setY) + m_rootPart.m_rotationAxis.Y = setval; + if (setZ) + m_rootPart.m_rotationAxis.Z = setval; + + if (setX || setY || setZ) + { + m_rootPart.SetPhysicsAxisRotation(); + } + + } + } } } \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index 4c781c57dd..92779548ce 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs @@ -104,6 +104,7 @@ namespace OpenSim.Region.Environment.Scenes private Vector3 m_sitTargetPosition = new Vector3(0, 0, 0); private Quaternion m_sitTargetOrientation = new Quaternion(0, 0, 0, 1); public LLUUID m_sitTargetAvatar = LLUUID.Zero; + [XmlIgnore] public PhysicsVector m_rotationAxis = new PhysicsVector(1f,1f,1f); #region Permissions @@ -1290,6 +1291,21 @@ namespace OpenSim.Region.Environment.Scenes PhysActor.Buoyancy = fvalue; } } + + public void SetAxisRotation(int axis, int rotate) + { + if (m_parentGroup != null) + { + m_parentGroup.SetAxisRotation(axis, rotate); + + } + } + + public void SetPhysicsAxisRotation() + { + PhysActor.LockAngularMotion(m_rotationAxis); + m_parentGroup.Scene.PhysicsScene.AddPhysicsActorTaint(PhysActor); + } public void SetFloatOnWater(int floatYN) { @@ -1306,6 +1322,7 @@ namespace OpenSim.Region.Environment.Scenes } } + public LLVector3 GetSitTargetPositionLL() { diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index 16ec66e4e9..08fdd807fc 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs @@ -374,6 +374,11 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin { } + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public void SetAcceleration(PhysicsVector accel) { _acceleration = accel; diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs index 1ad12019c9..40de537dc3 100644 --- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs +++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs @@ -809,6 +809,12 @@ namespace OpenSim.Region.Physics.BulletXPlugin { } + + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public override float Mass { get { return ActorMass; } diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index b40635caef..f48f1298f5 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -123,6 +123,8 @@ namespace OpenSim.Region.Physics.Manager public abstract void delink(); + public abstract void LockAngularMotion(PhysicsVector axis); + public virtual void RequestPhysicsterseUpdate() { // Make a temporary copy of the event to avoid possibility of @@ -347,6 +349,9 @@ namespace OpenSim.Region.Physics.Manager { } + public override void LockAngularMotion(PhysicsVector axis) + { + } public override void AddForce(PhysicsVector force) { diff --git a/OpenSim/Region/Physics/Manager/PhysicsVector.cs b/OpenSim/Region/Physics/Manager/PhysicsVector.cs index a916e5e893..4ec943c0ff 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsVector.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsVector.cs @@ -149,7 +149,7 @@ namespace OpenSim.Region.Physics.Manager { PhysicsVector diff = this - v; float d = diff.length(); - if (d < tolerance) + if (d <= tolerance) return true; return false; diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs index 042042c36e..9f6b14e26e 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs @@ -505,7 +505,14 @@ namespace OpenSim.Region.Physics.OdePlugin } -// TODO: unused: + public override void LockAngularMotion(PhysicsVector axis) + { + + } + +// This code is very useful. Written by DanX0r. We're just not using it right now. +// Commented out to prevent a warning. +// // private void standupStraight() // { // // The purpose of this routine here is to quickly stabilize the Body while it's popped up in the air. diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs index 8e0640b489..7a9734c225 100644 --- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs +++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs @@ -38,6 +38,10 @@ using OpenSim.Region.Physics.Manager; namespace OpenSim.Region.Physics.OdePlugin { + /// + /// Various properties that ODE uses for AMotors but isn't exposed in ODE.NET so we must define them ourselves. + /// + public class OdePrim : PhysicsActor { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); @@ -55,6 +59,9 @@ namespace OpenSim.Region.Physics.OdePlugin private PhysicsVector m_taintsize; private PhysicsVector m_taintVelocity = PhysicsVector.Zero; private Quaternion m_taintrot; + private PhysicsVector m_angularlock = new PhysicsVector(1f, 1f, 1f); + private PhysicsVector m_taintAngularLock = new PhysicsVector(1f, 1f, 1f); + private IntPtr Amotor = IntPtr.Zero; private PhysicsVector m_PIDTarget = new PhysicsVector(0, 0, 0); private float m_PIDTau = 0f; @@ -309,6 +316,12 @@ namespace OpenSim.Region.Physics.OdePlugin m_collisionscore = 0; m_disabled = false; + // The body doesn't already have a finite rotation mode set here + if ((!m_angularlock.IsIdentical(PhysicsVector.Zero, 0)) && _parent == null) + { + createAMotor(m_angularlock); + } + _parent_scene.addActivePrim(this); } @@ -722,7 +735,7 @@ namespace OpenSim.Region.Physics.OdePlugin } if (prim_geom != (IntPtr)0) { - if (m_taintposition != _position) + if (!_position.IsIdentical(m_taintposition,0f)) changemove(timestep); if (m_taintrot != _orientation) @@ -733,7 +746,7 @@ namespace OpenSim.Region.Physics.OdePlugin changePhysicsStatus(timestep); // - if (m_taintsize != _size) + if (!_size.IsIdentical(m_taintsize,0)) changesize(timestep); // @@ -750,7 +763,7 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_taintselected != m_isSelected) changeSelectedStatus(timestep); - if (m_taintVelocity != PhysicsVector.Zero) + if (!m_taintVelocity.IsIdentical(PhysicsVector.Zero,0)) changevelocity(timestep); if (m_taintparent != _parent) @@ -759,6 +772,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_taintCollidesWater != m_collidesWater) changefloatonwater(timestep); + if (!m_angularlock.IsIdentical(m_taintAngularLock,0)) + changeAngularLock(timestep); } else @@ -767,6 +782,35 @@ namespace OpenSim.Region.Physics.OdePlugin } } + private void changeAngularLock(float timestep) + { + // do we have a Physical object? + if (Body != IntPtr.Zero) + { + //Check that we have a Parent + //If we have a parent then we're not authorative here + if (_parent == null) + { + if (!m_taintAngularLock.IsIdentical(new PhysicsVector(1f,1f,1f), 0)) + { + //d.BodySetFiniteRotationMode(Body, 0); + //d.BodySetFiniteRotationAxis(Body,m_taintAngularLock.X,m_taintAngularLock.Y,m_taintAngularLock.Z); + createAMotor(m_taintAngularLock); + } + else + { + if (Amotor != IntPtr.Zero) + { + d.JointDestroy(Amotor); + Amotor = (IntPtr)0; + } + } + } + } + // Store this for later in case we get turned into a separate body + m_angularlock = new PhysicsVector(m_taintAngularLock.X,m_angularlock.Y,m_angularlock.Z); + } + private void changelink(float timestep) { @@ -1241,6 +1285,8 @@ namespace OpenSim.Region.Physics.OdePlugin if (m_isphysical && Body != (IntPtr) 0) { d.BodySetQuaternion(Body, ref myrot); + if (!m_angularlock.IsIdentical(new PhysicsVector(1, 1, 1), 0)) + createAMotor(m_angularlock); } resetCollisionAccounting(); @@ -1880,6 +1926,17 @@ namespace OpenSim.Region.Physics.OdePlugin m_taintparent = null; } + + public override void LockAngularMotion(PhysicsVector axis) + { + // reverse the zero/non zero values for ODE. + + axis.X = (axis.X > 0) ? 1f : 0f; + axis.Y = (axis.Y > 0) ? 1f : 0f; + axis.Z = (axis.Z > 0) ? 1f : 0f; + m_taintAngularLock = new PhysicsVector(axis.X, axis.Y, axis.Z); ; + } + public void UpdatePositionAndVelocity() { // no lock; called from Simulate() -- if you call this from elsewhere, gotta lock or do Monitor.Enter/Exit! @@ -2078,5 +2135,83 @@ namespace OpenSim.Region.Physics.OdePlugin public override PhysicsVector PIDTarget { set { m_PIDTarget = value; ; } } public override bool PIDActive { set { m_usePID = value; } } public override float PIDTau { set { m_PIDTau = (value * 0.6f); } } + + private void createAMotor(PhysicsVector axis) + { + if (Body == IntPtr.Zero) + return; + + if (Amotor != IntPtr.Zero) + { + d.JointDestroy(Amotor); + Amotor = IntPtr.Zero; + } + + float m_tensor = 0f; + if (Environment.OSVersion.Platform == PlatformID.Unix) + { + m_tensor = 2f; + } + else + { + m_tensor = 5f; + } + + float axisnum = 3; + + axisnum = (axisnum - (axis.X + axis.Y + axis.Z)); + + if (axisnum <= 0) + return; + int dAMotorEuler = 1; + + Amotor = d.JointCreateAMotor(_parent_scene.world, IntPtr.Zero); + d.JointAttach(Amotor, Body, IntPtr.Zero); + d.JointSetAMotorMode(Amotor, dAMotorEuler); + + + + d.JointSetAMotorNumAxes(Amotor,(int)axisnum); + int i = 0; + + if (axis.X == 0) + { + d.JointSetAMotorAxis(Amotor, i, 0, 1, 0, 0); + i++; + } + + if (axis.Y == 0) + { + d.JointSetAMotorAxis(Amotor, i, 0, 0, 1, 0); + i++; + } + + + if (axis.Z == 0) + { + d.JointSetAMotorAxis(Amotor, i, 0, 0, 0, 1); + i++; + } + for (int j = 0; j < (int)axisnum; j++) + { + //d.JointSetAMotorAngle(Amotor, j, 0); + } + // + //d.JointSetAMotorAngle(Amotor, 1, 0); + //d.JointSetAMotorAngle(Amotor, 2, 0); + + // These lowstops and high stops are effectively (no wiggle room) + d.JointSetAMotorParam(Amotor, (int)dParam.LowStop, -0.000000000001f); + d.JointSetAMotorParam(Amotor, (int)dParam.LoStop3, -0.000000000001f); + d.JointSetAMotorParam(Amotor, (int)dParam.LoStop2, -0.000000000001f); + d.JointSetAMotorParam(Amotor, (int)dParam.HiStop, 0.000000000001f); + d.JointSetAMotorParam(Amotor, (int)dParam.HiStop3, 0.000000000001f); + d.JointSetAMotorParam(Amotor, (int)dParam.HiStop2, 0.000000000001f); + + + d.JointSetAMotorParam(Amotor, (int)dParam.FudgeFactor, 0f); + d.JointSetAMotorParam(Amotor, (int)dParam.FMax, m_tensor); + + } } } diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs index 12b2d8fa01..b7f38d4834 100644 --- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs +++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs @@ -502,6 +502,12 @@ namespace OpenSim.Region.Physics.POSPlugin { } + + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public void SetAcceleration(PhysicsVector accel) { _acceleration = accel; @@ -706,6 +712,11 @@ namespace OpenSim.Region.Physics.POSPlugin { } + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public override bool Selected { set { return; } diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index 2d00bdbd83..2d40134e26 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -392,6 +392,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin } + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public override void SetMomentum(PhysicsVector momentum) { } @@ -630,6 +635,11 @@ namespace OpenSim.Region.Physics.PhysXPlugin { } + public override void LockAngularMotion(PhysicsVector axis) + { + + } + public override float Mass { get { return 0f; } diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs index 3dff98f78f..09cd4afbc3 100644 --- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs +++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs @@ -692,6 +692,9 @@ namespace OpenSim.Region.ScriptEngine.Common public void llSetStatus(int status, int value) { m_host.AddScriptLPS(1); + + int statusrotationaxis = 0; + if ((status & BuiltIn_Commands_BaseClass.STATUS_PHYSICS) == BuiltIn_Commands_BaseClass.STATUS_PHYSICS) { if (value == 1) @@ -713,15 +716,16 @@ namespace OpenSim.Region.ScriptEngine.Common } if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_X) { - NotImplemented("llSetStatus - STATUS_ROTATE_X"); + statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_X; + } if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y) { - NotImplemented("llSetStatus - STATUS_ROTATE_Y"); + statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Y; } if ((status & BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) == BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z) { - NotImplemented("llSetStatus - STATUS_ROTATE_Z"); + statusrotationaxis |= BuiltIn_Commands_BaseClass.STATUS_ROTATE_Z; } if ((status & BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) == BuiltIn_Commands_BaseClass.STATUS_BLOCK_GRAB) { @@ -739,7 +743,11 @@ namespace OpenSim.Region.ScriptEngine.Common { NotImplemented("llSetStatus - STATUS_SANDBOX"); } - + if (statusrotationaxis != 0) + { + m_host.SetAxisRotation(statusrotationaxis, value); + + } return; } diff --git a/bin/Ode.NET.dll b/bin/Ode.NET.dll index 23e904b190e6e1e2f80ac1242bf862a18ce284b6..8826b5ed89989b4d7ee332bebf0897c578bed28b 100644 GIT binary patch literal 61440 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

tuv|voE2!lM8g;2uBDHszk!qtwR!)oNH zGxT}X>&Y{EoJ0+xRrWm#ea{>eP!xk6S9)GiTx*IHymQPE;H3NY&&z`rExie!W%x9? z@j@?NZ~#72@PVmdI@E3Wtj{aTb+o_mXH-#sn)o`@MRoYIUNq@}xeCMephm7Co~()- zuLyq_0%r?`R*x_TG)oy+@cFG|VW+Zi-&av@CYA^m9{#va0#?~#6cl-jMheWEXE2|$q^MKnX zj(Du{#@8Jahi9hOWB#`u?;etgR5GxYwAG`fW%aWF|EERMMFES-nvkE!20Yqem;3TW zV~hFD(qxj~`Koz7-A{_jqnQWUU<(Ykz+ejuw!mNu47R{v3ks}Sjm z7Rm{_KJoR@tKVXL*7d@ulTiPs%f+8Fm*b^cHUJk&6;exNg&YUI1h@!k{kb>x&L{eJ z2!g*-5Xhrx#RD8{1TZYbJc>;G@!%lZSHj$U5lTg5zjHw1hN+3tBK7 zzXYra{{(+`+(o`+@Y%>56}pOx-&E5YZj?=kCY-vL<8L}Rh+_2G3K~CX2W6jKjyax{ z$d7%i*mPKj$m!Z;)=%))&-M7D{+X@Nw+%GUe6&*v$J2~6(1ar?!r70uUS>WV;^5C< z3k