aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs6
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs4
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs8
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs4
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSScene.cs12
5 files changed, 28 insertions, 6 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
index 5f232a4..68bc1b9 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSActorAvatarMove.cs
@@ -69,7 +69,9 @@ public class BSActorAvatarMove : BSActor
69 // BSActor.Dispose() 69 // BSActor.Dispose()
70 public override void Dispose() 70 public override void Dispose()
71 { 71 {
72 Enabled = false; 72 base.SetEnabled(false);
73 // Now that turned off, remove any state we have in the scene.
74 Refresh();
73 } 75 }
74 76
75 // Called when physical parameters (properties set in Bullet) need to be re-applied. 77 // Called when physical parameters (properties set in Bullet) need to be re-applied.
@@ -181,7 +183,7 @@ public class BSActorAvatarMove : BSActor
181 if (m_controllingPrim.IsColliding) 183 if (m_controllingPrim.IsColliding)
182 { 184 {
183 // If we are colliding with a stationary object, presume we're standing and don't move around 185 // If we are colliding with a stationary object, presume we're standing and don't move around
184 if (!m_controllingPrim.ColliderIsMoving) 186 if (!m_controllingPrim.ColliderIsMoving && !m_controllingPrim.ColliderIsVolumeDetect)
185 { 187 {
186 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID); 188 m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID);
187 m_controllingPrim.IsStationary = true; 189 m_controllingPrim.IsStationary = true;
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
index 502f85f..291dfcd 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSCharacter.cs
@@ -107,6 +107,8 @@ public sealed class BSCharacter : BSPhysObject
107 PhysicalActors.Add(AvatarMoveActorName, m_moveActor); 107 PhysicalActors.Add(AvatarMoveActorName, m_moveActor);
108 108
109 SetPhysicalProperties(); 109 SetPhysicalProperties();
110
111 IsInitialized = true;
110 }); 112 });
111 return; 113 return;
112 } 114 }
@@ -114,6 +116,8 @@ public sealed class BSCharacter : BSPhysObject
114 // called when this character is being destroyed and the resources should be released 116 // called when this character is being destroyed and the resources should be released
115 public override void Destroy() 117 public override void Destroy()
116 { 118 {
119 IsInitialized = false;
120
117 base.Destroy(); 121 base.Destroy();
118 122
119 DetailLog("{0},BSCharacter.Destroy", LocalID); 123 DetailLog("{0},BSCharacter.Destroy", LocalID);
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 27caf62..9dc52d5 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -72,6 +72,8 @@ public abstract class BSPhysObject : PhysicsActor
72 } 72 }
73 protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName) 73 protected BSPhysObject(BSScene parentScene, uint localID, string name, string typeName)
74 { 74 {
75 IsInitialized = false;
76
75 PhysScene = parentScene; 77 PhysScene = parentScene;
76 LocalID = localID; 78 LocalID = localID;
77 PhysObjectName = name; 79 PhysObjectName = name;
@@ -130,6 +132,9 @@ public abstract class BSPhysObject : PhysicsActor
130 public string PhysObjectName { get; protected set; } 132 public string PhysObjectName { get; protected set; }
131 public string TypeName { get; protected set; } 133 public string TypeName { get; protected set; }
132 134
135 // Set to 'true' when the object is completely initialized.
136 // This mostly prevents property updates and collisions until the object is completely here.
137 public bool IsInitialized { get; protected set; }
133 138
134 // Return the object mass without calculating it or having side effects 139 // Return the object mass without calculating it or having side effects
135 public abstract float RawMass { get; } 140 public abstract float RawMass { get; }
@@ -352,6 +357,8 @@ public abstract class BSPhysObject : PhysicsActor
352 // On a collision, check the collider and remember if the last collider was moving 357 // On a collision, check the collider and remember if the last collider was moving
353 // Used to modify the standing of avatars (avatars on stationary things stand still) 358 // Used to modify the standing of avatars (avatars on stationary things stand still)
354 public bool ColliderIsMoving; 359 public bool ColliderIsMoving;
360 // 'true' if the last collider was a volume detect object
361 public bool ColliderIsVolumeDetect;
355 // Used by BSCharacter to manage standing (and not slipping) 362 // Used by BSCharacter to manage standing (and not slipping)
356 public bool IsStationary; 363 public bool IsStationary;
357 364
@@ -431,6 +438,7 @@ public abstract class BSPhysObject : PhysicsActor
431 438
432 // For movement tests, remember if we are colliding with an object that is moving. 439 // For movement tests, remember if we are colliding with an object that is moving.
433 ColliderIsMoving = collidee != null ? (collidee.RawVelocity != OMV.Vector3.Zero) : false; 440 ColliderIsMoving = collidee != null ? (collidee.RawVelocity != OMV.Vector3.Zero) : false;
441 ColliderIsVolumeDetect = collidee != null ? (collidee.IsVolumeDetect) : false;
434 442
435 // Make a collection of the collisions that happened the last simulation tick. 443 // Make a collection of the collisions that happened the last simulation tick.
436 // This is different than the collection created for sending up to the simulator as it is cleared every tick. 444 // This is different than the collection created for sending up to the simulator as it is cleared every tick.
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 6b5dea3..d5b999d 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -110,6 +110,8 @@ public class BSPrim : BSPhysObject
110 CreateGeomAndObject(true); 110 CreateGeomAndObject(true);
111 111
112 CurrentCollisionFlags = PhysScene.PE.GetCollisionFlags(PhysBody); 112 CurrentCollisionFlags = PhysScene.PE.GetCollisionFlags(PhysBody);
113
114 IsInitialized = true;
113 }); 115 });
114 } 116 }
115 117
@@ -117,6 +119,8 @@ public class BSPrim : BSPhysObject
117 public override void Destroy() 119 public override void Destroy()
118 { 120 {
119 // m_log.DebugFormat("{0}: Destroy, id={1}", LogHeader, LocalID); 121 // m_log.DebugFormat("{0}: Destroy, id={1}", LogHeader, LocalID);
122 IsInitialized = false;
123
120 base.Destroy(); 124 base.Destroy();
121 125
122 // Undo any vehicle properties 126 // Undo any vehicle properties
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
index 79ac5a5..88d50b4 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSScene.cs
@@ -639,7 +639,8 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
639 BSPhysObject pobj; 639 BSPhysObject pobj;
640 if (PhysObjects.TryGetValue(entprop.ID, out pobj)) 640 if (PhysObjects.TryGetValue(entprop.ID, out pobj))
641 { 641 {
642 pobj.UpdateProperties(entprop); 642 if (pobj.IsInitialized)
643 pobj.UpdateProperties(entprop);
643 } 644 }
644 } 645 }
645 } 646 }
@@ -766,10 +767,13 @@ public sealed class BSScene : PhysicsScene, IPhysicsParameters
766 767
767 // DetailLog("{0},BSScene.SendCollision,collide,id={1},with={2}", DetailLogZero, localID, collidingWith); 768 // DetailLog("{0},BSScene.SendCollision,collide,id={1},with={2}", DetailLogZero, localID, collidingWith);
768 769
769 if (collider.Collide(collidingWith, collidee, collidePoint, collideNormal, penetration)) 770 if (collider.IsInitialized)
770 { 771 {
771 // If a collision was 'good', remember to send it to the simulator 772 if (collider.Collide(collidingWith, collidee, collidePoint, collideNormal, penetration))
772 ObjectsWithCollisions.Add(collider); 773 {
774 // If a collision was 'good', remember to send it to the simulator
775 ObjectsWithCollisions.Add(collider);
776 }
773 } 777 }
774 778
775 return; 779 return;