diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 05cc822..38a9e46 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -497,6 +497,9 @@ public sealed class BSPrim : PhysicsActor | |||
497 | 497 | ||
498 | BulletSimAPI.SetObjectProperties(_scene.WorldID, LocalID, IsStatic, IsSolid, SubscribedEvents(), mass); | 498 | BulletSimAPI.SetObjectProperties(_scene.WorldID, LocalID, IsStatic, IsSolid, SubscribedEvents(), mass); |
499 | 499 | ||
500 | // recompute any linkset parameters | ||
501 | _linkset.Refresh(this); | ||
502 | |||
500 | CollisionFlags cf = BulletSimAPI.GetCollisionFlags2(Body.Ptr); | 503 | CollisionFlags cf = BulletSimAPI.GetCollisionFlags2(Body.Ptr); |
501 | DetailLog("{0},BSPrim.SetObjectDynamic,taint,static={1},solid={2},mass={3}, cf={4}", LocalID, IsStatic, IsSolid, mass, cf); | 504 | DetailLog("{0},BSPrim.SetObjectDynamic,taint,static={1},solid={2},mass={3}, cf={4}", LocalID, IsStatic, IsSolid, mass, cf); |
502 | } | 505 | } |
@@ -1095,28 +1098,21 @@ public sealed class BSPrim : PhysicsActor | |||
1095 | // if the hull hasn't changed, don't rebuild it | 1098 | // if the hull hasn't changed, don't rebuild it |
1096 | if (newHullKey == _hullKey) return; | 1099 | if (newHullKey == _hullKey) return; |
1097 | 1100 | ||
1098 | DetailLog("{0},BSPrim.CreateGeomHull,create,key={1}", LocalID, _meshKey); | 1101 | DetailLog("{0},BSPrim.CreateGeomHull,create,oldKey={1},newKey={2}", LocalID, _hullKey, newHullKey); |
1099 | 1102 | ||
1100 | // Since we're recreating new, get rid of any previously generated shape | 1103 | // Since we're recreating new, get rid of any previously generated shape |
1101 | if (_hullKey != 0) | 1104 | if (_hullKey != 0) |
1102 | { | 1105 | { |
1103 | // m_log.DebugFormat("{0}: CreateGeom: deleting old hull. Key={1}", LogHeader, _hullKey); | 1106 | // m_log.DebugFormat("{0}: CreateGeom: deleting old hull. Key={1}", LogHeader, _hullKey); |
1104 | DetailLog("{0},BSPrim.CreateGeomHull,deleteOldHull,key={1}", LocalID, _meshKey); | 1107 | DetailLog("{0},BSPrim.CreateGeomHull,deleteOldHull,key={1}", LocalID, _hullKey); |
1105 | BulletSimAPI.DestroyHull(_scene.WorldID, _hullKey); | 1108 | BulletSimAPI.DestroyHull(_scene.WorldID, _hullKey); |
1106 | _hullKey = 0; | 1109 | _hullKey = 0; |
1107 | _hulls.Clear(); | ||
1108 | DetailLog("{0},BSPrim.CreateGeomHull,deleteOldMesh,key={1}", LocalID, _meshKey); | ||
1109 | BulletSimAPI.DestroyMesh(_scene.WorldID, _meshKey); | ||
1110 | _mesh = null; // the mesh cannot match either | ||
1111 | _meshKey = 0; | ||
1112 | } | 1110 | } |
1113 | 1111 | ||
1114 | _hullKey = newHullKey; | 1112 | _hullKey = newHullKey; |
1115 | if (_meshKey != _hullKey) | 1113 | |
1116 | { | 1114 | // Make sure the underlying mesh exists and is correct |
1117 | // if the underlying mesh has changed, rebuild it | 1115 | CreateGeomMesh(); |
1118 | CreateGeomMesh(); | ||
1119 | } | ||
1120 | 1116 | ||
1121 | int[] indices = _mesh.getIndexListAsInt(); | 1117 | int[] indices = _mesh.getIndexListAsInt(); |
1122 | List<OMV.Vector3> vertices = _mesh.getVertexList(); | 1118 | List<OMV.Vector3> vertices = _mesh.getVertexList(); |
@@ -1142,7 +1138,7 @@ public sealed class BSPrim : PhysicsActor | |||
1142 | // create the hull into the _hulls variable | 1138 | // create the hull into the _hulls variable |
1143 | convexBuilder.process(dcomp); | 1139 | convexBuilder.process(dcomp); |
1144 | 1140 | ||
1145 | // Convert the vertices and indices for passing to unmanaged | 1141 | // Convert the vertices and indices for passing to unmanaged. |
1146 | // The hull information is passed as a large floating point array. | 1142 | // The hull information is passed as a large floating point array. |
1147 | // The format is: | 1143 | // The format is: |
1148 | // convHulls[0] = number of hulls | 1144 | // convHulls[0] = number of hulls |
@@ -1355,7 +1351,7 @@ public sealed class BSPrim : PhysicsActor | |||
1355 | } | 1351 | } |
1356 | 1352 | ||
1357 | // I've collided with something | 1353 | // I've collided with something |
1358 | CollisionEventUpdate collisionCollection = null; | 1354 | CollisionEventUpdate collisionCollection; |
1359 | public void Collide(uint collidingWith, ActorTypes type, OMV.Vector3 contactPoint, OMV.Vector3 contactNormal, float pentrationDepth) | 1355 | public void Collide(uint collidingWith, ActorTypes type, OMV.Vector3 contactPoint, OMV.Vector3 contactNormal, float pentrationDepth) |
1360 | { | 1356 | { |
1361 | // m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith); | 1357 | // m_log.DebugFormat("{0}: Collide: ms={1}, id={2}, with={3}", LogHeader, _subscribedEventsMs, LocalID, collidingWith); |
@@ -1367,6 +1363,8 @@ public sealed class BSPrim : PhysicsActor | |||
1367 | _collidingGroundStep = _scene.SimulationStep; | 1363 | _collidingGroundStep = _scene.SimulationStep; |
1368 | } | 1364 | } |
1369 | 1365 | ||
1366 | // DetailLog("{0},BSPrim.Collison,call,with={1}", LocalID, collidingWith); | ||
1367 | |||
1370 | // if someone is subscribed to collision events.... | 1368 | // if someone is subscribed to collision events.... |
1371 | if (_subscribedEventsMs != 0) { | 1369 | if (_subscribedEventsMs != 0) { |
1372 | // throttle the collisions to the number of milliseconds specified in the subscription | 1370 | // throttle the collisions to the number of milliseconds specified in the subscription |
@@ -1387,7 +1385,9 @@ public sealed class BSPrim : PhysicsActor | |||
1387 | if (collisionCollection != null && collisionCollection.Count > 0) | 1385 | if (collisionCollection != null && collisionCollection.Count > 0) |
1388 | { | 1386 | { |
1389 | base.SendCollisionUpdate(collisionCollection); | 1387 | base.SendCollisionUpdate(collisionCollection); |
1390 | collisionCollection.Clear(); | 1388 | // The collisionCollection structure is passed around in the simulator. |
1389 | // Make sure we don't have a handle to that one and that a new one is used next time. | ||
1390 | collisionCollection = null; | ||
1391 | } | 1391 | } |
1392 | } | 1392 | } |
1393 | 1393 | ||