summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Avatar/States/JumpState.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Avatar/States/JumpState.cs')
-rw-r--r--Assets/Scripts/Avatar/States/JumpState.cs263
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