diff options
-rw-r--r-- | OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs | 19 | ||||
-rwxr-xr-x | OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs | 45 | ||||
-rw-r--r-- | OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs | 53 |
3 files changed, 58 insertions, 59 deletions
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs index 5ad2136..213f2eb 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs | |||
@@ -52,7 +52,6 @@ public sealed class BSCharacter : BSPhysObject | |||
52 | private bool _setAlwaysRun; | 52 | private bool _setAlwaysRun; |
53 | private bool _throttleUpdates; | 53 | private bool _throttleUpdates; |
54 | private bool _floatOnWater; | 54 | private bool _floatOnWater; |
55 | private OMV.Vector3 _rotationalVelocity; | ||
56 | private bool _kinematic; | 55 | private bool _kinematic; |
57 | private float _buoyancy; | 56 | private float _buoyancy; |
58 | 57 | ||
@@ -291,7 +290,7 @@ public sealed class BSCharacter : BSPhysObject | |||
291 | { | 290 | { |
292 | RawVelocity = OMV.Vector3.Zero; | 291 | RawVelocity = OMV.Vector3.Zero; |
293 | _acceleration = OMV.Vector3.Zero; | 292 | _acceleration = OMV.Vector3.Zero; |
294 | _rotationalVelocity = OMV.Vector3.Zero; | 293 | RawRotationalVelocity = OMV.Vector3.Zero; |
295 | 294 | ||
296 | // Zero some other properties directly into the physics engine | 295 | // Zero some other properties directly into the physics engine |
297 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSCharacter.ZeroMotion", delegate() | 296 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSCharacter.ZeroMotion", delegate() |
@@ -303,7 +302,7 @@ public sealed class BSCharacter : BSPhysObject | |||
303 | 302 | ||
304 | public override void ZeroAngularMotion(bool inTaintTime) | 303 | public override void ZeroAngularMotion(bool inTaintTime) |
305 | { | 304 | { |
306 | _rotationalVelocity = OMV.Vector3.Zero; | 305 | RawRotationalVelocity = OMV.Vector3.Zero; |
307 | 306 | ||
308 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSCharacter.ZeroMotion", delegate() | 307 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSCharacter.ZeroMotion", delegate() |
309 | { | 308 | { |
@@ -618,14 +617,6 @@ public sealed class BSCharacter : BSPhysObject | |||
618 | }); | 617 | }); |
619 | } | 618 | } |
620 | } | 619 | } |
621 | public override OMV.Vector3 RotationalVelocity { | ||
622 | get { return _rotationalVelocity; } | ||
623 | set { _rotationalVelocity = value; } | ||
624 | } | ||
625 | public override OMV.Vector3 ForceRotationalVelocity { | ||
626 | get { return _rotationalVelocity; } | ||
627 | set { _rotationalVelocity = value; } | ||
628 | } | ||
629 | public override bool Kinematic { | 620 | public override bool Kinematic { |
630 | get { return _kinematic; } | 621 | get { return _kinematic; } |
631 | set { _kinematic = value; } | 622 | set { _kinematic = value; } |
@@ -716,8 +707,6 @@ public sealed class BSCharacter : BSPhysObject | |||
716 | 707 | ||
717 | public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force) { | 708 | public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force) { |
718 | } | 709 | } |
719 | public override void SetMomentum(OMV.Vector3 momentum) { | ||
720 | } | ||
721 | 710 | ||
722 | // The avatar's physical shape (whether capsule or cube) is unit sized. BulletSim sets | 711 | // The avatar's physical shape (whether capsule or cube) is unit sized. BulletSim sets |
723 | // the scale of that unit shape to create the avatars full size. | 712 | // the scale of that unit shape to create the avatars full size. |
@@ -841,7 +830,7 @@ public sealed class BSCharacter : BSPhysObject | |||
841 | RawVelocity = entprop.Velocity; | 830 | RawVelocity = entprop.Velocity; |
842 | 831 | ||
843 | _acceleration = entprop.Acceleration; | 832 | _acceleration = entprop.Acceleration; |
844 | _rotationalVelocity = entprop.RotationalVelocity; | 833 | RawRotationalVelocity = entprop.RotationalVelocity; |
845 | 834 | ||
846 | // Do some sanity checking for the avatar. Make sure it's above ground and inbounds. | 835 | // Do some sanity checking for the avatar. Make sure it's above ground and inbounds. |
847 | if (PositionSanityCheck(true)) | 836 | if (PositionSanityCheck(true)) |
@@ -861,7 +850,7 @@ public sealed class BSCharacter : BSPhysObject | |||
861 | // PhysScene.PostUpdate(this); | 850 | // PhysScene.PostUpdate(this); |
862 | 851 | ||
863 | DetailLog("{0},BSCharacter.UpdateProperties,call,pos={1},orient={2},vel={3},accel={4},rotVel={5}", | 852 | DetailLog("{0},BSCharacter.UpdateProperties,call,pos={1},orient={2},vel={3},accel={4},rotVel={5}", |
864 | LocalID, RawPosition, RawOrientation, RawVelocity, _acceleration, _rotationalVelocity); | 853 | LocalID, RawPosition, RawOrientation, RawVelocity, _acceleration, RawRotationalVelocity); |
865 | } | 854 | } |
866 | } | 855 | } |
867 | } | 856 | } |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs index bb21f0c..7c6f213 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs | |||
@@ -239,6 +239,8 @@ public abstract class BSPhysObject : PhysicsActor | |||
239 | public virtual OMV.Vector3 RawVelocity { get; set; } | 239 | public virtual OMV.Vector3 RawVelocity { get; set; } |
240 | public abstract OMV.Vector3 ForceVelocity { get; set; } | 240 | public abstract OMV.Vector3 ForceVelocity { get; set; } |
241 | 241 | ||
242 | public OMV.Vector3 RawRotationalVelocity { get; set; } | ||
243 | |||
242 | // RawForce is a constant force applied to object (see Force { set; } ) | 244 | // RawForce is a constant force applied to object (see Force { set; } ) |
243 | public OMV.Vector3 RawForce { get; set; } | 245 | public OMV.Vector3 RawForce { get; set; } |
244 | public OMV.Vector3 RawTorque { get; set; } | 246 | public OMV.Vector3 RawTorque { get; set; } |
@@ -250,7 +252,48 @@ public abstract class BSPhysObject : PhysicsActor | |||
250 | public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force); | 252 | public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force); |
251 | public abstract void AddForce(bool inTaintTime, OMV.Vector3 force); | 253 | public abstract void AddForce(bool inTaintTime, OMV.Vector3 force); |
252 | 254 | ||
253 | public abstract OMV.Vector3 ForceRotationalVelocity { get; set; } | 255 | // PhysicsActor.SetMomentum |
256 | // All the physics engined use this as a way of forcing the velocity to something. | ||
257 | public override void SetMomentum(OMV.Vector3 momentum) | ||
258 | { | ||
259 | // This doesn't just set Velocity=momentum because velocity is ramped up to (see MoveActor) | ||
260 | RawVelocity = momentum; | ||
261 | PhysScene.TaintedObject(LocalID, TypeName + ".SetMomentum", delegate() | ||
262 | { | ||
263 | // DetailLog("{0},BSPrim.SetMomentum,taint,vel={1}", LocalID, RawVelocity); | ||
264 | ForceVelocity = RawVelocity; | ||
265 | }); | ||
266 | } | ||
267 | |||
268 | public override OMV.Vector3 RotationalVelocity { | ||
269 | get { | ||
270 | return RawRotationalVelocity; | ||
271 | } | ||
272 | set { | ||
273 | RawRotationalVelocity = value; | ||
274 | Util.ClampV(RawRotationalVelocity, BSParam.MaxAngularVelocity); | ||
275 | // m_log.DebugFormat("{0}: RotationalVelocity={1}", LogHeader, _rotationalVelocity); | ||
276 | PhysScene.TaintedObject(LocalID, TypeName + ".setRotationalVelocity", delegate() | ||
277 | { | ||
278 | ForceRotationalVelocity = RawRotationalVelocity; | ||
279 | }); | ||
280 | } | ||
281 | } | ||
282 | public OMV.Vector3 ForceRotationalVelocity { | ||
283 | get { | ||
284 | return RawRotationalVelocity; | ||
285 | } | ||
286 | set { | ||
287 | RawRotationalVelocity = Util.ClampV(value, BSParam.MaxAngularVelocity); | ||
288 | if (PhysBody.HasPhysicalBody) | ||
289 | { | ||
290 | DetailLog("{0},{1}.ForceRotationalVel,taint,rotvel={2}", LocalID, TypeName, RawRotationalVelocity); | ||
291 | PhysScene.PE.SetAngularVelocity(PhysBody, RawRotationalVelocity); | ||
292 | // PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); | ||
293 | ActivateIfPhysical(false); | ||
294 | } | ||
295 | } | ||
296 | } | ||
254 | 297 | ||
255 | public abstract float ForceBuoyancy { get; set; } | 298 | public abstract float ForceBuoyancy { get; set; } |
256 | 299 | ||
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs index fd9b834..78a617d 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs | |||
@@ -59,7 +59,6 @@ public class BSPrim : BSPhysObject | |||
59 | private bool _setAlwaysRun; | 59 | private bool _setAlwaysRun; |
60 | private bool _throttleUpdates; | 60 | private bool _throttleUpdates; |
61 | private bool _floatOnWater; | 61 | private bool _floatOnWater; |
62 | private OMV.Vector3 _rotationalVelocity; | ||
63 | private bool _kinematic; | 62 | private bool _kinematic; |
64 | private float _buoyancy; | 63 | private float _buoyancy; |
65 | 64 | ||
@@ -90,7 +89,7 @@ public class BSPrim : BSPhysObject | |||
90 | RawOrientation = rotation; | 89 | RawOrientation = rotation; |
91 | _buoyancy = 0f; | 90 | _buoyancy = 0f; |
92 | RawVelocity = OMV.Vector3.Zero; | 91 | RawVelocity = OMV.Vector3.Zero; |
93 | _rotationalVelocity = OMV.Vector3.Zero; | 92 | RawRotationalVelocity = OMV.Vector3.Zero; |
94 | BaseShape = pbs; | 93 | BaseShape = pbs; |
95 | _isPhysical = pisPhysical; | 94 | _isPhysical = pisPhysical; |
96 | _isVolumeDetect = false; | 95 | _isVolumeDetect = false; |
@@ -256,7 +255,7 @@ public class BSPrim : BSPhysObject | |||
256 | { | 255 | { |
257 | RawVelocity = OMV.Vector3.Zero; | 256 | RawVelocity = OMV.Vector3.Zero; |
258 | _acceleration = OMV.Vector3.Zero; | 257 | _acceleration = OMV.Vector3.Zero; |
259 | _rotationalVelocity = OMV.Vector3.Zero; | 258 | RawRotationalVelocity = OMV.Vector3.Zero; |
260 | 259 | ||
261 | // Zero some other properties in the physics engine | 260 | // Zero some other properties in the physics engine |
262 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSPrim.ZeroMotion", delegate() | 261 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSPrim.ZeroMotion", delegate() |
@@ -267,15 +266,15 @@ public class BSPrim : BSPhysObject | |||
267 | } | 266 | } |
268 | public override void ZeroAngularMotion(bool inTaintTime) | 267 | public override void ZeroAngularMotion(bool inTaintTime) |
269 | { | 268 | { |
270 | _rotationalVelocity = OMV.Vector3.Zero; | 269 | RawRotationalVelocity = OMV.Vector3.Zero; |
271 | // Zero some other properties in the physics engine | 270 | // Zero some other properties in the physics engine |
272 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSPrim.ZeroMotion", delegate() | 271 | PhysScene.TaintedObject(inTaintTime, LocalID, "BSPrim.ZeroMotion", delegate() |
273 | { | 272 | { |
274 | // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity); | 273 | // DetailLog("{0},BSPrim.ZeroAngularMotion,call,rotVel={1}", LocalID, _rotationalVelocity); |
275 | if (PhysBody.HasPhysicalBody) | 274 | if (PhysBody.HasPhysicalBody) |
276 | { | 275 | { |
277 | PhysScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); | 276 | PhysScene.PE.SetInterpolationAngularVelocity(PhysBody, RawRotationalVelocity); |
278 | PhysScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); | 277 | PhysScene.PE.SetAngularVelocity(PhysBody, RawRotationalVelocity); |
279 | } | 278 | } |
280 | }); | 279 | }); |
281 | } | 280 | } |
@@ -426,9 +425,9 @@ public class BSPrim : BSPhysObject | |||
426 | RawVelocity = Util.ClampV(RawVelocity, BSParam.MaxLinearVelocity); | 425 | RawVelocity = Util.ClampV(RawVelocity, BSParam.MaxLinearVelocity); |
427 | ret = true; | 426 | ret = true; |
428 | } | 427 | } |
429 | if (_rotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared) | 428 | if (RawRotationalVelocity.LengthSquared() > BSParam.MaxAngularVelocitySquared) |
430 | { | 429 | { |
431 | _rotationalVelocity = Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity); | 430 | RawRotationalVelocity = Util.ClampV(RawRotationalVelocity, BSParam.MaxAngularVelocity); |
432 | ret = true; | 431 | ret = true; |
433 | } | 432 | } |
434 | 433 | ||
@@ -1008,7 +1007,7 @@ public class BSPrim : BSPhysObject | |||
1008 | // For good measure, make sure the transform is set through to the motion state | 1007 | // For good measure, make sure the transform is set through to the motion state |
1009 | ForcePosition = RawPosition; | 1008 | ForcePosition = RawPosition; |
1010 | ForceVelocity = RawVelocity; | 1009 | ForceVelocity = RawVelocity; |
1011 | ForceRotationalVelocity = _rotationalVelocity; | 1010 | ForceRotationalVelocity = RawRotationalVelocity; |
1012 | 1011 | ||
1013 | // A dynamic object has mass | 1012 | // A dynamic object has mass |
1014 | UpdatePhysicalMassProperties(RawMass, false); | 1013 | UpdatePhysicalMassProperties(RawMass, false); |
@@ -1128,35 +1127,6 @@ public class BSPrim : BSPhysObject | |||
1128 | }); | 1127 | }); |
1129 | } | 1128 | } |
1130 | } | 1129 | } |
1131 | public override OMV.Vector3 RotationalVelocity { | ||
1132 | get { | ||
1133 | return _rotationalVelocity; | ||
1134 | } | ||
1135 | set { | ||
1136 | _rotationalVelocity = value; | ||
1137 | Util.ClampV(_rotationalVelocity, BSParam.MaxAngularVelocity); | ||
1138 | // m_log.DebugFormat("{0}: RotationalVelocity={1}", LogHeader, _rotationalVelocity); | ||
1139 | PhysScene.TaintedObject(LocalID, "BSPrim.setRotationalVelocity", delegate() | ||
1140 | { | ||
1141 | ForceRotationalVelocity = _rotationalVelocity; | ||
1142 | }); | ||
1143 | } | ||
1144 | } | ||
1145 | public override OMV.Vector3 ForceRotationalVelocity { | ||
1146 | get { | ||
1147 | return _rotationalVelocity; | ||
1148 | } | ||
1149 | set { | ||
1150 | _rotationalVelocity = Util.ClampV(value, BSParam.MaxAngularVelocity); | ||
1151 | if (PhysBody.HasPhysicalBody) | ||
1152 | { | ||
1153 | DetailLog("{0},BSPrim.ForceRotationalVel,taint,rotvel={1}", LocalID, _rotationalVelocity); | ||
1154 | PhysScene.PE.SetAngularVelocity(PhysBody, _rotationalVelocity); | ||
1155 | // PhysicsScene.PE.SetInterpolationAngularVelocity(PhysBody, _rotationalVelocity); | ||
1156 | ActivateIfPhysical(false); | ||
1157 | } | ||
1158 | } | ||
1159 | } | ||
1160 | public override bool Kinematic { | 1130 | public override bool Kinematic { |
1161 | get { return _kinematic; } | 1131 | get { return _kinematic; } |
1162 | set { _kinematic = value; | 1132 | set { _kinematic = value; |
@@ -1358,9 +1328,6 @@ public class BSPrim : BSPhysObject | |||
1358 | }); | 1328 | }); |
1359 | } | 1329 | } |
1360 | 1330 | ||
1361 | public override void SetMomentum(OMV.Vector3 momentum) { | ||
1362 | // DetailLog("{0},BSPrim.SetMomentum,call,mom={1}", LocalID, momentum); | ||
1363 | } | ||
1364 | #region Mass Calculation | 1331 | #region Mass Calculation |
1365 | 1332 | ||
1366 | private float CalculateMass() | 1333 | private float CalculateMass() |
@@ -1930,7 +1897,7 @@ public class BSPrim : BSPhysObject | |||
1930 | if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(RawVelocity, BSParam.UpdateVelocityChangeThreshold)) | 1897 | if (entprop.Velocity == OMV.Vector3.Zero || !entprop.Velocity.ApproxEquals(RawVelocity, BSParam.UpdateVelocityChangeThreshold)) |
1931 | RawVelocity = entprop.Velocity; | 1898 | RawVelocity = entprop.Velocity; |
1932 | _acceleration = entprop.Acceleration; | 1899 | _acceleration = entprop.Acceleration; |
1933 | _rotationalVelocity = entprop.RotationalVelocity; | 1900 | RawRotationalVelocity = entprop.RotationalVelocity; |
1934 | 1901 | ||
1935 | // DetailLog("{0},BSPrim.UpdateProperties,afterAssign,entprop={1}", LocalID, entprop); // DEBUG DEBUG | 1902 | // DetailLog("{0},BSPrim.UpdateProperties,afterAssign,entprop={1}", LocalID, entprop); // DEBUG DEBUG |
1936 | 1903 | ||
@@ -1939,7 +1906,7 @@ public class BSPrim : BSPhysObject | |||
1939 | { | 1906 | { |
1940 | entprop.Position = RawPosition; | 1907 | entprop.Position = RawPosition; |
1941 | entprop.Velocity = RawVelocity; | 1908 | entprop.Velocity = RawVelocity; |
1942 | entprop.RotationalVelocity = _rotationalVelocity; | 1909 | entprop.RotationalVelocity = RawRotationalVelocity; |
1943 | entprop.Acceleration = _acceleration; | 1910 | entprop.Acceleration = _acceleration; |
1944 | } | 1911 | } |
1945 | 1912 | ||