aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/PhysicsModules/BulletS
diff options
context:
space:
mode:
authorRobert Adams2016-11-13 11:19:54 -0800
committerRobert Adams2016-11-13 11:19:54 -0800
commite13ff5a39233fd871e69f9ace23b4559cdfdcb7f (patch)
treea5e56577bb153a7dd481ee13571fabeb3e716b35 /OpenSim/Region/PhysicsModules/BulletS
parentmantis 8055: fix default value of npc options (diff)
downloadopensim-SC_OLD-e13ff5a39233fd871e69f9ace23b4559cdfdcb7f.zip
opensim-SC_OLD-e13ff5a39233fd871e69f9ace23b4559cdfdcb7f.tar.gz
opensim-SC_OLD-e13ff5a39233fd871e69f9ace23b4559cdfdcb7f.tar.bz2
opensim-SC_OLD-e13ff5a39233fd871e69f9ace23b4559cdfdcb7f.tar.xz
BulletSim: update avatar velocity setting to the new TargetVelocity pattern.
Now PhysicsActor.Velocity.set and PhysicsActor.SetMomentum do the same thing of setting the instantanious avatar velocity. PhysicsActor.TargetVelocity sets a velocity target and the movement motor is used to accelerate the' avatar to that velocity.
Diffstat (limited to 'OpenSim/Region/PhysicsModules/BulletS')
-rwxr-xr-xOpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs8
-rw-r--r--OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs45
-rwxr-xr-xOpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs34
-rw-r--r--OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs11
4 files changed, 47 insertions, 51 deletions
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
index 79ee00f..40c6b98 100755
--- a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs
@@ -108,10 +108,6 @@ public class BSActorAvatarMove : BSActor
108 { 108 {
109 if (m_velocityMotor != null) 109 if (m_velocityMotor != null)
110 { 110 {
111// if (targ == OMV.Vector3.Zero)
112// Util.PrintCallStack();
113//
114// Console.WriteLine("SetVelocityAndTarget, {0} {1}", vel, targ);
115 m_velocityMotor.Reset(); 111 m_velocityMotor.Reset();
116 m_velocityMotor.SetTarget(targ); 112 m_velocityMotor.SetTarget(targ);
117 m_velocityMotor.SetCurrent(vel); 113 m_velocityMotor.SetCurrent(vel);
@@ -128,7 +124,7 @@ public class BSActorAvatarMove : BSActor
128 m_waitingForLowVelocityForStationary = true; 124 m_waitingForLowVelocityForStationary = true;
129 } 125 }
130 126
131 // If a movement motor has not been created, create one and start the hovering. 127 // If a movement motor has not been created, create one and start the movement
132 private void ActivateAvatarMove() 128 private void ActivateAvatarMove()
133 { 129 {
134 if (m_velocityMotor == null) 130 if (m_velocityMotor == null)
@@ -161,7 +157,7 @@ public class BSActorAvatarMove : BSActor
161 } 157 }
162 } 158 }
163 159
164 // Called just before the simulation step. Update the vertical position for hoverness. 160 // Called just before the simulation step.
165 private void Mover(float timeStep) 161 private void Mover(float timeStep)
166 { 162 {
167 // Don't do movement while the object is selected. 163 // Don't do movement while the object is selected.
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
index 757f06c..6322695 100644
--- a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs
@@ -449,6 +449,7 @@ public sealed class BSCharacter : BSPhysObject
449 public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } } 449 public override OMV.Vector3 GeometricCenter { get { return OMV.Vector3.Zero; } }
450 public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } } 450 public override OMV.Vector3 CenterOfMass { get { return OMV.Vector3.Zero; } }
451 451
452 // PhysicsActor.TargetVelocity
452 // Sets the target in the motor. This starts the changing of the avatar's velocity. 453 // Sets the target in the motor. This starts the changing of the avatar's velocity.
453 public override OMV.Vector3 TargetVelocity 454 public override OMV.Vector3 TargetVelocity
454 { 455 {
@@ -459,7 +460,7 @@ public sealed class BSCharacter : BSPhysObject
459 set 460 set
460 { 461 {
461 DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value); 462 DetailLog("{0},BSCharacter.setTargetVelocity,call,vel={1}", LocalID, value);
462 m_targetVelocity = value; 463 base.m_targetVelocity = value;
463 OMV.Vector3 targetVel = value; 464 OMV.Vector3 targetVel = value;
464 if (_setAlwaysRun && !_flying) 465 if (_setAlwaysRun && !_flying)
465 targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 1f); 466 targetVel *= new OMV.Vector3(BSParam.AvatarAlwaysRunFactor, BSParam.AvatarAlwaysRunFactor, 1f);
@@ -472,46 +473,38 @@ public sealed class BSCharacter : BSPhysObject
472 public override OMV.Vector3 Velocity { 473 public override OMV.Vector3 Velocity {
473 get { return RawVelocity; } 474 get { return RawVelocity; }
474 set { 475 set {
475 RawVelocity = value; 476 if (m_moveActor != null)
476 OMV.Vector3 vel = RawVelocity;
477
478 DetailLog("{0}: set Velocity = {1}", LocalID, value);
479
480 PhysScene.TaintedObject(LocalID, "BSCharacter.setVelocity", delegate()
481 { 477 {
482 if (m_moveActor != null) 478 // m_moveActor.SetVelocityAndTarget(OMV.Vector3.Zero, OMV.Vector3.Zero, false /* inTaintTime */);
483 m_moveActor.SetVelocityAndTarget(vel, vel, true /* inTaintTime */); 479 m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, false /* inTaintTime */);
480 }
481 base.Velocity = value;
482 }
483 }
484 484
485 DetailLog("{0},BSCharacter.setVelocity,taint,vel={1}", LocalID, vel); 485 // SetMomentum just sets the velocity without a target. We need to stop the movement actor if a character.
486 ForceVelocity = vel; 486 public override void SetMomentum(OMV.Vector3 momentum)
487 }); 487 {
488 if (m_moveActor != null)
489 {
490 // m_moveActor.SetVelocityAndTarget(OMV.Vector3.Zero, OMV.Vector3.Zero, false /* inTaintTime */);
491 m_moveActor.SetVelocityAndTarget(RawVelocity, RawVelocity, false /* inTaintTime */);
488 } 492 }
493 base.SetMomentum(momentum);
489 } 494 }
490 495
491 public override OMV.Vector3 ForceVelocity { 496 public override OMV.Vector3 ForceVelocity {
492 get { return RawVelocity; } 497 get { return RawVelocity; }
493 set { 498 set {
494 PhysScene.AssertInTaintTime("BSCharacter.ForceVelocity"); 499 PhysScene.AssertInTaintTime("BSCharacter.ForceVelocity");
495// Util.PrintCallStack(); 500 DetailLog("{0}: BSCharacter.ForceVelocity.set = {1}", LocalID, value);
496 DetailLog("{0}: set ForceVelocity = {1}", LocalID, value);
497 501
498 RawVelocity = value; 502 RawVelocity = Util.ClampV(value, BSParam.MaxLinearVelocity);
499 PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity); 503 PhysScene.PE.SetLinearVelocity(PhysBody, RawVelocity);
500 PhysScene.PE.Activate(PhysBody, true); 504 PhysScene.PE.Activate(PhysBody, true);
501 } 505 }
502 } 506 }
503 507
504 // SetMomentum just sets the velocity without a target. We need to stop the movement actor if a character.
505 public override void SetMomentum(OMV.Vector3 momentum)
506 {
507 if (m_moveActor != null)
508 {
509 m_moveActor.SetVelocityAndTarget(OMV.Vector3.Zero, OMV.Vector3.Zero, false /* inTaintTime */);
510 }
511 base.SetMomentum(momentum);
512 }
513
514
515 public override OMV.Vector3 Torque { 508 public override OMV.Vector3 Torque {
516 get { return RawTorque; } 509 get { return RawTorque; }
517 set { RawTorque = value; 510 set { RawTorque = value;
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs
index 3682455..a846869 100755
--- a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs
@@ -230,15 +230,22 @@ public abstract class BSPhysObject : PhysicsActor
230 // Update the physical location and motion of the object. Called with data from Bullet. 230 // Update the physical location and motion of the object. Called with data from Bullet.
231 public abstract void UpdateProperties(EntityProperties entprop); 231 public abstract void UpdateProperties(EntityProperties entprop);
232 232
233 // The position value as known by BulletSim. Does not effect the physics engine.
233 public virtual OMV.Vector3 RawPosition { get; set; } 234 public virtual OMV.Vector3 RawPosition { get; set; }
235 // Set position in BulletSim and the physics engined to a value immediately. Must be called at taint time.
234 public abstract OMV.Vector3 ForcePosition { get; set; } 236 public abstract OMV.Vector3 ForcePosition { get; set; }
235 237
238 // The orientation value as known by BulletSim. Does not effect the physics engine.
236 public virtual OMV.Quaternion RawOrientation { get; set; } 239 public virtual OMV.Quaternion RawOrientation { get; set; }
240 // Set orientation in BulletSim and the physics engine to a value immediately. Must be called at taint time.
237 public abstract OMV.Quaternion ForceOrientation { get; set; } 241 public abstract OMV.Quaternion ForceOrientation { get; set; }
238 242
243 // The velocity value as known by BulletSim. Does not effect the physics engine.
239 public virtual OMV.Vector3 RawVelocity { get; set; } 244 public virtual OMV.Vector3 RawVelocity { get; set; }
245 // Set velocity in BulletSim and the physics engined to a value immediately. Must be called at taint time.
240 public abstract OMV.Vector3 ForceVelocity { get; set; } 246 public abstract OMV.Vector3 ForceVelocity { get; set; }
241 247
248 // The rotational velocity value as known by BulletSim. Does not effect the physics engine.
242 public OMV.Vector3 RawRotationalVelocity { get; set; } 249 public OMV.Vector3 RawRotationalVelocity { get; set; }
243 250
244 // RawForce is a constant force applied to object (see Force { set; } ) 251 // RawForce is a constant force applied to object (see Force { set; } )
@@ -252,17 +259,28 @@ public abstract class BSPhysObject : PhysicsActor
252 public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force); 259 public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force);
253 public abstract void AddForce(bool inTaintTime, OMV.Vector3 force); 260 public abstract void AddForce(bool inTaintTime, OMV.Vector3 force);
254 261
262 // PhysicsActor.Velocity
263 public override OMV.Vector3 Velocity
264 {
265 get { return RawVelocity; }
266 set
267 {
268 // This sets the velocity now. BSCharacter will override to clear target velocity
269 // before calling this.
270 RawVelocity = value;
271 PhysScene.TaintedObject(LocalID, TypeName + ".SetVelocity", delegate () {
272 // DetailLog("{0},BSPhysObject.Velocity.set,vel={1}", LocalID, RawVelocity);
273 ForceVelocity = RawVelocity;
274 });
275 }
276 }
277
255 // PhysicsActor.SetMomentum 278 // PhysicsActor.SetMomentum
256 // All the physics engined use this as a way of forcing the velocity to something. 279 // All the physics engines use this as a way of forcing the velocity to something.
280 // BSCharacter overrides this so it can set the target velocity to zero before calling this.
257 public override void SetMomentum(OMV.Vector3 momentum) 281 public override void SetMomentum(OMV.Vector3 momentum)
258 { 282 {
259 // This doesn't just set Velocity=momentum because velocity is ramped up to (see MoveActor) 283 this.Velocity = momentum;
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 } 284 }
267 285
268 public override OMV.Vector3 RotationalVelocity { 286 public override OMV.Vector3 RotationalVelocity {
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs
index 78a617d..db2b9db 100644
--- a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs
+++ b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs
@@ -787,17 +787,6 @@ public class BSPrim : BSPhysObject
787 } 787 }
788 } 788 }
789 } 789 }
790 public override OMV.Vector3 Velocity {
791 get { return RawVelocity; }
792 set {
793 RawVelocity = value;
794 PhysScene.TaintedObject(LocalID, "BSPrim.setVelocity", delegate()
795 {
796 // DetailLog("{0},BSPrim.SetVelocity,taint,vel={1}", LocalID, RawVelocity);
797 ForceVelocity = RawVelocity;
798 });
799 }
800 }
801 public override OMV.Vector3 ForceVelocity { 790 public override OMV.Vector3 ForceVelocity {
802 get { return RawVelocity; } 791 get { return RawVelocity; }
803 set { 792 set {