aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs29
1 files changed, 21 insertions, 8 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
index 242aa80..b575e37 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPhysObject.cs
@@ -39,9 +39,12 @@ namespace OpenSim.Region.Physics.BulletSPlugin
39// unless the difference is significant. 39// unless the difference is significant.
40public abstract class BSPhysObject : PhysicsActor 40public abstract class BSPhysObject : PhysicsActor
41{ 41{
42 protected void BaseInitialize(BSScene parentScene) 42 protected void BaseInitialize(BSScene parentScene, uint localID, string name)
43 { 43 {
44 PhysicsScene = parentScene; 44 PhysicsScene = parentScene;
45 LocalID = localID;
46 PhysObjectName = name;
47
45 Linkset = new BSLinkset(PhysicsScene, this); 48 Linkset = new BSLinkset(PhysicsScene, this);
46 49
47 CollisionCollection = new CollisionEventUpdate(); 50 CollisionCollection = new CollisionEventUpdate();
@@ -51,6 +54,8 @@ public abstract class BSPhysObject : PhysicsActor
51 } 54 }
52 55
53 public BSScene PhysicsScene { get; protected set; } 56 public BSScene PhysicsScene { get; protected set; }
57 // public override uint LocalID { get; set; } // Use the LocalID definition in PhysicsActor
58 public string PhysObjectName { get; protected set; }
54 59
55 public BSLinkset Linkset { get; set; } 60 public BSLinkset Linkset { get; set; }
56 61
@@ -111,13 +116,13 @@ public abstract class BSPhysObject : PhysicsActor
111 return ret; 116 return ret;
112 } 117 }
113 118
114 PhysicsScene.PhysicsLogging.Write("{0},BSPhysObject.Collison,call,with={1}", LocalID, collidingWith); 119 DetailLog("{0},BSPhysObject.Collison,call,with={1}", LocalID, collidingWith);
115 120
116 // if someone has subscribed for collision events.... 121 // if someone has subscribed for collision events....
117 if (SubscribedEvents()) { 122 if (SubscribedEvents()) {
118 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth)); 123 CollisionCollection.AddCollider(collidingWith, new ContactPoint(contactPoint, contactNormal, pentrationDepth));
119 PhysicsScene.PhysicsLogging.Write("{0},BSPhysObject.Collison.AddCollider,call,with={1},point={2},normal={3},depth={4},next={5}", 124 DetailLog("{0},BSPhysObject.Collison.AddCollider,call,with={1},point={2},normal={3},depth={4}",
120 LocalID, collidingWith, contactPoint, contactNormal, pentrationDepth, NextCollisionOkTime.ToString("yyyyMMddHHmmssfff")); 125 LocalID, collidingWith, contactPoint, contactNormal, pentrationDepth);
121 ret = true; 126 ret = true;
122 } 127 }
123 return ret; 128 return ret;
@@ -127,6 +132,8 @@ public abstract class BSPhysObject : PhysicsActor
127 // Also handles removal of this from the collection of objects with collisions if 132 // Also handles removal of this from the collection of objects with collisions if
128 // there are no collisions from this object. Mechanism is create one last 133 // there are no collisions from this object. Mechanism is create one last
129 // collision event to make collision_end work. 134 // collision event to make collision_end work.
135 // Called at taint time from within the Step() function thus no locking problems
136 // with CollisionCollection and ObjectsWithNoMoreCollisions.
130 public virtual void SendCollisions() 137 public virtual void SendCollisions()
131 { 138 {
132 // throttle the collisions to the number of milliseconds specified in the subscription 139 // throttle the collisions to the number of milliseconds specified in the subscription
@@ -140,10 +147,11 @@ public abstract class BSPhysObject : PhysicsActor
140 if (CollisionCollection.Count == 0) 147 if (CollisionCollection.Count == 0)
141 PhysicsScene.ObjectsWithNoMoreCollisions.Add(this); 148 PhysicsScene.ObjectsWithNoMoreCollisions.Add(this);
142 149
150 DetailLog("{0},SendCollisions.SendCollisionUpdate,call,numCollisions={1}", LocalID, CollisionCollection.Count);
143 base.SendCollisionUpdate(CollisionCollection); 151 base.SendCollisionUpdate(CollisionCollection);
144 152
145 // The collisionCollection structure is passed around in the simulator. 153 // The collisionCollection structure is passed around in the simulator.
146 // Make sure we don't have a handle to that one and that a new one is used next time. 154 // Make sure we don't have a handle to that one and that a new one is used for next time.
147 CollisionCollection = new CollisionEventUpdate(); 155 CollisionCollection = new CollisionEventUpdate();
148 } 156 }
149 } 157 }
@@ -156,8 +164,7 @@ public abstract class BSPhysObject : PhysicsActor
156 { 164 {
157 // make sure first collision happens 165 // make sure first collision happens
158 NextCollisionOkTime = Util.EnvironmentTickCountSubtract(SubscribedEventsMs); 166 NextCollisionOkTime = Util.EnvironmentTickCountSubtract(SubscribedEventsMs);
159 PhysicsScene.PhysicsLogging.Write("{0},SubscribeEvents,call,ms={1},nextOKTime={2}", 167 DetailLog("{0},SubscribeEvents,call,ms={1}", LocalID, SubscribedEventsMs);
160 LocalID, SubscribedEventsMs, NextCollisionOkTime.ToString("yyyyMMddHHmmssfff"));
161 168
162 PhysicsScene.TaintedObject("BSPhysObject.SubscribeEvents", delegate() 169 PhysicsScene.TaintedObject("BSPhysObject.SubscribeEvents", delegate()
163 { 170 {
@@ -172,7 +179,7 @@ public abstract class BSPhysObject : PhysicsActor
172 } 179 }
173 public override void UnSubscribeEvents() { 180 public override void UnSubscribeEvents() {
174 SubscribedEventsMs = 0; 181 SubscribedEventsMs = 0;
175 PhysicsScene.PhysicsLogging.Write("{0},UnSubscribeEvents,call", LocalID); 182 DetailLog("{0},UnSubscribeEvents,call", LocalID);
176 PhysicsScene.TaintedObject("BSPhysObject.UnSubscribeEvents", delegate() 183 PhysicsScene.TaintedObject("BSPhysObject.UnSubscribeEvents", delegate()
177 { 184 {
178 CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(BSBody.Ptr, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS); 185 CurrentCollisionFlags = BulletSimAPI.RemoveFromCollisionFlags2(BSBody.Ptr, CollisionFlags.BS_SUBSCRIBE_COLLISION_EVENTS);
@@ -184,5 +191,11 @@ public abstract class BSPhysObject : PhysicsActor
184 } 191 }
185 192
186 #endregion // Collisions 193 #endregion // Collisions
194
195 // High performance detailed logging routine used by the physical objects.
196 protected void DetailLog(string msg, params Object[] args)
197 {
198 PhysicsScene.PhysicsLogging.Write(msg, args);
199 }
187} 200}
188} 201}