diff options
Diffstat (limited to 'Assets/Scripts/Avatar/States/JumpState.cs')
| -rw-r--r-- | Assets/Scripts/Avatar/States/JumpState.cs | 263 | 
1 files changed, 0 insertions, 263 deletions
| diff --git a/Assets/Scripts/Avatar/States/JumpState.cs b/Assets/Scripts/Avatar/States/JumpState.cs deleted file mode 100644 index 1e172358..00000000 --- a/Assets/Scripts/Avatar/States/JumpState.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public struct JumpStateConfig -{ -    public PhysicsBody body; -    public PhysicsPrimitive collider; -    public Animator animator; - -    public float neutralJumpSpeedY; // 垂直跳跃的基础速度 -    public float fowardJumpSpeedX; // 向前跳跃的水平速度 -    public float backwardJumpSpeedX; // 向后跳跃的水平速度(一般来说是负值)  - -    public int animJump; -    public int animNU; -    public int animFU; -    public int animBU; -    public int animND; -    public int animFD; -    public int animBD; -    public int animJumpEnd; - -	public bool skipStart; //没有准备动作 -} - -public class JumpState : StateBase -{ -    public enum Direction -    { -		None, -        Neutral,  -        Forward,  -        Backward -    } - -    public enum Stage -    { -		None, -        Ready,  -        Up,  -        Down,  -        End, -    } - -    Direction m_Dir; - -    PhysicsBody m_Body; -    PhysicsPrimitive m_Collider; - -	Animator m_Animator; - -    public float m_NeutralJumpSpeedY; // 垂直跳跃的基础速度 -    public float m_FowardJumpSpeedX; // 向前跳跃的水平速度 -    public float m_BackwardJumpSpeedX; // 向后跳跃的水平速度(一般来说是负值) - -    // jump motions -    int m_AnimJumpStart; // on ground  -    int m_AnimJumpNeutralUpwards; -    int m_AnimJumpNeutralDownwards; -    int m_AnimJumpFwdUpwards; -    int m_AnimJumpFwdDownwards; -    int m_AnimJumpBackUpwards; -    int m_AnimJumpBackDownwards; -    int m_AnimJumpEnd; // on ground again - -    int m_CurAnim; -	Stage m_CurStage; -	int m_CurUpMotion; -	int m_CurDownMotion; -	Vector3 m_CurInitVelocity; - -	public Stage CurStage -	{ -		get -		{ -			return m_CurStage; -		} -	} - -	public Direction CurDirection -	{ -		get -		{ -			return m_Dir; -		} -	} - -	private List<Trigger> m_Triggers = new List<Trigger>(); - -	bool m_SkipStart; - -    public JumpState(JumpStateConfig config) -    { -        m_Body = config.body; -        m_Collider = config.collider; -        m_Animator = config.animator; -        m_NeutralJumpSpeedY = config.neutralJumpSpeedY; -        m_FowardJumpSpeedX = config.fowardJumpSpeedX; -        m_BackwardJumpSpeedX = config.backwardJumpSpeedX; -        m_AnimJumpStart = config.animJump; -        m_AnimJumpNeutralUpwards = config.animNU; -        m_AnimJumpNeutralDownwards = config.animND; -        m_AnimJumpFwdUpwards = config.animFU; -        m_AnimJumpFwdDownwards = config.animFD; -        m_AnimJumpBackUpwards = config.animBU; -        m_AnimJumpBackDownwards = config.animBD; -        m_AnimJumpEnd = config.animJumpEnd; // on ground again -		m_SkipStart = config.skipStart; -	} - -    public void SetDir(Direction dir) -    { -        m_Dir = dir; -    } -	 -    public override void OnEnter() -    { -        base.OnEnter(); - -        m_CurAnim = 0; - -		switch(m_Dir) -		{ -			case Direction.Neutral: -				m_CurUpMotion = m_AnimJumpNeutralUpwards; -				m_CurDownMotion = m_AnimJumpNeutralDownwards; -				m_CurInitVelocity = new Vector3(0, m_NeutralJumpSpeedY, 0); -				break; -			case Direction.Forward: -				m_CurUpMotion = m_AnimJumpFwdUpwards; -				m_CurDownMotion = m_AnimJumpFwdDownwards; -				m_CurInitVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0); -				break; -			case Direction.Backward: -				m_CurUpMotion = m_AnimJumpBackUpwards; -				m_CurDownMotion = m_AnimJumpBackDownwards; -				m_CurInitVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0); -				break; -		} - -		bool isOnGround = m_Collider.IsOnGround; -		bool isUp = m_Body.Velocity.y > 0; -		bool isDown = m_Body.Velocity.y < 0; -		bool isFreeFall = Mathf.Approximately(m_Body.Velocity.y, 0); - -		if (isOnGround && !m_SkipStart) -			m_CurStage = Stage.Ready; -		else if (isUp || isOnGround && m_SkipStart) -			m_CurStage = Stage.Up; -		else if (isDown || isFreeFall) -			m_CurStage = Stage.Down;  -	} - -    public override void OnUpdate() -    { -		foreach (var stateTrigger in m_Triggers) -		{ -			if (stateTrigger.Update() && stateTrigger.Swallow) -				return; -		} - -		AnimatorStateInfo motionInfo = m_Animator.GetCurrentAnimatorStateInfo(0); - -		switch (m_CurStage) -		{ -			case Stage.Ready: -				if(m_CurAnim != m_AnimJumpStart) -				{ -					m_Animator.CrossFade(m_AnimJumpStart, 0.2f); -					m_CurAnim = m_AnimJumpStart; -				} -				if(motionInfo.shortNameHash == m_AnimJumpStart && motionInfo.normalizedTime >= 1f) -				{ -					m_CurStage = Stage.Up; -				} -				break; -			case Stage.Up: -				if(m_CurAnim != m_CurUpMotion) -				{ -					m_Body.LocalVelocity = m_CurInitVelocity; -					m_Animator.CrossFade(m_CurUpMotion, 0.05f); -					m_CurAnim = m_CurUpMotion;  -				} -				if(m_Body.Velocity.y < 0) -				{ -					m_CurStage = Stage.Down; -				} -				break; -			case Stage.Down: -				if(m_CurAnim != m_CurDownMotion) -				{ -					m_Animator.CrossFade(m_CurDownMotion, 0.5f); -					m_CurAnim = m_CurDownMotion; -				} -				if(m_Collider.IsOnGround) -				{ -					m_CurStage = Stage.End; -				} -				break; -			case Stage.End: -				if(m_CurAnim != m_AnimJumpEnd) -				{ -					m_Animator.CrossFade(m_AnimJumpEnd, 0.2f); -					m_CurAnim = m_AnimJumpEnd; -				} -				break; -		} -    } - -    public override void OnPhysicsUpdate() -    { -        base.OnPhysicsUpdate(); -    } - -    /// <summary> -    /// 跳跃准备动作已经完毕 -    /// </summary> -    /// <returns></returns> -    public bool IsJumpReady() -    { -        if (m_CurAnim != m_AnimJumpStart) -            return false; - -        AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0); -        if (state.shortNameHash == m_CurAnim && state.normalizedTime >= 1f) -            return true; - -        return false; -    } - -    /// <summary> -    /// 结束 -    /// </summary> -    /// <returns></returns> -    public bool IsJumpDone(float t = 1f) -    { -        if (m_CurStage == Stage.End) -        { -            AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0); -            return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= t; -        } - -        return false; -    } - -	/// <summary> -	/// 着地  -	/// </summary> -	/// <returns></returns> -	public bool IsJumpGround() -	{ -		return m_CurStage == Stage.End &&  m_Collider.IsOnGround; -	} - -    public void AddTrigger(Trigger trigger) -    { -        if (trigger == null || m_Triggers.Contains(trigger)) -            return; -        m_Triggers.Add(trigger); -    } - -}
\ No newline at end of file | 
