상속: BSMotor
 public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName)
     : base(physicsScene, pObj, actorName)
 {
     m_velocityMotor = null;
     m_walkingUpStairs = 0;
     m_physicsScene.DetailLog("{0},BSActorAvatarMove,constructor", m_controllingPrim.LocalID);
 }
        // If a hover motor has not been created, create one and start the hovering.
        void ActivateMoveToTarget()
        {
            if (m_targetMotor == null)
            {
                // We're taking over after this.
                m_controllingPrim.ZeroMotion(true);

                /* TODO !!!!!
                 * 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,
                                             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 parameters are current
                m_targetMotor.SetTarget(m_controllingPrim.MoveToTargetTarget);
                m_targetMotor.SetCurrent(m_controllingPrim.RawPosition);
            }
        }
예제 #3
0
 public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName)
     : base(physicsScene, pObj, actorName)
 {
     m_velocityMotor   = null;
     m_walkingUpStairs = 0;
     m_physicsScene.DetailLog("{0},BSActorAvatarMove,constructor", m_controllingPrim.LocalID);
 }
 void DeactivateMoveToTarget()
 {
     if (m_targetMotor != null)
     {
         //m_physicsScene.BeforeStep -= Mover;
         m_physicsScene.BeforeStep -= Mover2;
         m_targetMotor              = null;
     }
 }
예제 #5
0
 void DeactivateAvatarMove()
 {
     if (m_velocityMotor != null)
     {
         m_controllingPrim.OnPreUpdateProperty -= Process_OnPreUpdateProperty;
         m_physicsScene.BeforeStep             -= Mover;
         m_velocityMotor = null;
     }
 }
예제 #6
0
        // If a hover motor has not been created, create one and start the hovering.
        void ActivateAvatarMove()
        {
            if (m_velocityMotor == null)
            {
                // Infinite decay and timescale values so motor only changes current to target values.
                m_velocityMotor = new BSVMotor("BSCharacter.Velocity",
                                               0.2f,             // time scale
                                               BSMotor.Infinite, // decay time scale
                                               1f                // efficiency
                                               );
                m_velocityMotor.ErrorZeroThreshold = BSParam.AvatarStopZeroThreshold;

                // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
                SetVelocityAndTarget(m_controllingPrim.RawVelocity, m_controllingPrim.TargetVelocity, true, 0);

                m_physicsScene.BeforeStep             += Mover;
                m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty;
                m_walkingUpStairs = 0;
            }
        }
예제 #7
0
        public void ProcessTypeChange(Vehicle pType)
        {
            VDetailLog("{0},ProcessTypeChange,type={1}", ControllingPrim.LocalID, pType);
            // Set Defaults For Type
            Type = pType;
            switch (pType)
            {
                case Vehicle.TYPE_NONE:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 0;
                    m_linearMotorDecayTimescale = 0;
                    m_linearFrictionTimescale = new Vector3(0, 0, 0);

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorDecayTimescale = 0;
                    m_angularMotorTimescale = 0;
                    m_angularFrictionTimescale = new Vector3(0, 0, 0);

                    m_VhoverHeight = 0;
                    m_VhoverEfficiency = 0;
                    m_VhoverTimescale = 0;
                    m_VehicleBuoyancy = 0;

                    m_linearDeflectionEfficiency = 1;
                    m_linearDeflectionTimescale = 1;

                    m_angularDeflectionEfficiency = 0;
                    m_angularDeflectionTimescale = 1000;

                    m_verticalAttractionEfficiency = 0;
                    m_verticalAttractionTimescale = 0;

                    m_bankingEfficiency = 0;
                    m_bankingTimescale = 1000;
                    m_bankingMix = 1;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags = (VehicleFlag)0;

                    break;

                case Vehicle.TYPE_SLED:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 1000;
                    m_linearMotorDecayTimescale = 120;
                    m_linearFrictionTimescale = new Vector3(30, 1, 1000);

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorTimescale = 1000;
                    m_angularMotorDecayTimescale = 120;
                    m_angularFrictionTimescale = new Vector3(1000, 1000, 1000);

                    m_VhoverHeight = 0;
                    m_VhoverEfficiency = 10; // TODO: this looks wrong!!
                    m_VhoverTimescale = 10;
                    m_VehicleBuoyancy = 0;

                    m_linearDeflectionEfficiency = 1;
                    m_linearDeflectionTimescale = 1;

                    m_angularDeflectionEfficiency = 1;
                    m_angularDeflectionTimescale = 1000;

                    m_verticalAttractionEfficiency = 0;
                    m_verticalAttractionTimescale = 0;

                    m_bankingEfficiency = 0;
                    m_bankingTimescale = 10;
                    m_bankingMix = 1;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY
                                 | VehicleFlag.HOVER_TERRAIN_ONLY
                                 | VehicleFlag.HOVER_GLOBAL_HEIGHT
                                 | VehicleFlag.HOVER_UP_ONLY);
                    m_flags |= (VehicleFlag.NO_DEFLECTION_UP
                                | VehicleFlag.LIMIT_ROLL_ONLY
                                | VehicleFlag.LIMIT_MOTOR_UP);

                    break;
                case Vehicle.TYPE_CAR:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 1;
                    m_linearMotorDecayTimescale = 60;
                    m_linearFrictionTimescale = new Vector3(100, 2, 1000);

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorTimescale = 1;
                    m_angularMotorDecayTimescale = 0.8f;
                    m_angularFrictionTimescale = new Vector3(1000, 1000, 1000);

                    m_VhoverHeight = 0;
                    m_VhoverEfficiency = 0;
                    m_VhoverTimescale = 1000;
                    m_VehicleBuoyancy = 0;

                    m_linearDeflectionEfficiency = 1;
                    m_linearDeflectionTimescale = 2;

                    m_angularDeflectionEfficiency = 0;
                    m_angularDeflectionTimescale = 10;

                    m_verticalAttractionEfficiency = 1f;
                    m_verticalAttractionTimescale = 10f;

                    m_bankingEfficiency = -0.2f;
                    m_bankingMix = 1;
                    m_bankingTimescale = 1;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY
                                 | VehicleFlag.HOVER_TERRAIN_ONLY
                                 | VehicleFlag.HOVER_GLOBAL_HEIGHT);
                    m_flags |= (VehicleFlag.NO_DEFLECTION_UP
                                | VehicleFlag.LIMIT_ROLL_ONLY
                                | VehicleFlag.LIMIT_MOTOR_UP
                                | VehicleFlag.HOVER_UP_ONLY);
                    break;
                case Vehicle.TYPE_BOAT:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 5;
                    m_linearMotorDecayTimescale = 60;
                    m_linearFrictionTimescale = new Vector3(10, 3, 2);

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorTimescale = 4;
                    m_angularMotorDecayTimescale = 4;
                    m_angularFrictionTimescale = new Vector3(10, 10, 10);

                    m_VhoverHeight = 0;
                    m_VhoverEfficiency = 0.5f;
                    m_VhoverTimescale = 2;
                    m_VehicleBuoyancy = 1;

                    m_linearDeflectionEfficiency = 0.5f;
                    m_linearDeflectionTimescale = 3;

                    m_angularDeflectionEfficiency = 0.5f;
                    m_angularDeflectionTimescale = 5;

                    m_verticalAttractionEfficiency = 0.5f;
                    m_verticalAttractionTimescale = 5f;

                    m_bankingEfficiency = -0.3f;
                    m_bankingMix = 0.8f;
                    m_bankingTimescale = 1;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags &= ~(VehicleFlag.HOVER_TERRAIN_ONLY
                                 | VehicleFlag.HOVER_GLOBAL_HEIGHT
                                 | VehicleFlag.LIMIT_ROLL_ONLY
                                 | VehicleFlag.HOVER_UP_ONLY);
                    m_flags |= (VehicleFlag.NO_DEFLECTION_UP
                                | VehicleFlag.LIMIT_MOTOR_UP
                                | VehicleFlag.HOVER_WATER_ONLY);
                    break;
                case Vehicle.TYPE_AIRPLANE:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 2;
                    m_linearMotorDecayTimescale = 60;
                    m_linearFrictionTimescale = new Vector3(200, 10, 5);

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorTimescale = 4;
                    m_angularMotorDecayTimescale = 4;
                    m_angularFrictionTimescale = new Vector3(20, 20, 20);

                    m_VhoverHeight = 0;
                    m_VhoverEfficiency = 0.5f;
                    m_VhoverTimescale = 1000;
                    m_VehicleBuoyancy = 0;

                    m_linearDeflectionEfficiency = 0.5f;
                    m_linearDeflectionTimescale = 3;

                    m_angularDeflectionEfficiency = 1;
                    m_angularDeflectionTimescale = 2;

                    m_verticalAttractionEfficiency = 0.9f;
                    m_verticalAttractionTimescale = 2f;

                    m_bankingEfficiency = 1;
                    m_bankingMix = 0.7f;
                    m_bankingTimescale = 2;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY
                                 | VehicleFlag.HOVER_TERRAIN_ONLY
                                 | VehicleFlag.HOVER_GLOBAL_HEIGHT
                                 | VehicleFlag.HOVER_UP_ONLY
                                 | VehicleFlag.NO_DEFLECTION_UP
                                 | VehicleFlag.LIMIT_MOTOR_UP);
                    m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY);
                    break;
                case Vehicle.TYPE_BALLOON:
                    m_linearMotorDirection = Vector3.Zero;
                    m_linearMotorTimescale = 5;
                    m_linearFrictionTimescale = new Vector3(5, 5, 5);
                    m_linearMotorDecayTimescale = 60;

                    m_angularMotorDirection = Vector3.Zero;
                    m_angularMotorTimescale = 6;
                    m_angularFrictionTimescale = new Vector3(10, 10, 10);
                    m_angularMotorDecayTimescale = 10;

                    m_VhoverHeight = 5;
                    m_VhoverEfficiency = 0.8f;
                    m_VhoverTimescale = 10;
                    m_VehicleBuoyancy = 1;

                    m_linearDeflectionEfficiency = 0;
                    m_linearDeflectionTimescale = 5;

                    m_angularDeflectionEfficiency = 0;
                    m_angularDeflectionTimescale = 5;

                    m_verticalAttractionEfficiency = 1f;
                    m_verticalAttractionTimescale = 100f;

                    m_bankingEfficiency = 0;
                    m_bankingMix = 0.7f;
                    m_bankingTimescale = 5;

                    m_referenceFrame = Quaternion.Identity;

                    m_referenceFrame = Quaternion.Identity;
                    m_flags &= ~(VehicleFlag.HOVER_WATER_ONLY
                                 | VehicleFlag.HOVER_TERRAIN_ONLY
                                 | VehicleFlag.HOVER_UP_ONLY
                                 | VehicleFlag.NO_DEFLECTION_UP
                                 | VehicleFlag.LIMIT_MOTOR_UP);
                    m_flags |= (VehicleFlag.LIMIT_ROLL_ONLY
                                | VehicleFlag.HOVER_GLOBAL_HEIGHT);
                    break;
            }

            // Update any physical parameters based on this type.
            Refresh();

            m_linearMotor = new BSVMotor("LinearMotor", m_linearMotorTimescale,
                m_linearMotorDecayTimescale, 1f);
            m_linearMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)

            m_angularMotor = new BSVMotor("AngularMotor", m_angularMotorTimescale,
                m_angularMotorDecayTimescale, 1f);

            // not needed here !
            //m_angularMotor.PhysicsScene = m_physicsScene; // DEBUG DEBUG DEBUG (enables detail logging)

            /*  Not implemented
            m_verticalAttractionMotor = new BSVMotor("VerticalAttraction", m_verticalAttractionTimescale,
                                BSMotor.Infinite, BSMotor.InfiniteVector,
                                m_verticalAttractionEfficiency);
            // Z goes away and we keep X and Y
            m_verticalAttractionMotor.FrictionTimescale = new Vector3(BSMotor.Infinite, BSMotor.Infinite, 0.1f);
            m_verticalAttractionMotor.PhysicsScene = PhysicsScene;  // DEBUG DEBUG DEBUG (enables detail logging)
             */

            if (Type == Vehicle.TYPE_NONE)
            {
                UnregisterForSceneEvents();
            }
            else
            {
                RegisterForSceneEvents();
            }
            // Update any physical parameters based on this type.
            Refresh();
        }
 void DeactivateAvatarMove()
 {
     if (m_velocityMotor != null)
     {
         m_controllingPrim.OnPreUpdateProperty -= Process_OnPreUpdateProperty;
         m_physicsScene.BeforeStep -= Mover;
         m_velocityMotor = null;
     }
 }
        // If a hover motor has not been created, create one and start the hovering.
        void ActivateAvatarMove()
        {
            if (m_velocityMotor == null)
            {
                // Infinite decay and timescale values so motor only changes current to target values.
                m_velocityMotor = new BSVMotor("BSCharacter.Velocity",
                    0.2f, // time scale
                    BSMotor.Infinite, // decay time scale
                    1f // efficiency
                    );
                m_velocityMotor.ErrorZeroThreshold = BSParam.AvatarStopZeroThreshold;

                // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages.
                SetVelocityAndTarget(m_controllingPrim.RawVelocity, m_controllingPrim.TargetVelocity, true, 0);

                m_physicsScene.BeforeStep += Mover;
                m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty;
                m_walkingUpStairs = 0;
            }
        }
예제 #10
0
 public BSActorMoveToTarget(BSScene physicsScene, BSPhysObject pObj, string actorName)
     : base(physicsScene, pObj, actorName)
 {
     m_targetMotor = null;
     m_physicsScene.DetailLog("{0},BSActorMoveToTarget,constructor", m_controllingPrim.LocalID);
 }
예제 #11
0
 void DeactivateMoveToTarget()
 {
     if (m_targetMotor != null)
     {
         //m_physicsScene.BeforeStep -= Mover;
         m_physicsScene.BeforeStep -= Mover2;
         m_targetMotor = null;
     }
 }
예제 #12
0
        // If a hover motor has not been created, create one and start the hovering.
        void ActivateMoveToTarget()
        {
            if (m_targetMotor == null)
            {
                // We're taking over after this.
                m_controllingPrim.ZeroMotion(true);

                /* TODO !!!!!
                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,
                    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 parameters are current
                m_targetMotor.SetTarget(m_controllingPrim.MoveToTargetTarget);
                m_targetMotor.SetCurrent(m_controllingPrim.RawPosition);
            }
        }
 public BSActorMoveToTarget(BSScene physicsScene, BSPhysObject pObj, string actorName)
     : base(physicsScene, pObj, actorName)
 {
     m_targetMotor = null;
     m_physicsScene.DetailLog("{0},BSActorMoveToTarget,constructor", m_controllingPrim.LocalID);
 }