Exemplo n.º 1
0
 // Usually called when target velocity changes to set the current velocity and the target
 //     into the movement motor.
 public void SetVelocityAndTarget(OMV.Vector3 vel, OMV.Vector3 targ, bool inTaintTime)
 {
     m_physicsScene.TaintedObject(inTaintTime, m_controllingPrim.LocalID, "BSActorAvatarMove.setVelocityAndTarget", delegate()
     {
         if (m_velocityMotor != null)
         {
             m_velocityMotor.Reset();
             m_velocityMotor.SetTarget(targ);
             m_velocityMotor.SetCurrent(vel);
             m_velocityMotor.Enabled = true;
             m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,SetVelocityAndTarget,vel={1}, targ={2}",
                                      m_controllingPrim.LocalID, vel, targ);
             m_waitingForLowVelocityForStationary = 0;
         }
     });
 }
        // Usually called when target velocity changes to set the current velocity and the target
        //     into the movement motor.
        public void SetVelocityAndTarget(OMV.Vector3 vel, OMV.Vector3 targ, bool inTaintTime)
        {
            m_physicsScene.TaintedObject(inTaintTime, m_controllingPrim.LocalID, "BSActorAvatarMove.setVelocityAndTarget", delegate()
            {
                if (m_velocityMotor != null)
                {
//                    if (targ == OMV.Vector3.Zero)
//                        Util.PrintCallStack();
//
//                    Console.WriteLine("SetVelocityAndTarget, {0} {1}", vel, targ);
                    m_velocityMotor.Reset();
                    m_velocityMotor.SetTarget(targ);
                    m_velocityMotor.SetCurrent(vel);
                    m_velocityMotor.Enabled = true;
                }
            });
        }
    // If a hover motor has not been created, create one and start the hovering.
    private void ActivateMoveToTarget()
    {
        if (m_targetMotor == null)
        {
            // We're taking over after this.
            m_controllingPrim.ZeroMotion(true);

            /* Someday use the PID controller
            m_targetMotor = new BSPIDVMotor("BSActorMoveToTarget-" + m_controllingPrim.LocalID.ToString());
            m_targetMotor.TimeScale = m_controllingPrim.MoveToTargetTau;
            m_targetMotor.Efficiency = 1f;
             */
            m_targetMotor = new BSVMotor("BSActorMoveToTarget-" + m_controllingPrim.LocalID.ToString(),
                                        m_controllingPrim.MoveToTargetTau,  // timeScale
                                        BSMotor.Infinite,                   // decay time scale
                                        1f                                  // efficiency
            );
            m_targetMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG so motor will output detail log messages.
            m_targetMotor.SetTarget(m_controllingPrim.MoveToTargetTarget);
            m_targetMotor.SetCurrent(m_controllingPrim.RawPosition);

            // m_physicsScene.BeforeStep += Mover;
            m_physicsScene.BeforeStep += Mover2;
        }
        else
        {
            // If already allocated, make sure the target and other paramters are current
            m_targetMotor.SetTarget(m_controllingPrim.MoveToTargetTarget);
            m_targetMotor.SetCurrent(m_controllingPrim.RawPosition);
        }
    }