BulletSim: Add AddObjectForce to BulletSim API.
Add interface 2 enhancements to BSCharacter. Modify AddForce and SetForce to use the new Bullet interface. More DetailLog statements for character.0.7.4.1
parent
205f2326dc
commit
ea36d4a4cf
|
@ -40,6 +40,7 @@ public class BSCharacter : PhysicsActor
|
|||
private static readonly string LogHeader = "[BULLETS CHAR]";
|
||||
|
||||
private BSScene _scene;
|
||||
public BSScene Scene { get { return _scene; } }
|
||||
private String _avName;
|
||||
// private bool _stopped;
|
||||
private Vector3 _size;
|
||||
|
@ -73,6 +74,12 @@ public class BSCharacter : PhysicsActor
|
|||
private bool _kinematic;
|
||||
private float _buoyancy;
|
||||
|
||||
private BulletBody m_body;
|
||||
public BulletBody Body {
|
||||
get { return m_body; }
|
||||
set { m_body = value; }
|
||||
}
|
||||
|
||||
private int _subscribedEventsMs = 0;
|
||||
private int _nextCollisionOkTime = 0;
|
||||
|
||||
|
@ -116,6 +123,8 @@ public class BSCharacter : PhysicsActor
|
|||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
BulletSimAPI.CreateObject(parent_scene.WorldID, shapeData);
|
||||
|
||||
m_body = new BulletBody(LocalID, BulletSimAPI.GetBodyHandle2(_scene.World.Ptr, LocalID));
|
||||
});
|
||||
|
||||
return;
|
||||
|
@ -124,6 +133,7 @@ public class BSCharacter : PhysicsActor
|
|||
// called when this character is being destroyed and the resources should be released
|
||||
public void Destroy()
|
||||
{
|
||||
// DetailLog("{0},Destroy", LocalID);
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
BulletSimAPI.DestroyObject(_scene.WorldID, _localID);
|
||||
|
@ -174,6 +184,7 @@ public class BSCharacter : PhysicsActor
|
|||
_position = value;
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
DetailLog("{0},SetPosition,taint,pos={1},orient={2}", LocalID, _position, _orientation);
|
||||
BulletSimAPI.SetObjectTranslation(_scene.WorldID, _localID, _position, _orientation);
|
||||
});
|
||||
}
|
||||
|
@ -188,9 +199,10 @@ public class BSCharacter : PhysicsActor
|
|||
set {
|
||||
_force = value;
|
||||
// m_log.DebugFormat("{0}: Force = {1}", LogHeader, _force);
|
||||
_scene.TaintedObject(delegate()
|
||||
Scene.TaintedObject(delegate()
|
||||
{
|
||||
BulletSimAPI.SetObjectForce(_scene.WorldID, _localID, _force);
|
||||
DetailLog("{0},setForce,taint,force={1}", LocalID, _force);
|
||||
BulletSimAPI.SetObjectForce(Scene.WorldID, LocalID, _force);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -216,6 +228,7 @@ public class BSCharacter : PhysicsActor
|
|||
// m_log.DebugFormat("{0}: set velocity = {1}", LogHeader, _velocity);
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
DetailLog("{0},setVelocity,taint,vel={1}", LocalID, _velocity);
|
||||
BulletSimAPI.SetObjectVelocity(_scene.WorldID, _localID, _velocity);
|
||||
});
|
||||
}
|
||||
|
@ -305,6 +318,7 @@ public class BSCharacter : PhysicsActor
|
|||
set { _buoyancy = value;
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
DetailLog("{0},setBuoyancy,taint,buoy={1}", LocalID, _buoyancy);
|
||||
BulletSimAPI.SetObjectBuoyancy(_scene.WorldID, LocalID, _buoyancy);
|
||||
});
|
||||
}
|
||||
|
@ -351,7 +365,8 @@ public class BSCharacter : PhysicsActor
|
|||
// m_log.DebugFormat("{0}: AddForce. adding={1}, newForce={2}", LogHeader, force, _force);
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
BulletSimAPI.SetObjectForce(_scene.WorldID, _localID, _force);
|
||||
DetailLog("{0},setAddForce,taint,addedForce={1}", LocalID, _force);
|
||||
BulletSimAPI.AddObjectForce2(Body.Ptr, _force);
|
||||
});
|
||||
}
|
||||
else
|
||||
|
@ -480,5 +495,10 @@ public class BSCharacter : PhysicsActor
|
|||
// End kludge
|
||||
}
|
||||
|
||||
// Invoke the detailed logger and output something if it's enabled.
|
||||
private void DetailLog(string msg, params Object[] args)
|
||||
{
|
||||
Scene.PhysicsLogging.Write(msg, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -187,7 +187,7 @@ public sealed class BSPrim : PhysicsActor
|
|||
{
|
||||
_mass = CalculateMass(); // changing size changes the mass
|
||||
BulletSimAPI.SetObjectScaleMass(_scene.WorldID, _localID, _scale, (IsPhysical ? _mass : 0f), IsPhysical);
|
||||
DetailLog("{0}: setSize: size={1}, mass={2}, physical={3}", LocalID, _size, _mass, IsPhysical);
|
||||
// DetailLog("{0}: setSize: size={1}, mass={2}, physical={3}", LocalID, _size, _mass, IsPhysical);
|
||||
RecreateGeomAndObject();
|
||||
});
|
||||
}
|
||||
|
@ -318,7 +318,7 @@ public sealed class BSPrim : PhysicsActor
|
|||
_force = value;
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
DetailLog("{0},SetForce,taint,force={1}", LocalID, _force);
|
||||
DetailLog("{0},setForce,taint,force={1}", LocalID, _force);
|
||||
// BulletSimAPI.SetObjectForce(_scene.WorldID, _localID, _force);
|
||||
BulletSimAPI.SetObjectForce2(Body.Ptr, _force);
|
||||
});
|
||||
|
@ -443,7 +443,7 @@ public sealed class BSPrim : PhysicsActor
|
|||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
// _position = BulletSimAPI.GetObjectPosition(_scene.WorldID, _localID);
|
||||
DetailLog("{0},SetOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation);
|
||||
DetailLog("{0},setOrientation,taint,pos={1},orient={2}", LocalID, _position, _orientation);
|
||||
BulletSimAPI.SetObjectTranslation(_scene.WorldID, _localID, _position, _orientation);
|
||||
});
|
||||
}
|
||||
|
@ -487,10 +487,8 @@ public sealed class BSPrim : PhysicsActor
|
|||
// Maybe a VerifyCorrectPhysicalShape() routine?
|
||||
// RecreateGeomAndObject();
|
||||
|
||||
float mass = _mass;
|
||||
// Bullet wants static objects have a mass of zero
|
||||
if (IsStatic)
|
||||
mass = 0f;
|
||||
// Bullet wants static objects to have a mass of zero
|
||||
float mass = IsStatic ? 0f : _mass;
|
||||
|
||||
DetailLog("{0},SetObjectDynamic,taint,static={1},solid={2},mass={3}", LocalID, IsStatic, IsSolid, mass);
|
||||
BulletSimAPI.SetObjectProperties(_scene.WorldID, LocalID, IsStatic, IsSolid, SubscribedEvents(), mass);
|
||||
|
@ -607,6 +605,7 @@ public sealed class BSPrim : PhysicsActor
|
|||
|
||||
private List<OMV.Vector3> m_accumulatedForces = new List<OMV.Vector3>();
|
||||
public override void AddForce(OMV.Vector3 force, bool pushforce) {
|
||||
// for an object, doesn't matter if force is a pushforce or not
|
||||
if (force.IsFinite())
|
||||
{
|
||||
// _force += force;
|
||||
|
@ -620,21 +619,17 @@ public sealed class BSPrim : PhysicsActor
|
|||
}
|
||||
_scene.TaintedObject(delegate()
|
||||
{
|
||||
OMV.Vector3 fSum = OMV.Vector3.Zero;
|
||||
lock (m_accumulatedForces)
|
||||
{
|
||||
if (m_accumulatedForces.Count > 0)
|
||||
{
|
||||
OMV.Vector3 fSum = OMV.Vector3.Zero;
|
||||
foreach (OMV.Vector3 v in m_accumulatedForces)
|
||||
{
|
||||
fSum += v;
|
||||
}
|
||||
m_accumulatedForces.Clear();
|
||||
|
||||
DetailLog("{0},SetObjectForce,taint,force={1}", LocalID, fSum);
|
||||
BulletSimAPI.SetObjectForce(_scene.WorldID, _localID, fSum);
|
||||
}
|
||||
}
|
||||
DetailLog("{0},AddObjectForce,taint,force={1}", LocalID, _force);
|
||||
BulletSimAPI.AddObjectForce2(Body.Ptr, fSum);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -447,6 +447,9 @@ public static extern bool SetAngularVelocity2(IntPtr obj, Vector3 angularVelocit
|
|||
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
|
||||
public static extern bool SetObjectForce2(IntPtr obj, Vector3 force);
|
||||
|
||||
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
|
||||
public static extern bool AddObjectForce2(IntPtr obj, Vector3 force);
|
||||
|
||||
[DllImport("BulletSim", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity]
|
||||
public static extern bool SetCcdMotionThreshold2(IntPtr obj, float val);
|
||||
|
||||
|
|
Loading…
Reference in New Issue