aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs40
1 files changed, 13 insertions, 27 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
index 29f27e8..4f10d46 100644
--- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs
@@ -49,9 +49,6 @@ public sealed class BSPrim : BSPhysObject
49 private ulong _hullKey; 49 private ulong _hullKey;
50 private List<ConvexResult> _hulls; 50 private List<ConvexResult> _hulls;
51 51
52 private String _avName;
53 private uint _localID = 0;
54
55 // _size is what the user passed. _scale is what we pass to the physics engine with the mesh. 52 // _size is what the user passed. _scale is what we pass to the physics engine with the mesh.
56 // Often _scale is unity because the meshmerizer will apply _size when creating the mesh. 53 // Often _scale is unity because the meshmerizer will apply _size when creating the mesh.
57 private OMV.Vector3 _size; // the multiplier for each mesh dimension as passed by the user 54 private OMV.Vector3 _size; // the multiplier for each mesh dimension as passed by the user
@@ -99,9 +96,7 @@ public sealed class BSPrim : BSPhysObject
99 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical) 96 OMV.Quaternion rotation, PrimitiveBaseShape pbs, bool pisPhysical)
100 { 97 {
101 // m_log.DebugFormat("{0}: BSPrim creation of {1}, id={2}", LogHeader, primName, localID); 98 // m_log.DebugFormat("{0}: BSPrim creation of {1}, id={2}", LogHeader, primName, localID);
102 base.BaseInitialize(parent_scene); 99 base.BaseInitialize(parent_scene, localID, primName);
103 _localID = localID;
104 _avName = primName;
105 _physicsActorType = (int)ActorTypes.Prim; 100 _physicsActorType = (int)ActorTypes.Prim;
106 _position = pos; 101 _position = pos;
107 _size = size; 102 _size = size;
@@ -187,10 +182,6 @@ public sealed class BSPrim : BSPhysObject
187 }); 182 });
188 } 183 }
189 } 184 }
190 public override uint LocalID {
191 set { _localID = value; }
192 get { return _localID; }
193 }
194 public override bool Grabbed { 185 public override bool Grabbed {
195 set { _grabbed = value; 186 set { _grabbed = value;
196 } 187 }
@@ -267,7 +258,7 @@ public sealed class BSPrim : BSPhysObject
267 _position = BulletSimAPI.GetPosition2(BSBody.Ptr); 258 _position = BulletSimAPI.GetPosition2(BSBody.Ptr);
268 259
269 // don't do the GetObjectPosition for root elements because this function is called a zillion times 260 // don't do the GetObjectPosition for root elements because this function is called a zillion times
270 // _position = BulletSimAPI.GetObjectPosition(Scene.WorldID, _localID); 261 // _position = BulletSimAPI.GetObjectPosition(Scene.WorldID, LocalID);
271 return _position; 262 return _position;
272 } 263 }
273 set { 264 set {
@@ -425,7 +416,7 @@ public sealed class BSPrim : BSPhysObject
425 // TODO: what does it mean if a child in a linkset changes its orientation? Rebuild the constraint? 416 // TODO: what does it mean if a child in a linkset changes its orientation? Rebuild the constraint?
426 PhysicsScene.TaintedObject("BSPrim.setOrientation", delegate() 417 PhysicsScene.TaintedObject("BSPrim.setOrientation", delegate()
427 { 418 {
428 // _position = BulletSimAPI.GetObjectPosition(Scene.WorldID, _localID); 419 // _position = BulletSimAPI.GetObjectPosition(Scene.WorldID, LocalID);
429 DetailLog("{0},BSPrim.setOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation); 420 DetailLog("{0},BSPrim.setOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation);
430 BulletSimAPI.SetTranslation2(BSBody.Ptr, _position, _orientation); 421 BulletSimAPI.SetTranslation2(BSBody.Ptr, _position, _orientation);
431 }); 422 });
@@ -666,7 +657,7 @@ public sealed class BSPrim : BSPhysObject
666 // Buoyancy is faked by changing the gravity applied to the object 657 // Buoyancy is faked by changing the gravity applied to the object
667 float grav = PhysicsScene.Params.gravity * (1f - _buoyancy); 658 float grav = PhysicsScene.Params.gravity * (1f - _buoyancy);
668 BulletSimAPI.SetGravity2(BSBody.Ptr, new OMV.Vector3(0f, 0f, grav)); 659 BulletSimAPI.SetGravity2(BSBody.Ptr, new OMV.Vector3(0f, 0f, grav));
669 // BulletSimAPI.SetObjectBuoyancy(Scene.WorldID, _localID, _buoyancy); 660 // BulletSimAPI.SetObjectBuoyancy(Scene.WorldID, LocalID, _buoyancy);
670 }); 661 });
671 } 662 }
672 } 663 }
@@ -1127,7 +1118,7 @@ public sealed class BSPrim : BSPhysObject
1127 lod = PhysicsScene.MeshMegaPrimLOD; 1118 lod = PhysicsScene.MeshMegaPrimLOD;
1128 1119
1129 ulong newMeshKey = (ulong)_pbs.GetMeshKey(_size, lod); 1120 ulong newMeshKey = (ulong)_pbs.GetMeshKey(_size, lod);
1130 // m_log.DebugFormat("{0}: CreateGeomMesh: lID={1}, oldKey={2}, newKey={3}", LogHeader, _localID, _meshKey, newMeshKey); 1121 // m_log.DebugFormat("{0}: CreateGeomMesh: lID={1}, oldKey={2}, newKey={3}", LogHeader, LocalID, _meshKey, newMeshKey);
1131 1122
1132 // if this new shape is the same as last time, don't recreate the mesh 1123 // if this new shape is the same as last time, don't recreate the mesh
1133 if (_meshKey == newMeshKey) return false; 1124 if (_meshKey == newMeshKey) return false;
@@ -1136,7 +1127,7 @@ public sealed class BSPrim : BSPhysObject
1136 // Since we're recreating new, get rid of any previously generated shape 1127 // Since we're recreating new, get rid of any previously generated shape
1137 if (_meshKey != 0) 1128 if (_meshKey != 0)
1138 { 1129 {
1139 // m_log.DebugFormat("{0}: CreateGeom: deleting old mesh. lID={1}, Key={2}", LogHeader, _localID, _meshKey); 1130 // m_log.DebugFormat("{0}: CreateGeom: deleting old mesh. lID={1}, Key={2}", LogHeader, LocalID, _meshKey);
1140 DetailLog("{0},BSPrim.CreateGeomMesh,deleteOld,key={1}", LocalID, _meshKey); 1131 DetailLog("{0},BSPrim.CreateGeomMesh,deleteOld,key={1}", LocalID, _meshKey);
1141 BulletSimAPI.DestroyMesh(PhysicsScene.WorldID, _meshKey); 1132 BulletSimAPI.DestroyMesh(PhysicsScene.WorldID, _meshKey);
1142 _mesh = null; 1133 _mesh = null;
@@ -1145,7 +1136,7 @@ public sealed class BSPrim : BSPhysObject
1145 1136
1146 _meshKey = newMeshKey; 1137 _meshKey = newMeshKey;
1147 // always pass false for physicalness as this creates some sort of bounding box which we don't need 1138 // always pass false for physicalness as this creates some sort of bounding box which we don't need
1148 _mesh = PhysicsScene.mesher.CreateMesh(_avName, _pbs, _size, lod, false); 1139 _mesh = PhysicsScene.mesher.CreateMesh(PhysObjectName, _pbs, _size, lod, false);
1149 1140
1150 int[] indices = _mesh.getIndexListAsInt(); 1141 int[] indices = _mesh.getIndexListAsInt();
1151 List<OMV.Vector3> vertices = _mesh.getVertexList(); 1142 List<OMV.Vector3> vertices = _mesh.getVertexList();
@@ -1160,7 +1151,7 @@ public sealed class BSPrim : BSPhysObject
1160 } 1151 }
1161 1152
1162 // m_log.DebugFormat("{0}: CreateGeomMesh: calling CreateMesh. lid={1}, key={2}, indices={3}, vertices={4}", 1153 // m_log.DebugFormat("{0}: CreateGeomMesh: calling CreateMesh. lid={1}, key={2}, indices={3}, vertices={4}",
1163 // LogHeader, _localID, _meshKey, indices.Length, vertices.Count); 1154 // LogHeader, LocalID, _meshKey, indices.Length, vertices.Count);
1164 BulletSimAPI.CreateMesh(PhysicsScene.WorldID, _meshKey, indices.GetLength(0), indices, 1155 BulletSimAPI.CreateMesh(PhysicsScene.WorldID, _meshKey, indices.GetLength(0), indices,
1165 vertices.Count, verticesAsFloats); 1156 vertices.Count, verticesAsFloats);
1166 1157
@@ -1176,7 +1167,7 @@ public sealed class BSPrim : BSPhysObject
1176 { 1167 {
1177 float lod = _pbs.SculptEntry ? PhysicsScene.SculptLOD : PhysicsScene.MeshLOD; 1168 float lod = _pbs.SculptEntry ? PhysicsScene.SculptLOD : PhysicsScene.MeshLOD;
1178 ulong newHullKey = (ulong)_pbs.GetMeshKey(_size, lod); 1169 ulong newHullKey = (ulong)_pbs.GetMeshKey(_size, lod);
1179 // m_log.DebugFormat("{0}: CreateGeomHull: lID={1}, oldKey={2}, newKey={3}", LogHeader, _localID, _hullKey, newHullKey); 1170 // m_log.DebugFormat("{0}: CreateGeomHull: lID={1}, oldKey={2}, newKey={3}", LogHeader, LocalID, _hullKey, newHullKey);
1180 1171
1181 // if the hull hasn't changed, don't rebuild it 1172 // if the hull hasn't changed, don't rebuild it
1182 if (newHullKey == _hullKey) return false; 1173 if (newHullKey == _hullKey) return false;
@@ -1276,7 +1267,7 @@ public sealed class BSPrim : BSPhysObject
1276 } 1267 }
1277 1268
1278 // create the hull definition in Bullet 1269 // create the hull definition in Bullet
1279 // m_log.DebugFormat("{0}: CreateGeom: calling CreateHull. lid={1}, key={2}, hulls={3}", LogHeader, _localID, _hullKey, hullCount); 1270 // m_log.DebugFormat("{0}: CreateGeom: calling CreateHull. lid={1}, key={2}, hulls={3}", LogHeader, LocalID, _hullKey, hullCount);
1280 BulletSimAPI.CreateHull(PhysicsScene.WorldID, _hullKey, hullCount, convHulls); 1271 BulletSimAPI.CreateHull(PhysicsScene.WorldID, _hullKey, hullCount, convHulls);
1281 _shapeType = ShapeData.PhysicsShapeType.SHAPE_HULL; 1272 _shapeType = ShapeData.PhysicsShapeType.SHAPE_HULL;
1282 // meshes are already scaled by the meshmerizer 1273 // meshes are already scaled by the meshmerizer
@@ -1316,7 +1307,7 @@ public sealed class BSPrim : BSPhysObject
1316 // the mesh or hull must have already been created in Bullet 1307 // the mesh or hull must have already been created in Bullet
1317 ShapeData shape; 1308 ShapeData shape;
1318 FillShapeInfo(out shape); 1309 FillShapeInfo(out shape);
1319 // m_log.DebugFormat("{0}: CreateObject: lID={1}, shape={2}", LogHeader, _localID, shape.Type); 1310 // m_log.DebugFormat("{0}: CreateObject: lID={1}, shape={2}", LogHeader, LocalID, shape.Type);
1320 bool ret = BulletSimAPI.CreateObject(PhysicsScene.WorldID, shape); 1311 bool ret = BulletSimAPI.CreateObject(PhysicsScene.WorldID, shape);
1321 1312
1322 // the CreateObject() may have recreated the rigid body. Make sure we have the latest address. 1313 // the CreateObject() may have recreated the rigid body. Make sure we have the latest address.
@@ -1329,7 +1320,7 @@ public sealed class BSPrim : BSPhysObject
1329 // Copy prim's info into the BulletSim shape description structure 1320 // Copy prim's info into the BulletSim shape description structure
1330 public void FillShapeInfo(out ShapeData shape) 1321 public void FillShapeInfo(out ShapeData shape)
1331 { 1322 {
1332 shape.ID = _localID; 1323 shape.ID = LocalID;
1333 shape.Type = _shapeType; 1324 shape.Type = _shapeType;
1334 shape.Position = _position; 1325 shape.Position = _position;
1335 shape.Rotation = _orientation; 1326 shape.Rotation = _orientation;
@@ -1350,7 +1341,7 @@ public sealed class BSPrim : BSPhysObject
1350 // No locking here because this is done when the physics engine is not simulating 1341 // No locking here because this is done when the physics engine is not simulating
1351 private void CreateGeomAndObject(bool forceRebuild) 1342 private void CreateGeomAndObject(bool forceRebuild)
1352 { 1343 {
1353 // m_log.DebugFormat("{0}: CreateGeomAndObject. lID={1}, force={2}", LogHeader, _localID, forceRebuild); 1344 // m_log.DebugFormat("{0}: CreateGeomAndObject. lID={1}, force={2}", LogHeader, LocalID, forceRebuild);
1354 // Create the geometry that will make up the object 1345 // Create the geometry that will make up the object
1355 if (CreateGeom(forceRebuild)) 1346 if (CreateGeom(forceRebuild))
1356 { 1347 {
@@ -1453,10 +1444,5 @@ public sealed class BSPrim : BSPhysObject
1453 } 1444 }
1454 */ 1445 */
1455 } 1446 }
1456 // Invoke the detailed logger and output something if it's enabled.
1457 private void DetailLog(string msg, params Object[] args)
1458 {
1459 PhysicsScene.PhysicsLogging.Write(msg, args);
1460 }
1461} 1447}
1462} 1448}