diff options
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs')
-rw-r--r-- | OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs index 7590d93..50d11e6 100644 --- a/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs +++ b/OpenSim/Region/Physics/BulletSPlugin/BSPrim.cs | |||
@@ -103,7 +103,10 @@ public sealed class BSPrim : PhysicsActor | |||
103 | long _collidingGroundStep; | 103 | long _collidingGroundStep; |
104 | 104 | ||
105 | private BulletBody m_body; | 105 | private BulletBody m_body; |
106 | public BulletBody Body { get { return m_body; } } | 106 | public BulletBody Body { |
107 | get { return m_body; } | ||
108 | set { m_body = value; } | ||
109 | } | ||
107 | 110 | ||
108 | private BSDynamics _vehicle; | 111 | private BSDynamics _vehicle; |
109 | 112 | ||
@@ -477,9 +480,11 @@ public sealed class BSPrim : PhysicsActor | |||
477 | // Only called at taint time so it is save to call into Bullet. | 480 | // Only called at taint time so it is save to call into Bullet. |
478 | private void SetObjectDynamic() | 481 | private void SetObjectDynamic() |
479 | { | 482 | { |
480 | // m_log.DebugFormat("{0}: ID={1}, SetObjectDynamic: IsStatic={2}, IsSolid={3}", LogHeader, _localID, IsStatic, IsSolid); | 483 | // RA: remove this for the moment. |
481 | 484 | // The problem is that dynamic objects are hulls so if we are becoming physical | |
482 | RecreateGeomAndObject(); | 485 | // the shape has to be checked and possibly built. |
486 | // Maybe a VerifyCorrectPhysicalShape() routine? | ||
487 | // RecreateGeomAndObject(); | ||
483 | 488 | ||
484 | float mass = _mass; | 489 | float mass = _mass; |
485 | // Bullet wants static objects have a mass of zero | 490 | // Bullet wants static objects have a mass of zero |
@@ -971,21 +976,23 @@ public sealed class BSPrim : PhysicsActor | |||
971 | { | 976 | { |
972 | DetailLog("{0},CreateGeom,sphere", LocalID); | 977 | DetailLog("{0},CreateGeom,sphere", LocalID); |
973 | _shapeType = ShapeData.PhysicsShapeType.SHAPE_SPHERE; | 978 | _shapeType = ShapeData.PhysicsShapeType.SHAPE_SPHERE; |
974 | ret = true; | ||
975 | // Bullet native objects are scaled by the Bullet engine so pass the size in | 979 | // Bullet native objects are scaled by the Bullet engine so pass the size in |
976 | _scale = _size; | 980 | _scale = _size; |
981 | // TODO: do we need to check for and destroy a mesh or hull that might have been left from before? | ||
982 | ret = true; | ||
977 | } | 983 | } |
978 | } | 984 | } |
979 | } | 985 | } |
980 | else | 986 | else |
981 | { | 987 | { |
982 | // m_log.DebugFormat("{0}: CreateGeom: Defaulting to box. lid={1}, size={2}", LogHeader, LocalID, _size); | 988 | // m_log.DebugFormat("{0}: CreateGeom: Defaulting to box. lid={1}, type={2}, size={3}", LogHeader, LocalID, _shapeType, _size); |
983 | if (_shapeType != ShapeData.PhysicsShapeType.SHAPE_BOX) | 989 | if (_shapeType != ShapeData.PhysicsShapeType.SHAPE_BOX) |
984 | { | 990 | { |
985 | DetailLog("{0},CreateGeom,box", LocalID); | 991 | DetailLog("{0},CreateGeom,box", LocalID); |
986 | _shapeType = ShapeData.PhysicsShapeType.SHAPE_BOX; | 992 | _shapeType = ShapeData.PhysicsShapeType.SHAPE_BOX; |
987 | ret = true; | ||
988 | _scale = _size; | 993 | _scale = _size; |
994 | // TODO: do we need to check for and destroy a mesh or hull that might have been left from before? | ||
995 | ret = true; | ||
989 | } | 996 | } |
990 | } | 997 | } |
991 | } | 998 | } |
@@ -1203,11 +1210,9 @@ public sealed class BSPrim : PhysicsActor | |||
1203 | FillShapeInfo(out shape); | 1210 | FillShapeInfo(out shape); |
1204 | // m_log.DebugFormat("{0}: CreateObject: lID={1}, shape={2}", LogHeader, _localID, shape.Type); | 1211 | // m_log.DebugFormat("{0}: CreateObject: lID={1}, shape={2}", LogHeader, _localID, shape.Type); |
1205 | BulletSimAPI.CreateObject(_scene.WorldID, shape); | 1212 | BulletSimAPI.CreateObject(_scene.WorldID, shape); |
1213 | |||
1206 | // the CreateObject() may have recreated the rigid body. Make sure we have the latest. | 1214 | // the CreateObject() may have recreated the rigid body. Make sure we have the latest. |
1207 | m_body.Ptr = BulletSimAPI.GetBodyHandle2(_scene.World.Ptr, LocalID); | 1215 | m_body.Ptr = BulletSimAPI.GetBodyHandle2(_scene.World.Ptr, LocalID); |
1208 | |||
1209 | // The root object could have been recreated. Make sure everything linksety is up to date. | ||
1210 | _linkset.RefreshLinkset(this); | ||
1211 | } | 1216 | } |
1212 | 1217 | ||
1213 | // Copy prim's info into the BulletSim shape description structure | 1218 | // Copy prim's info into the BulletSim shape description structure |
@@ -1236,8 +1241,8 @@ public sealed class BSPrim : PhysicsActor | |||
1236 | private void RecreateGeomAndObject() | 1241 | private void RecreateGeomAndObject() |
1237 | { | 1242 | { |
1238 | // m_log.DebugFormat("{0}: RecreateGeomAndObject. lID={1}", LogHeader, _localID); | 1243 | // m_log.DebugFormat("{0}: RecreateGeomAndObject. lID={1}", LogHeader, _localID); |
1239 | CreateGeom(true); | 1244 | if (CreateGeom(true)) |
1240 | CreateObject(); | 1245 | CreateObject(); |
1241 | return; | 1246 | return; |
1242 | } | 1247 | } |
1243 | 1248 | ||
@@ -1322,6 +1327,15 @@ public sealed class BSPrim : PhysicsActor | |||
1322 | 1327 | ||
1323 | base.RequestPhysicsterseUpdate(); | 1328 | base.RequestPhysicsterseUpdate(); |
1324 | } | 1329 | } |
1330 | /* | ||
1331 | else | ||
1332 | { | ||
1333 | // For debugging, we can also report the movement of children | ||
1334 | DetailLog("{0},UpdateProperties,child,pos={1},orient={2},vel={3},accel={4},rotVel={5}", | ||
1335 | LocalID, entprop.Position, entprop.Rotation, entprop.Velocity, | ||
1336 | entprop.Acceleration, entprop.RotationalVelocity); | ||
1337 | } | ||
1338 | */ | ||
1325 | } | 1339 | } |
1326 | 1340 | ||
1327 | // I've collided with something | 1341 | // I've collided with something |