Example #1
0
        public override void DoAction(PEActionParam para = null)
        {
            if (null == trans || null == m_Param)
            {
                return;
            }

            m_IsBlockRepulsed = motionMgr.IsActionRunning(PEActionType.HoldShield) && Vector3.Angle(-entity.forward, m_MoveDir) < 30f;

            PEActionParamVVF paramVVF = PEActionParamVVF.param;

            motionMgr.SetMaskState(PEActionMask.Repulsed, true);
            trans.position  = (trans.position + paramVVF.vec1) / 2f;
            m_MoveDir       = paramVVF.vec2;
            m_MoveDir       = Vector3.ProjectOnPlane(m_MoveDir, trans.existent.up).normalized;
            m_ForcePower    = paramVVF.f * (m_IsBlockRepulsed ? BlockForceScale : 1f);
            m_AddForceTrans = m_Param.m_ApplyWentflyBone;

            m_MoveVelocity    = m_Param.m_ForceToVelocity.Evaluate(m_ForcePower);
            m_MoveTime        = m_Param.m_ForceToMoveTime.Evaluate(m_ForcePower);
            m_MoveStopTime    = m_Param.m_ApplyMoveStopTime.Evaluate(m_ForcePower);
            m_WentflyTime     = m_Param.m_WentflyTimeCurve.Evaluate(m_ForcePower);
            m_ElapseTime      = 0f;
            m_ApplyStopEffect = false;

            if (null != anim)
            {
                anim.SetFloat("SheildBlockF", m_IsBlockRepulsed ? 1f: 0f);
            }

            if (null != m_Move)
            {
                m_Move.ApplyForce(m_MoveVelocity * m_MoveDir, ForceMode.VelocityChange);
            }
        }