BulletSim: fixing problems with llMoveToTarget. Not all fixed yet.

user_profiles
Robert Adams 2013-04-09 17:53:18 -07:00
parent b53713cdda
commit 5f2cbfc0fd
3 changed files with 18 additions and 6 deletions

View File

@ -50,7 +50,7 @@ public class BSActorHover : BSActor
// BSActor.isActive // BSActor.isActive
public override bool isActive public override bool isActive
{ {
get { return Enabled && m_controllingPrim.IsPhysicallyActive; } get { return Enabled; }
} }
// Release any connections and resources used by the actor. // Release any connections and resources used by the actor.

View File

@ -50,7 +50,7 @@ public class BSActorMoveToTarget : BSActor
// BSActor.isActive // BSActor.isActive
public override bool isActive public override bool isActive
{ {
get { return Enabled && m_controllingPrim.IsPhysicallyActive; } get { return Enabled; }
} }
// Release any connections and resources used by the actor. // Release any connections and resources used by the actor.
@ -65,7 +65,9 @@ public class BSActorMoveToTarget : BSActor
// BSActor.Refresh() // BSActor.Refresh()
public override void Refresh() public override void Refresh()
{ {
m_physicsScene.DetailLog("{0},BSActorMoveToTarget,refresh", m_controllingPrim.LocalID); m_physicsScene.DetailLog("{0},BSActorMoveToTarget,refresh,enabled={1},active={2},target={3},tau={4}",
m_controllingPrim.LocalID, Enabled, m_controllingPrim.MoveToTargetActive,
m_controllingPrim.MoveToTargetTarget, m_controllingPrim.MoveToTargetTau );
// If not active any more... // If not active any more...
if (!m_controllingPrim.MoveToTargetActive) if (!m_controllingPrim.MoveToTargetActive)
@ -100,7 +102,7 @@ public class BSActorMoveToTarget : BSActor
// We're taking over after this. // We're taking over after this.
m_controllingPrim.ZeroMotion(true); m_controllingPrim.ZeroMotion(true);
m_targetMotor = new BSVMotor("BSPrim.PIDTarget", m_targetMotor = new BSVMotor("BSActorMoveToTargget.Activate",
m_controllingPrim.MoveToTargetTau, // timeScale m_controllingPrim.MoveToTargetTau, // timeScale
BSMotor.Infinite, // decay time scale BSMotor.Infinite, // decay time scale
BSMotor.InfiniteVector, // friction timescale BSMotor.InfiniteVector, // friction timescale
@ -138,15 +140,19 @@ public class BSActorMoveToTarget : BSActor
// If we are very close to our target, turn off the movement motor. // If we are very close to our target, turn off the movement motor.
if (m_targetMotor.ErrorIsZero()) if (m_targetMotor.ErrorIsZero())
{ {
m_physicsScene.DetailLog("{0},BSPrim.PIDTarget,zeroMovement,movePos={1},pos={2},mass={3}", m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover,zeroMovement,movePos={1},pos={2},mass={3}",
m_controllingPrim.LocalID, movePosition, m_controllingPrim.RawPosition, m_controllingPrim.Mass); m_controllingPrim.LocalID, movePosition, m_controllingPrim.RawPosition, m_controllingPrim.Mass);
m_controllingPrim.ForcePosition = m_targetMotor.TargetValue; m_controllingPrim.ForcePosition = m_targetMotor.TargetValue;
// Setting the position does not cause the physics engine to generate a property update. Force it.
m_physicsScene.PE.PushUpdate(m_controllingPrim.PhysBody);
} }
else else
{ {
m_controllingPrim.ForcePosition = movePosition; m_controllingPrim.ForcePosition = movePosition;
// Setting the position does not cause the physics engine to generate a property update. Force it.
m_physicsScene.PE.PushUpdate(m_controllingPrim.PhysBody);
} }
m_physicsScene.DetailLog("{0},BSPrim.PIDTarget,move,fromPos={1},movePos={2}", m_controllingPrim.LocalID, origPosition, movePosition); m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover,move,fromPos={1},movePos={2}", m_controllingPrim.LocalID, origPosition, movePosition);
} }
} }
} }

View File

@ -295,6 +295,7 @@ public abstract class BSPhysObject : PhysicsActor
if (PhysicalActors.TryGetActor(actorName, out theActor)) if (PhysicalActors.TryGetActor(actorName, out theActor))
{ {
// The actor already exists so just turn it on or off // The actor already exists so just turn it on or off
DetailLog("{0},BSPhysObject.EnableActor,enablingExistingActor,name={1},enable={2}", LocalID, actorName, enableActor);
theActor.Enabled = enableActor; theActor.Enabled = enableActor;
} }
else else
@ -302,10 +303,15 @@ public abstract class BSPhysObject : PhysicsActor
// The actor does not exist. If it should, create it. // The actor does not exist. If it should, create it.
if (enableActor) if (enableActor)
{ {
DetailLog("{0},BSPhysObject.EnableActor,creatingActor,name={1}", LocalID, actorName);
theActor = creator(); theActor = creator();
PhysicalActors.Add(actorName, theActor); PhysicalActors.Add(actorName, theActor);
theActor.Enabled = true; theActor.Enabled = true;
} }
else
{
DetailLog("{0},BSPhysObject.EnableActor,notCreatingActorSinceNotEnabled,name={1}", LocalID, actorName);
}
} }
} }
} }