BulletSim: change method signatures for internal AddForce methods to remove

confusion about push forces. The latter is an external, physics engine interface
feature (the force parameter has a different unit if pushing vs adding force)
and that distinction is not used internally.
LSLKeyTest
Robert Adams 2016-01-18 07:02:48 -08:00
parent fb57d31538
commit 35d4298be6
6 changed files with 21 additions and 17 deletions

View File

@ -211,7 +211,7 @@ public class BSActorMoveToTarget : BSActor
// Add enough force to overcome the mass of the object // Add enough force to overcome the mass of the object
addedForce *= m_controllingPrim.Mass; addedForce *= m_controllingPrim.Mass;
m_controllingPrim.AddForce(addedForce, false /* pushForce */, true /* inTaintTime */); m_controllingPrim.AddForce(true /* inTaintTime */, addedForce);
} }
m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover3,move,fromPos={1},addedForce={2}", m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover3,move,fromPos={1},addedForce={2}",
m_controllingPrim.LocalID, origPosition, addedForce); m_controllingPrim.LocalID, origPosition, addedForce);

View File

@ -127,7 +127,7 @@ public class BSActorSetTorque : BSActor
m_physicsScene.DetailLog("{0},BSActorSetTorque,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque); m_physicsScene.DetailLog("{0},BSActorSetTorque,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque);
if (m_controllingPrim.PhysBody.HasPhysicalBody) if (m_controllingPrim.PhysBody.HasPhysicalBody)
{ {
m_controllingPrim.AddAngularForce(m_controllingPrim.RawTorque, false, true); m_controllingPrim.AddAngularForce(true /* inTaintTime */, m_controllingPrim.RawTorque);
m_controllingPrim.ActivateIfPhysical(false); m_controllingPrim.ActivateIfPhysical(false);
} }

View File

@ -457,7 +457,7 @@ public sealed class BSCharacter : BSPhysObject
get { return RawVelocity; } get { return RawVelocity; }
set { set {
RawVelocity = value; RawVelocity = value;
OMV.Vector3 vel = RawVelocity; OMV.Vector3 vel = RawVelocity;
DetailLog("{0}: set Velocity = {1}", LocalID, value); DetailLog("{0}: set Velocity = {1}", LocalID, value);
@ -662,10 +662,10 @@ public sealed class BSCharacter : BSPhysObject
addForce *= Mass * BSParam.AvatarAddForcePushFactor; addForce *= Mass * BSParam.AvatarAddForcePushFactor;
DetailLog("{0},BSCharacter.addForce,call,force={1},addForce={2},push={3},mass={4}", LocalID, force, addForce, pushforce, Mass); DetailLog("{0},BSCharacter.addForce,call,force={1},addForce={2},push={3},mass={4}", LocalID, force, addForce, pushforce, Mass);
AddForce(addForce, pushforce, false); AddForce(false, addForce);
} }
public override void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { public override void AddForce(bool inTaintTime, OMV.Vector3 force) {
if (force.IsFinite()) if (force.IsFinite())
{ {
OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude);
@ -692,7 +692,7 @@ public sealed class BSCharacter : BSPhysObject
} }
} }
public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force) {
} }
public override void SetMomentum(OMV.Vector3 momentum) { public override void SetMomentum(OMV.Vector3 momentum) {
} }

View File

@ -768,7 +768,7 @@ namespace OpenSim.Region.PhysicsModule.BulletS
} }
if ((m_knownChanged & m_knownChangedForce) != 0) if ((m_knownChanged & m_knownChangedForce) != 0)
ControllingPrim.AddForce((Vector3)m_knownForce, false /*pushForce*/, true /*inTaintTime*/); ControllingPrim.AddForce(false /* inTaintTime */, (Vector3)m_knownForce);
if ((m_knownChanged & m_knownChangedForceImpulse) != 0) if ((m_knownChanged & m_knownChangedForceImpulse) != 0)
ControllingPrim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/); ControllingPrim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/);
@ -784,7 +784,7 @@ namespace OpenSim.Region.PhysicsModule.BulletS
if ((m_knownChanged & m_knownChangedRotationalForce) != 0) if ((m_knownChanged & m_knownChangedRotationalForce) != 0)
{ {
ControllingPrim.AddAngularForce((Vector3)m_knownRotationalForce, false /*pushForce*/, true /*inTaintTime*/); ControllingPrim.AddAngularForce(true /* inTaintTime */, (Vector3)m_knownRotationalForce);
} }
// If we set one of the values (ie, the physics engine didn't do it) we must force // If we set one of the values (ie, the physics engine didn't do it) we must force

View File

@ -245,10 +245,10 @@ public abstract class BSPhysObject : PhysicsActor
public override void AddAngularForce(OMV.Vector3 force, bool pushforce) public override void AddAngularForce(OMV.Vector3 force, bool pushforce)
{ {
AddAngularForce(force, pushforce, false); AddAngularForce(false, force);
} }
public abstract void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime); public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force);
public abstract void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime); public abstract void AddForce(bool inTaintTime, OMV.Vector3 force);
public abstract OMV.Vector3 ForceRotationalVelocity { get; set; } public abstract OMV.Vector3 ForceRotationalVelocity { get; set; }

View File

@ -394,7 +394,7 @@ public class BSPrim : BSPhysObject
// Apply upforce and overcome gravity. // Apply upforce and overcome gravity.
OMV.Vector3 correctionForce = upForce - PhysScene.DefaultGravity; OMV.Vector3 correctionForce = upForce - PhysScene.DefaultGravity;
DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, RawPosition, upForce, correctionForce); DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, RawPosition, upForce, correctionForce);
AddForce(correctionForce, false, inTaintTime); AddForce(inTaintTime, correctionForce);
ret = true; ret = true;
} }
} }
@ -1249,14 +1249,18 @@ public class BSPrim : BSPhysObject
// Per documentation, max force is limited. // Per documentation, max force is limited.
OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude);
// Since this force is being applied in only one step, make this a force per second. // Push forces seem to be scaled differently (follow pattern in ubODE)
addForce /= PhysScene.LastTimeStep; if (!pushforce) {
AddForce(addForce, pushforce, false /* inTaintTime */); // Since this force is being applied in only one step, make this a force per second.
addForce /= PhysScene.LastTimeStep;
}
AddForce(false /* inTaintTime */, addForce);
} }
// Applying a force just adds this to the total force on the object. // Applying a force just adds this to the total force on the object.
// This added force will only last the next simulation tick. // This added force will only last the next simulation tick.
public override void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { public override void AddForce(bool inTaintTime, OMV.Vector3 force) {
// for an object, doesn't matter if force is a pushforce or not // for an object, doesn't matter if force is a pushforce or not
if (IsPhysicallyActive) if (IsPhysicallyActive)
{ {
@ -1315,7 +1319,7 @@ public class BSPrim : BSPhysObject
} }
// BSPhysObject.AddAngularForce() // BSPhysObject.AddAngularForce()
public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force)
{ {
if (force.IsFinite()) if (force.IsFinite())
{ {