Ejemplo n.º 1
0
        public override void DoAction(PEActionParam para = null)
        {
            motionMgr.SetMaskState(PEActionMask.JetPack, true);
            m_MoveDir = Vector3.zero;
            if (null != jetPack)
            {
                jetPack.m_EffectObj.SetActive(true);
                if (0 != jetPack.m_StartSoundID && null != jetPack.m_EffectObj)
                {
                    m_Audio = AudioManager.instance.Create(jetPack.m_EffectObj.transform.position,
                                                           jetPack.m_StartSoundID,
                                                           jetPack.m_EffectObj.transform);
                }
            }

            if (null != jetPackLogic && null != m_PhyCtrl)
            {
                m_PhyCtrl.ResetSpeed(jetPackLogic.m_BoostHorizonalSpeed);
                m_PhyCtrl.desiredMovementDirection = m_PhyCtrl.currentDesiredMovementDirection;
            }

            motionMgr.StartCoroutine(ChangeAudio());

            if (null != anim)
            {
                anim.ResetTrigger("EndJump");
            }
        }
Ejemplo n.º 2
0
        public override bool Update()
        {
            if (null == glider || null == trans || null == m_PhyCtrl || (PeGameMgr.gamePause && !PeGameMgr.IsMulti))
            {
                return(false);
            }

            if (m_PauseByPhy)
            {
                if (!m_PhyCtrl._rigidbody.isKinematic)
                {
                    m_PhyCtrl.velocity = m_PauseVel;
                    m_PauseByPhy       = false;
                }
            }
            else if (m_PhyCtrl._rigidbody.isKinematic)
            {
                m_PauseVel   = m_PhyCtrl.inertiaVelocity;
                m_PauseByPhy = true;
            }

            if (move.state != MovementState.Air)
            {
                motionMgr.EndImmediately(ActionType);
            }
            else
            {
                float yaw = trans.existent.eulerAngles.y;
                m_CurrentOpDir.x = Mathf.Lerp(m_CurrentOpDir.x, 30f * m_TargetOpDir.x, glider.m_RotateAcc * Time.deltaTime);
                m_CurrentOpDir.y = Mathf.Lerp(m_CurrentOpDir.y, 30f * m_TargetOpDir.y, glider.m_RotateAcc * Time.deltaTime / 2f);
                yaw += m_CurrentOpDir.x / 2f * Time.deltaTime;
                Vector3 proDir = Vector3.Project(new Vector3(m_PhyCtrl.velocity.x, 0, m_PhyCtrl.velocity.z)
                                                 , new Vector3(trans.existent.forward.x, 0, trans.existent.forward.z));
                proDir.y           = m_PhyCtrl.velocity.y;
                m_PhyCtrl.velocity = Vector3.Lerp(m_PhyCtrl.velocity, proDir, Time.deltaTime);
                trans.rotation     = Quaternion.AngleAxis(yaw, Vector3.up)
                                     * Quaternion.AngleAxis(m_CurrentOpDir.y, Vector3.right)
                                     * Quaternion.AngleAxis(-m_CurrentOpDir.x, Vector3.forward);
                Vector3 upSpeed      = Vector3.Project(m_PhyCtrl.velocity, trans.existent.up);
                Vector3 forwardSpeed = Vector3.Project(m_PhyCtrl.velocity, trans.existent.forward);
                Vector3 acc          = 10f * Vector3.down;
                acc += -forwardSpeed.normalized * glider.m_AreaDragF * m_ForwardAreaF * forwardSpeed.sqrMagnitude;
                acc += -upSpeed.normalized * glider.m_AreaDragF * m_UpAreaF * upSpeed.sqrMagnitude;
                acc += glider.m_BoostPower * trans.existent.forward;
                m_PhyCtrl._rigidbody.AddForce(acc, ForceMode.Acceleration);
                m_PhyCtrl.ResetSpeed(m_PhyCtrl.velocity.magnitude);
            }

            return(false);
        }
Ejemplo n.º 3
0
 public override void DoAction(PEActionParam para = null)
 {
     m_MoveDir = Vector3.zero;
     motionMgr.SetMaskState(PEActionMask.Parachute, true);
     if (null != parachute)
     {
         if (null != m_PhyCtrl)
         {
             m_PhyCtrl.ResetSpeed(parachute.m_HorizonalSpeed);
             m_PhyCtrl.desiredMovementDirection = m_PhyCtrl.currentDesiredMovementDirection;
         }
         parachute.SetOpenState(true);
     }
     if (null != anim)
     {
         anim.SetTrigger("Fall");
     }
 }