BulletSim: change how prim mass is saved so it is always calculated but zero is given if not physical.
parent
dda681515b
commit
bf6547be01
|
@ -133,10 +133,7 @@ public sealed class BSPrim : PhysicsActor
|
||||||
_parentPrim = null; // not a child or a parent
|
_parentPrim = null; // not a child or a parent
|
||||||
_vehicle = new BSDynamics(this); // add vehicleness
|
_vehicle = new BSDynamics(this); // add vehicleness
|
||||||
_childrenPrims = new List<BSPrim>();
|
_childrenPrims = new List<BSPrim>();
|
||||||
if (_isPhysical)
|
_mass = CalculateMass();
|
||||||
_mass = CalculateMass();
|
|
||||||
else
|
|
||||||
_mass = 0f;
|
|
||||||
// do the actual object creation at taint time
|
// do the actual object creation at taint time
|
||||||
_scene.TaintedObject(delegate()
|
_scene.TaintedObject(delegate()
|
||||||
{
|
{
|
||||||
|
@ -181,8 +178,8 @@ public sealed class BSPrim : PhysicsActor
|
||||||
_size = value;
|
_size = value;
|
||||||
_scene.TaintedObject(delegate()
|
_scene.TaintedObject(delegate()
|
||||||
{
|
{
|
||||||
if (_isPhysical) _mass = CalculateMass(); // changing size changes the mass
|
_mass = CalculateMass(); // changing size changes the mass
|
||||||
BulletSimAPI.SetObjectScaleMass(_scene.WorldID, _localID, _scale, _mass, _isPhysical);
|
BulletSimAPI.SetObjectScaleMass(_scene.WorldID, _localID, _scale, Mass, IsPhysical);
|
||||||
RecreateGeomAndObject();
|
RecreateGeomAndObject();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -192,7 +189,7 @@ public sealed class BSPrim : PhysicsActor
|
||||||
_pbs = value;
|
_pbs = value;
|
||||||
_scene.TaintedObject(delegate()
|
_scene.TaintedObject(delegate()
|
||||||
{
|
{
|
||||||
if (_isPhysical) _mass = CalculateMass(); // changing the shape changes the mass
|
_mass = CalculateMass(); // changing the shape changes the mass
|
||||||
RecreateGeomAndObject();
|
RecreateGeomAndObject();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -278,6 +275,8 @@ public sealed class BSPrim : PhysicsActor
|
||||||
child._parentPrim = this; // the child has gained a parent
|
child._parentPrim = this; // the child has gained a parent
|
||||||
// RecreateGeomAndObject(); // rebuild my shape with the new child added
|
// RecreateGeomAndObject(); // rebuild my shape with the new child added
|
||||||
LinkAChildToMe(pchild); // build the physical binding between me and the child
|
LinkAChildToMe(pchild); // build the physical binding between me and the child
|
||||||
|
|
||||||
|
_mass = CalculateMass();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
|
@ -306,6 +305,8 @@ public sealed class BSPrim : PhysicsActor
|
||||||
// RecreateGeomAndObject(); // rebuild my shape with the child removed
|
// RecreateGeomAndObject(); // rebuild my shape with the child removed
|
||||||
UnlinkAChildFromMe(pchild);
|
UnlinkAChildFromMe(pchild);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_mass = CalculateMass();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -364,9 +365,17 @@ public sealed class BSPrim : PhysicsActor
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the effective mass of the object. Non-physical objects do not have mass.
|
||||||
public override float Mass {
|
public override float Mass {
|
||||||
get { return _mass; }
|
get {
|
||||||
|
if (IsPhysical)
|
||||||
|
return _mass;
|
||||||
|
else
|
||||||
|
return 0f;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override OMV.Vector3 Force {
|
public override OMV.Vector3 Force {
|
||||||
get { return _force; }
|
get { return _force; }
|
||||||
set {
|
set {
|
||||||
|
@ -446,7 +455,8 @@ public sealed class BSPrim : PhysicsActor
|
||||||
// Called from Scene when doing simulation step so we're in taint processing time.
|
// Called from Scene when doing simulation step so we're in taint processing time.
|
||||||
public void StepVehicle(float timeStep)
|
public void StepVehicle(float timeStep)
|
||||||
{
|
{
|
||||||
_vehicle.Step(timeStep);
|
if (IsPhysical)
|
||||||
|
_vehicle.Step(timeStep);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
|
// Allows the detection of collisions with inherently non-physical prims. see llVolumeDetect for more
|
||||||
|
@ -543,20 +553,13 @@ public sealed class BSPrim : PhysicsActor
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("{0}: ID={1}, SetObjectDynamic: IsStatic={2}, IsSolid={3}", LogHeader, _localID, IsStatic, IsSolid);
|
// m_log.DebugFormat("{0}: ID={1}, SetObjectDynamic: IsStatic={2}, IsSolid={3}", LogHeader, _localID, IsStatic, IsSolid);
|
||||||
// non-physical things work best with a mass of zero
|
// non-physical things work best with a mass of zero
|
||||||
if (IsStatic)
|
if (!IsStatic)
|
||||||
{
|
|
||||||
_mass = 0f;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
_mass = CalculateMass();
|
_mass = CalculateMass();
|
||||||
// If it's dynamic, make sure the hull has been created for it
|
|
||||||
// This shouldn't do much work if the object had previously been built
|
|
||||||
RecreateGeomAndObject();
|
RecreateGeomAndObject();
|
||||||
|
|
||||||
}
|
}
|
||||||
DetailLog("{0},SetObjectDynamic,taint,static={1},solid={2},mass={3}", LocalID, IsStatic, IsSolid, _mass);
|
DetailLog("{0},SetObjectDynamic,taint,static={1},solid={2},mass={3}", LocalID, IsStatic, IsSolid, Mass);
|
||||||
BulletSimAPI.SetObjectProperties(_scene.WorldID, LocalID, IsStatic, IsSolid, SubscribedEvents(), _mass);
|
BulletSimAPI.SetObjectProperties(_scene.WorldID, LocalID, IsStatic, IsSolid, SubscribedEvents(), Mass);
|
||||||
}
|
}
|
||||||
|
|
||||||
// prims don't fly
|
// prims don't fly
|
||||||
|
@ -1273,7 +1276,7 @@ public sealed class BSPrim : PhysicsActor
|
||||||
shape.Rotation = _orientation;
|
shape.Rotation = _orientation;
|
||||||
shape.Velocity = _velocity;
|
shape.Velocity = _velocity;
|
||||||
shape.Scale = _scale;
|
shape.Scale = _scale;
|
||||||
shape.Mass = _isPhysical ? _mass : 0f;
|
shape.Mass = Mass;
|
||||||
shape.Buoyancy = _buoyancy;
|
shape.Buoyancy = _buoyancy;
|
||||||
shape.HullKey = _hullKey;
|
shape.HullKey = _hullKey;
|
||||||
shape.MeshKey = _meshKey;
|
shape.MeshKey = _meshKey;
|
||||||
|
|
Loading…
Reference in New Issue