summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Avatar
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-11-16 08:30:54 +0800
committerchai <chaifix@163.com>2020-11-16 08:30:54 +0800
commitf325841eff10ae492ce6c634d4b07cf058a068c6 (patch)
tree980d81a4b87d571fcb893fc44f8809af97466bca /Assets/Scripts/Avatar
parentbe3ca8b172f22ce7c4c4316745e0df05de58b069 (diff)
*state system
Diffstat (limited to 'Assets/Scripts/Avatar')
-rw-r--r--Assets/Scripts/Avatar/Abilities/HurtAbility.cs21
-rw-r--r--Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Abilities/UberAbility.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJump.cs14
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionJumpForward.cs16
-rw-r--r--Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs16
-rw-r--r--Assets/Scripts/Avatar/Avatar.cs51
-rw-r--r--Assets/Scripts/Avatar/Avatar_Hurt.cs16
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs12
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs8
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionCheckJumpState.cs26
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs4
-rw-r--r--Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs4
-rw-r--r--Assets/Scripts/Avatar/StateSystem.cs (renamed from Assets/Scripts/Avatar/AbilitySystem.cs)86
-rw-r--r--Assets/Scripts/Avatar/StateSystem.cs.meta (renamed from Assets/Scripts/Avatar/AbilitySystem.cs.meta)0
-rw-r--r--Assets/Scripts/Avatar/States.meta (renamed from Assets/Scripts/Avatar/Abilities.meta)0
-rw-r--r--Assets/Scripts/Avatar/States/AbilityBase.cs (renamed from Assets/Scripts/Avatar/Abilities/AbilityBase.cs)132
-rw-r--r--Assets/Scripts/Avatar/States/AbilityBase.cs.meta (renamed from Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta)0
-rw-r--r--Assets/Scripts/Avatar/States/AttackState.cs (renamed from Assets/Scripts/Avatar/Abilities/AttackAbility.cs)350
-rw-r--r--Assets/Scripts/Avatar/States/AttackState.cs.meta (renamed from Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta)0
-rw-r--r--Assets/Scripts/Avatar/States/DashState.cs (renamed from Assets/Scripts/Avatar/Abilities/DashAbility.cs)36
-rw-r--r--Assets/Scripts/Avatar/States/DashState.cs.meta (renamed from Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta)0
-rw-r--r--Assets/Scripts/Avatar/States/DodgeState.cs (renamed from Assets/Scripts/Avatar/Abilities/DodgeAbility.cs)32
-rw-r--r--Assets/Scripts/Avatar/States/DodgeState.cs.meta (renamed from Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta)0
-rw-r--r--Assets/Scripts/Avatar/States/HurtState.cs70
-rw-r--r--Assets/Scripts/Avatar/States/HurtState.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/States/IdleState.cs (renamed from Assets/Scripts/Avatar/Abilities/IdleAbility.cs)114
-rw-r--r--Assets/Scripts/Avatar/States/IdleState.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/States/JumpState.cs (renamed from Assets/Scripts/Avatar/Abilities/JumpAbility.cs)490
-rw-r--r--Assets/Scripts/Avatar/States/JumpState.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/States/MoveState.cs (renamed from Assets/Scripts/Avatar/Abilities/MoveAbility.cs)130
-rw-r--r--Assets/Scripts/Avatar/States/MoveState.cs.meta11
-rw-r--r--Assets/Scripts/Avatar/States/UberState.cs (renamed from Assets/Scripts/Avatar/Abilities/UberAbility.cs)24
-rw-r--r--Assets/Scripts/Avatar/States/UberState.cs.meta11
37 files changed, 924 insertions, 838 deletions
diff --git a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs
deleted file mode 100644
index c12c89c6..00000000
--- a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-/// <summary>
-/// 将伤害类型进行分类,决定不同的motion类型
-/// </summary>
-public enum HurtType
-{
- Light = 0, // 轻击
- Medium, // 中击
- Hard, // 重击
- Back,
- Up,
- Diagup
-}
-
-public class HurtAbility : AbilityBase
-{
-
-}
diff --git a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta
deleted file mode 100644
index 0e70d0be..00000000
--- a/Assets/Scripts/Avatar/Abilities/HurtAbility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 6984a899f4c7f574a8dbffe0372c6c2e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta
deleted file mode 100644
index 07d0c292..00000000
--- a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 367ca0f7efe3fe14baf88eb3ce60a78b
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta
deleted file mode 100644
index 6c67c462..00000000
--- a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: ed5b337c63528354f8b4f2ba0a59481d
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta
deleted file mode 100644
index 08b2954c..00000000
--- a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4581355020e27084f869d6001787e11e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/UberAbility.cs.meta b/Assets/Scripts/Avatar/Abilities/UberAbility.cs.meta
deleted file mode 100644
index 644a961f..00000000
--- a/Assets/Scripts/Avatar/Abilities/UberAbility.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 4e409e4f283e85841a62293fe96b1cce
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Actions/ActionJump.cs b/Assets/Scripts/Avatar/Actions/ActionJump.cs
index c90e73f4..b281a7b3 100644
--- a/Assets/Scripts/Avatar/Actions/ActionJump.cs
+++ b/Assets/Scripts/Avatar/Actions/ActionJump.cs
@@ -2,20 +2,20 @@
using System.Collections.Generic;
using UnityEngine;
-// 垂直跳跃,切换到jump ability
-public class ActionJump : ActionSwitchAbility
+// 垂直跳跃,切换到jump state
+public class ActionJump : ActionSwitchState
{
- private JumpAbility m_JumpAbility;
+ private JumpState m_JumpState;
- public ActionJump(AbilitySystem system, JumpAbility jumpAbility)
- : base(system, jumpAbility)
+ public ActionJump(StateSystem system, JumpState jumpState)
+ : base(system, jumpState)
{
- m_JumpAbility = jumpAbility;
+ m_JumpState = jumpState;
}
public override void Execute()
{
- m_JumpAbility.SetDir(JumpAbility.Direction.Neutral);
+ m_JumpState.SetDir(JumpState.Direction.Neutral);
base.Execute();
}
}
diff --git a/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs
index 4e71dcf6..d130411f 100644
--- a/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs
+++ b/Assets/Scripts/Avatar/Actions/ActionJumpForward.cs
@@ -2,20 +2,20 @@
using System.Collections.Generic;
using UnityEngine;
-// 垂直跳跃,切换到jump ability
-public class ActionJumpForward : ActionSwitchAbility
+// 垂直跳跃,切换到jump state
+public class ActionJumpForward : ActionSwitchState
{
- private JumpAbility m_JumpAbility;
+ private JumpState m_JumpState;
- public ActionJumpForward(AbilitySystem system, JumpAbility jumpAbility)
- : base(system, jumpAbility)
+ public ActionJumpForward(StateSystem system, JumpState jumpState)
+ : base(system, jumpState)
{
- m_JumpAbility = jumpAbility;
+ m_JumpState = jumpState;
}
public override void Execute()
{
- m_JumpAbility.SetDir(JumpAbility.Direction.Forward);
- base.Execute(); // switch to jump ability
+ m_JumpState.SetDir(JumpState.Direction.Forward);
+ base.Execute(); // switch to jump state
}
}
diff --git a/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs
index 1e214d72..89327951 100644
--- a/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs
+++ b/Assets/Scripts/Avatar/Actions/ActionSwitchAbility.cs
@@ -2,20 +2,20 @@
using System.Collections.Generic;
using UnityEngine;
-// 基础的切换 ability
-public class ActionSwitchAbility : ActionBase
+// 基础的切换 state
+public class ActionSwitchState : ActionBase
{
- AbilitySystem m_AbilitySystem;
- AbilityBase m_TargetAbility;
+ StateSystem m_StateSystem;
+ StateBase m_TargetState;
- public ActionSwitchAbility(AbilitySystem abilitySystem, AbilityBase targetAbility)
+ public ActionSwitchState(StateSystem stateSystem, StateBase targetState)
{
- m_AbilitySystem = abilitySystem;
- m_TargetAbility = targetAbility;
+ m_StateSystem = stateSystem;
+ m_TargetState = targetState;
}
public override void Execute()
{
- m_AbilitySystem.SwitchToAbility(m_TargetAbility);
+ m_StateSystem.SwitchToState(m_TargetState);
}
}
diff --git a/Assets/Scripts/Avatar/Avatar.cs b/Assets/Scripts/Avatar/Avatar.cs
index 1f3990a9..601fafab 100644
--- a/Assets/Scripts/Avatar/Avatar.cs
+++ b/Assets/Scripts/Avatar/Avatar.cs
@@ -16,14 +16,14 @@ public partial class Avatar : MonoBehaviour, IInteractable
public Hitbox[] m_Hitbox;
public Hurtbox[] m_Hurtbox;
- protected AbilitySystem m_AbilitySystem = new AbilitySystem();
+ protected StateSystem m_StateSystem = new StateSystem();
- // 预定义的ability,角色必须定义的
- protected AbilityBase m_AbilityLightHurt;
- protected AbilityBase m_AbilityMidiumHurt;
- protected AbilityBase m_AbilityHeavyHurt;
- protected AbilityBase m_AbilityGroundHurt;
- protected AbilityBase m_AbilityAirHurt;
+ // 预定义的state,角色必须定义的
+ protected StateBase m_StateLightHurt;
+ protected StateBase m_StateMidiumHurt;
+ protected StateBase m_StateHeavyHurt;
+ protected StateBase m_StateGroundHurt;
+ protected StateBase m_StateAirHurt;
public PhysicsBody Body
{
@@ -84,13 +84,13 @@ public partial class Avatar : MonoBehaviour, IInteractable
public void OnUpdate()
{
- m_AbilitySystem.OnUpdate();
+ m_StateSystem.OnUpdate();
}
// 在物理模拟之后调用
public void OnPhysicsUpdate()
{
- m_AbilitySystem.OnPhysicsUpdate();
+ m_StateSystem.OnPhysicsUpdate();
}
public virtual Vector3 GetEffectPosition()
@@ -101,13 +101,13 @@ public partial class Avatar : MonoBehaviour, IInteractable
// 获得当前击打如果有的话
public Hit GetHit()
{
- return m_AbilitySystem.GetHit();
+ return m_StateSystem.GetHit();
}
public virtual void OnHit(HitInfo hitInfo)
{
//Debug.Log("Hit");
- m_AbilitySystem.OnHit(hitInfo);
+ m_StateSystem.OnHit(hitInfo);
}
public virtual void OnHurt(HurtInfo hurtInfo)
@@ -116,7 +116,34 @@ public partial class Avatar : MonoBehaviour, IInteractable
HitDefination hitDef = hurtInfo.hitDef;
if (hitDef != null)
ApplyHit(hitDef);
- m_AbilitySystem.OnHurt(hurtInfo);
+ m_StateSystem.OnHurt(hurtInfo);
}
+
+ protected ConditionBase Not(ConditionBase cond)
+ {
+ return new ConditionNot(cond);
+ }
+
+ protected ConditionBase And(ConditionBase c1, ConditionBase c2)
+ {
+ return new ConditionAnd(c1, c2);
+ }
+
+ protected ConditionBase Ands(params ConditionBase[] cond)
+ {
+ List<ConditionBase> conditions = new List<ConditionBase>();
+ for (int i = 0; i < cond.Length; ++i)
+ {
+ conditions.Add(cond[i]);
+ }
+ ConditionMultiAnd and = new ConditionMultiAnd(conditions);
+ return and;
+ }
+
+ protected ConditionBase Or(ConditionBase c1, ConditionBase c2)
+ {
+ return new ConditionOr(c1, c2);
+ }
+
}
diff --git a/Assets/Scripts/Avatar/Avatar_Hurt.cs b/Assets/Scripts/Avatar/Avatar_Hurt.cs
index 3f26bcbe..f82ffbb6 100644
--- a/Assets/Scripts/Avatar/Avatar_Hurt.cs
+++ b/Assets/Scripts/Avatar/Avatar_Hurt.cs
@@ -11,9 +11,19 @@ public partial class Avatar : MonoBehaviour, IInteractable
m_Body.AddForce(hit.hurtAddForce);
}
- // force switch to hurt ability
+ // 切换到受击状态
+ switch(hit.type)
+ {
+ case HitType.Light: m_StateSystem.SwitchToState(m_StateLightHurt); break;
+ case HitType.Midium: m_StateSystem.SwitchToState(m_StateMidiumHurt); break;
+ case HitType.Heavy: m_StateSystem.SwitchToState(m_StateHeavyHurt); break;
+ case HitType.Ground: m_StateSystem.SwitchToState(m_StateGroundHurt); break;
+ case HitType.Air: m_StateSystem.SwitchToState(m_StateAirHurt); break;
+ default:
+ m_StateSystem.SwitchToState(m_StateLightHurt);
+ break;
+ }
-
- }
+ }
}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs
index b55cacb8..4b71b837 100644
--- a/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAbilitySeq.cs
@@ -3,22 +3,22 @@ using System.Collections.Generic;
using UnityEngine;
/// <summary>
-/// 记录之前的ability序列满足某个序列
+/// 记录之前的state序列满足某个序列
/// combo的时候根据当前序列决定combo
/// </summary>
-public class ConditionAbilitySeq : ConditionBase
+public class ConditionStateSeq : ConditionBase
{
- List<int> m_TargetAbilitySeq = new List<int>();
+ List<int> m_TargetStateSeq = new List<int>();
- public ConditionAbilitySeq(List<int> commandSeq)
+ public ConditionStateSeq(List<int> commandSeq)
: base()
{
- m_TargetAbilitySeq = commandSeq;
+ m_TargetStateSeq = commandSeq;
}
public override bool Evaluate()
{
- // 验证记录的abilitySeq是否满足
+ // 验证记录的stateSeq是否满足
throw new System.NotImplementedException();
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs
index a3944600..0f9b4529 100644
--- a/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs
+++ b/Assets/Scripts/Avatar/Conditions/ConditionAttkExpireTime.cs
@@ -4,18 +4,18 @@ using UnityEngine;
public class ConditionAttkExpireTime : ConditionBase
{
- AttackAbility m_Ability;
+ AttackState m_State;
float m_ExpireTime;
- public ConditionAttkExpireTime(AttackAbility attack, float expireTime)
+ public ConditionAttkExpireTime(AttackState attack, float expireTime)
{
- m_Ability = attack;
+ m_State = attack;
m_ExpireTime = expireTime;
}
public override bool Evaluate()
{
- return m_Ability.ExpireTime > m_ExpireTime;
+ return m_State.ExpireTime > m_ExpireTime;
}
}
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionCheckJumpState.cs b/Assets/Scripts/Avatar/Conditions/ConditionCheckJumpState.cs
index 9afd68c4..98859483 100644
--- a/Assets/Scripts/Avatar/Conditions/ConditionCheckJumpState.cs
+++ b/Assets/Scripts/Avatar/Conditions/ConditionCheckJumpState.cs
@@ -4,33 +4,33 @@ using UnityEngine;
public class ConditionCheckJumpState : ConditionBase
{
- JumpAbility m_Ability;
- JumpAbility.State m_State;
- JumpAbility.Direction m_Direction;
+ JumpState m_State;
+ JumpState.Stage m_Stage;
+ JumpState.Direction m_Direction;
- public ConditionCheckJumpState(JumpAbility ability, JumpAbility.State state = JumpAbility.State.None, JumpAbility.Direction direction = JumpAbility.Direction.None)
+ public ConditionCheckJumpState(JumpState state, JumpState.Stage stage = JumpState.Stage.None, JumpState.Direction direction = JumpState.Direction.None)
{
- m_Ability = ability;
+ m_State = state;
m_State = state;
m_Direction = direction;
}
public override bool Evaluate()
{
- if (m_Ability == null)
+ if (m_State == null)
return false;
- if (m_State != JumpAbility.State.None && m_Direction != JumpAbility.Direction.None)
+ if (m_Stage != JumpState.Stage.None && m_Direction != JumpState.Direction.None)
{
- return m_Ability.CurState == m_State
- && m_Ability.CurDirection == m_Direction;
+ return m_State.CurStage == m_Stage
+ && m_State.CurDirection == m_Direction;
}
- else if (m_State != JumpAbility.State.None && m_Direction == JumpAbility.Direction.None)
+ else if (m_Stage != JumpState.Stage.None && m_Direction == JumpState.Direction.None)
{
- return m_Ability.CurState == m_State;
+ return m_State.CurStage == m_Stage;
}
- else if (m_State == JumpAbility.State.None && m_Direction != JumpAbility.Direction.None)
+ else if (m_Stage == JumpState.Stage.None && m_Direction != JumpState.Direction.None)
{
- return m_Ability.CurDirection == m_Direction;
+ return m_State.CurDirection == m_Direction;
}
else
return false;
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs
index 1f213a50..a6e57e37 100644
--- a/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpDone.cs
@@ -4,10 +4,10 @@ using UnityEngine;
public class ConditionJumpDone : ConditionBase
{
- JumpAbility m_Jump;
+ JumpState m_Jump;
float m_T;
- public ConditionJumpDone(JumpAbility jump, float t = 1f)
+ public ConditionJumpDone(JumpState jump, float t = 1f)
{
m_Jump = jump;
m_T = t;
diff --git a/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs
index 47f74cab..e0f75a69 100644
--- a/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs
+++ b/Assets/Scripts/Avatar/Conditions/ConditionJumpOnGround.cs
@@ -4,9 +4,9 @@ using UnityEngine;
public class ConditionJumpOnGround : ConditionBase
{
- JumpAbility m_Jump;
+ JumpState m_Jump;
- public ConditionJumpOnGround(JumpAbility jump)
+ public ConditionJumpOnGround(JumpState jump)
{
m_Jump = jump;
}
diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs b/Assets/Scripts/Avatar/StateSystem.cs
index 5f6e9364..42e35445 100644
--- a/Assets/Scripts/Avatar/AbilitySystem.cs
+++ b/Assets/Scripts/Avatar/StateSystem.cs
@@ -3,16 +3,16 @@ using System.Collections.Generic;
using UnityEngine;
/// <summary>
-/// 每个角色拥有一个ablity system
+/// 每个角色拥有一个state system
/// </summary>
-public class AbilitySystem
+public class StateSystem
{
/// <summary>
- /// 当前执行的ability
+ /// 当前执行的state
/// </summary>
- private AbilityBase m_Currrent;
+ private StateBase m_Currrent;
- public AbilityBase Current
+ public StateBase Current
{
get
{
@@ -20,34 +20,34 @@ public class AbilitySystem
}
}
- private List<AbilityBase> m_Abilities = new List<AbilityBase>();
+ private List<StateBase> m_States = new List<StateBase>();
- private UberAbility m_UberAbility;
+ private UberState m_UberState;
- public AbilitySystem()
+ public StateSystem()
{
}
- public void ForceStart(AbilityBase ability)
+ public void ForceStart(StateBase state)
{
- if (ability == null)
+ if (state == null)
return;
if (m_Currrent != null)
m_Currrent.OnExit();
- m_Currrent = ability;
+ m_Currrent = state;
m_Currrent.OnEnter();
}
- public void SetUberAbility(UberAbility ability)
- {
- m_UberAbility = ability;
+ public void SetUberState(UberState state)
+ {
+ m_UberState = state;
}
- public void AddAbility(AbilityBase ability)
+ public void AddState(StateBase state)
{
- m_Abilities.Add(ability);
+ m_States.Add(state);
}
public void OnUpdate()
@@ -56,10 +56,10 @@ public class AbilitySystem
{
m_Currrent.OnUpdate();
}
- if(m_UberAbility != null)
- {
- m_UberAbility.OnUpdate();
- }
+ if(m_UberState != null)
+ {
+ m_UberState.OnUpdate();
+ }
}
public void OnPhysicsUpdate()
@@ -68,39 +68,39 @@ public class AbilitySystem
{
m_Currrent.OnPhysicsUpdate();
}
- if(m_UberAbility != null)
- {
- m_UberAbility.OnPhysicsUpdate();
- }
- }
-
- public void OnHit(HitInfo info)
- {
- if (m_Currrent != null)
- m_Currrent.OnHit(info);
+ if(m_UberState != null)
+ {
+ m_UberState.OnPhysicsUpdate();
+ }
}
- public void OnHurt(HurtInfo info)
- {
- if (m_Currrent != null)
+ public void OnHit(HitInfo info)
+ {
+ if (m_Currrent != null)
+ m_Currrent.OnHit(info);
+ }
+
+ public void OnHurt(HurtInfo info)
+ {
+ if (m_Currrent != null)
m_Currrent.OnHurt(info);
}
-
- public void SwitchToAbility(AbilityBase targetAbility)
+
+ public void SwitchToState(StateBase targetState)
{
if (m_Currrent != null)
m_Currrent.OnExit();
- m_Currrent = targetAbility;
+ m_Currrent = targetState;
m_Currrent.OnEnter();
}
- // 获得当前击打如果有的话
- public Hit GetHit()
- {
- if (Current == null || !(Current is AttackAbility))
- return null;
- AttackAbility ability = Current as AttackAbility;
- return ability.GetHit();
+ // 获得当前击打如果有的话
+ public Hit GetHit()
+ {
+ if (Current == null || !(Current is AttackState))
+ return null;
+ AttackState state = Current as AttackState;
+ return state.GetHit();
}
} \ No newline at end of file
diff --git a/Assets/Scripts/Avatar/AbilitySystem.cs.meta b/Assets/Scripts/Avatar/StateSystem.cs.meta
index 52e8267c..52e8267c 100644
--- a/Assets/Scripts/Avatar/AbilitySystem.cs.meta
+++ b/Assets/Scripts/Avatar/StateSystem.cs.meta
diff --git a/Assets/Scripts/Avatar/Abilities.meta b/Assets/Scripts/Avatar/States.meta
index 4b958769..4b958769 100644
--- a/Assets/Scripts/Avatar/Abilities.meta
+++ b/Assets/Scripts/Avatar/States.meta
diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs b/Assets/Scripts/Avatar/States/AbilityBase.cs
index c8c09a6b..4932a3de 100644
--- a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs
+++ b/Assets/Scripts/Avatar/States/AbilityBase.cs
@@ -1,66 +1,66 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-/// <summary>
-/// 同一个角色同一个时间只能有一个ability
-/// </summary>
-public abstract class AbilityBase
-{
- protected int m_AbilityID;
- public int ID
- {
- get
- {
- return m_AbilityID;
- }
- }
-
- public AbilityBase()
- {
- m_AbilityID = UIDManager.Acquire();
- }
-
- public virtual void OnInit() { }
-
- /// <summary>
- /// 进入当前ability的回调
- /// </summary>
- public virtual void OnEnter() { }
-
- /// <summary>
- /// 退出当前ability的回调
- /// </summary>
- public virtual void OnExit() { }
-
- /// <summary>
- /// 当前ability的update函数
- /// </summary>
- public virtual void OnUpdate() { }
-
- /// <summary>
- /// 在物理模拟之后更新
- /// </summary>
- public virtual void OnPhysicsUpdate() { }
-
- /// <summary>
- /// 过渡到下一个ability的回调
- /// </summary>
- /// <param name="to"></param>
- public virtual void OnTranslate(AbilityBase to) { }
-
- /// <summary>
- /// 检测到hitbox碰撞时的回调
- /// </summary>
- public virtual void OnHit(HitInfo info) { }
-
- /// <summary>
- /// 检测到hurtbox碰撞时的回调
- /// </summary>
- public virtual void OnHurt(HurtInfo info) { }
-
- /// <summary>
- /// 检测到defendbox碰撞时的回调
- /// </summary>
- public virtual void OnDefend() { }
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 同一个角色同一个时间只能有一个state
+/// </summary>
+public abstract class StateBase
+{
+ protected int m_StateID;
+ public int ID
+ {
+ get
+ {
+ return m_StateID;
+ }
+ }
+
+ public StateBase()
+ {
+ m_StateID = UIDManager.Acquire();
+ }
+
+ public virtual void OnInit() { }
+
+ /// <summary>
+ /// 进入当前state的回调
+ /// </summary>
+ public virtual void OnEnter() { }
+
+ /// <summary>
+ /// 退出当前state的回调
+ /// </summary>
+ public virtual void OnExit() { }
+
+ /// <summary>
+ /// 当前state的update函数
+ /// </summary>
+ public virtual void OnUpdate() { }
+
+ /// <summary>
+ /// 在物理模拟之后更新
+ /// </summary>
+ public virtual void OnPhysicsUpdate() { }
+
+ /// <summary>
+ /// 过渡到下一个state的回调
+ /// </summary>
+ /// <param name="to"></param>
+ public virtual void OnTranslate(StateBase to) { }
+
+ /// <summary>
+ /// 检测到hitbox碰撞时的回调
+ /// </summary>
+ public virtual void OnHit(HitInfo info) { }
+
+ /// <summary>
+ /// 检测到hurtbox碰撞时的回调
+ /// </summary>
+ public virtual void OnHurt(HurtInfo info) { }
+
+ /// <summary>
+ /// 检测到defendbox碰撞时的回调
+ /// </summary>
+ public virtual void OnDefend() { }
+}
diff --git a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta b/Assets/Scripts/Avatar/States/AbilityBase.cs.meta
index 79a6b7eb..79a6b7eb 100644
--- a/Assets/Scripts/Avatar/Abilities/AbilityBase.cs.meta
+++ b/Assets/Scripts/Avatar/States/AbilityBase.cs.meta
diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs b/Assets/Scripts/Avatar/States/AttackState.cs
index 6e7c503f..ae8f3b66 100644
--- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs
+++ b/Assets/Scripts/Avatar/States/AttackState.cs
@@ -1,175 +1,175 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public struct AttackAbilityConfig
-{
- public Vector3 velocity; // velocity setup
- public int motion;
- public Animator animator;
- public PhysicsBody body;
-}
-
-// 单独的一个招式
-public class AttackAbility : AbilityBase
-{
- AttackAbilityConfig m_Config = new AttackAbilityConfig();
-
- private List<Trigger> m_Triggers = new List<Trigger>();
-
- private List<Trigger> m_PhysicsTriggers = new List<Trigger>();
-
- /// <summary>
- /// 这个招式配置的hit
- /// </summary>
- private List<Hit> m_Hits = new List<Hit>();
-
- /// <summary>
- /// 从动画结束开始计时
- /// </summary>
- float m_TimeCount;
- public float ExpireTime
- {
- get
- {
- return m_TimeCount;
- }
- }
-
- /// <summary>
- /// 这个招式的hit个数
- /// </summary>
- public int HitCount
- {
- get
- {
- return m_Hits != null ? m_Hits.Count : 0;
- }
- }
-
-
- public AttackAbility(Animator animator, int animation, PhysicsBody body = null)
- {
- m_Config.animator = animator;
- m_Config.motion = animation;
- m_Config.velocity = Vector3.zero;
- m_Config.body = body;
- }
-
- public AttackAbility(AttackAbilityConfig config)
- {
- m_Config = config;
- }
-
- public override void OnInit()
- {
- }
-
- public override void OnDefend()
- {
- throw new System.NotImplementedException();
- }
-
- public override void OnEnter()
- {
- m_TimeCount = 0;
-
- m_Config.animator.CrossFade(m_Config.motion, 0);
-
- if(m_Config.body != null)
- {
- m_Config.body.LocalVelocity = m_Config.velocity;
- }
-
- foreach(var hit in m_Hits)
- {
- hit.WipeRecords();
- }
-
- foreach(var trigger in m_Triggers)
- {
- trigger.Reset();
- }
- }
-
- public override void OnExit()
- {
- m_TimeCount = 0;
- }
-
- public override void OnHit(HitInfo info)
- {
- }
-
- public override void OnHurt(HurtInfo info)
- {
- }
-
- public override void OnTranslate(AbilityBase to)
- {
- }
-
- public override void OnUpdate()
- {
- AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0);
- if(info.shortNameHash == m_Config.motion && info.normalizedTime >= 0.99f)
- {
- m_TimeCount += Time.deltaTime;
- }
- foreach (var abilityTrigger in m_Triggers)
- {
- if (abilityTrigger.Update() && abilityTrigger.Swallow)
- break;
- }
- }
-
- // 在物理模拟之后
- public override void OnPhysicsUpdate()
- {
- foreach (var trigger in m_PhysicsTriggers)
- {
- if (trigger.Update() && trigger.Swallow)
- break;
- }
- }
-
- public void AddTrigger(Trigger trigger)
- {
- if (trigger == null || m_Triggers.Contains(trigger))
- return;
- m_Triggers.Add(trigger);
- }
-
- public void AddPhysicsTrigger(Trigger trigger)
- {
- if (trigger == null || m_PhysicsTriggers.Contains(trigger))
- return;
- m_PhysicsTriggers.Add(trigger);
- }
-
- public void AddHitDefination(HitDefination defination)
- {
- Hit info = new Hit();
- info.defination = defination;
- m_Hits.Add(info);
- }
-
- // 获得当前时间点产生的hit
- public Hit GetHit()
- {
- AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0);
- float normalizeTime = info.normalizedTime;
- for (int i = 0; i< m_Hits.Count; ++i)
- {
- Hit hit = m_Hits[i];
- float start = hit.defination.start;
- float end = hit.defination.end;
- if(normalizeTime >= start && normalizeTime <= end)
- {
- return hit;
- }
- }
- return null;
- }
-
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public struct AttackStateConfig
+{
+ public Vector3 velocity; // velocity setup
+ public int motion;
+ public Animator animator;
+ public PhysicsBody body;
+}
+
+// 单独的一个招式
+public class AttackState : StateBase
+{
+ AttackStateConfig m_Config = new AttackStateConfig();
+
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ private List<Trigger> m_PhysicsTriggers = new List<Trigger>();
+
+ /// <summary>
+ /// 这个招式配置的hit
+ /// </summary>
+ private List<Hit> m_Hits = new List<Hit>();
+
+ /// <summary>
+ /// 从动画结束开始计时
+ /// </summary>
+ float m_TimeCount;
+ public float ExpireTime
+ {
+ get
+ {
+ return m_TimeCount;
+ }
+ }
+
+ /// <summary>
+ /// 这个招式的hit个数
+ /// </summary>
+ public int HitCount
+ {
+ get
+ {
+ return m_Hits != null ? m_Hits.Count : 0;
+ }
+ }
+
+
+ public AttackState(Animator animator, int animation, PhysicsBody body = null)
+ {
+ m_Config.animator = animator;
+ m_Config.motion = animation;
+ m_Config.velocity = Vector3.zero;
+ m_Config.body = body;
+ }
+
+ public AttackState(AttackStateConfig config)
+ {
+ m_Config = config;
+ }
+
+ public override void OnInit()
+ {
+ }
+
+ public override void OnDefend()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public override void OnEnter()
+ {
+ m_TimeCount = 0;
+
+ m_Config.animator.CrossFade(m_Config.motion, 0);
+
+ if(m_Config.body != null)
+ {
+ m_Config.body.LocalVelocity = m_Config.velocity;
+ }
+
+ foreach(var hit in m_Hits)
+ {
+ hit.WipeRecords();
+ }
+
+ foreach(var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
+ }
+
+ public override void OnExit()
+ {
+ m_TimeCount = 0;
+ }
+
+ public override void OnHit(HitInfo info)
+ {
+ }
+
+ public override void OnHurt(HurtInfo info)
+ {
+ }
+
+ public override void OnTranslate(StateBase to)
+ {
+ }
+
+ public override void OnUpdate()
+ {
+ AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0);
+ if(info.shortNameHash == m_Config.motion && info.normalizedTime >= 0.99f)
+ {
+ m_TimeCount += Time.deltaTime;
+ }
+ foreach (var stateTrigger in m_Triggers)
+ {
+ if (stateTrigger.Update() && stateTrigger.Swallow)
+ break;
+ }
+ }
+
+ // 在物理模拟之后
+ public override void OnPhysicsUpdate()
+ {
+ foreach (var trigger in m_PhysicsTriggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+ public void AddPhysicsTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_PhysicsTriggers.Contains(trigger))
+ return;
+ m_PhysicsTriggers.Add(trigger);
+ }
+
+ public void AddHitDefination(HitDefination defination)
+ {
+ Hit info = new Hit();
+ info.defination = defination;
+ m_Hits.Add(info);
+ }
+
+ // 获得当前时间点产生的hit
+ public Hit GetHit()
+ {
+ AnimatorStateInfo info = m_Config.animator.GetCurrentAnimatorStateInfo(0);
+ float normalizeTime = info.normalizedTime;
+ for (int i = 0; i< m_Hits.Count; ++i)
+ {
+ Hit hit = m_Hits[i];
+ float start = hit.defination.start;
+ float end = hit.defination.end;
+ if(normalizeTime >= start && normalizeTime <= end)
+ {
+ return hit;
+ }
+ }
+ return null;
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta b/Assets/Scripts/Avatar/States/AttackState.cs.meta
index 4159d2bc..4159d2bc 100644
--- a/Assets/Scripts/Avatar/Abilities/AttackAbility.cs.meta
+++ b/Assets/Scripts/Avatar/States/AttackState.cs.meta
diff --git a/Assets/Scripts/Avatar/Abilities/DashAbility.cs b/Assets/Scripts/Avatar/States/DashState.cs
index b9a479b5..c9237d4c 100644
--- a/Assets/Scripts/Avatar/Abilities/DashAbility.cs
+++ b/Assets/Scripts/Avatar/States/DashState.cs
@@ -1,18 +1,18 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class DashAbility : MonoBehaviour
-{
- // Start is called before the first frame update
- void Start()
- {
-
- }
-
- // Update is called once per frame
- void Update()
- {
-
- }
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class DashState : MonoBehaviour
+{
+ // Start is called before the first frame update
+ void Start()
+ {
+
+ }
+
+ // Update is called once per frame
+ void Update()
+ {
+
+ }
+}
diff --git a/Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta b/Assets/Scripts/Avatar/States/DashState.cs.meta
index c246c665..c246c665 100644
--- a/Assets/Scripts/Avatar/Abilities/DashAbility.cs.meta
+++ b/Assets/Scripts/Avatar/States/DashState.cs.meta
diff --git a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs b/Assets/Scripts/Avatar/States/DodgeState.cs
index 79e8fc61..58bc9301 100644
--- a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs
+++ b/Assets/Scripts/Avatar/States/DodgeState.cs
@@ -1,16 +1,16 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-
-/// <summary>
-/// Dodge ability
-/// </summary>
-public class DodgeAbility : AbilityBase
-{
- public DodgeAbility()
- {
-
- }
-
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+/// <summary>
+/// Dodge state
+/// </summary>
+public class DodgeState : StateBase
+{
+ public DodgeState()
+ {
+
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta b/Assets/Scripts/Avatar/States/DodgeState.cs.meta
index e7297a88..e7297a88 100644
--- a/Assets/Scripts/Avatar/Abilities/DodgeAbility.cs.meta
+++ b/Assets/Scripts/Avatar/States/DodgeState.cs.meta
diff --git a/Assets/Scripts/Avatar/States/HurtState.cs b/Assets/Scripts/Avatar/States/HurtState.cs
new file mode 100644
index 00000000..db48d1a4
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/HurtState.cs
@@ -0,0 +1,70 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+/// <summary>
+/// 将伤害类型进行分类,决定不同的motion类型
+/// </summary>
+public enum HurtType
+{
+ Light = 0, // 轻击
+ Medium, // 中击
+ Hard, // 重击
+ Back,
+ Up,
+ Diagup
+}
+
+
+public class HurtState : StateBase
+{
+ Animator m_Animator;
+
+ int m_AnimHash;
+
+ /// <summary>
+ /// 在Idle状态时可以切换的state
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public HurtState(Animator animator, int animation)
+ : base()
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
+
+ foreach (var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
+ }
+
+ public override void OnInit()
+ {
+ base.OnInit();
+ }
+
+ public override void OnUpdate()
+ {
+ foreach (var trigger in m_Triggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+
+ base.OnUpdate();
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/States/HurtState.cs.meta b/Assets/Scripts/Avatar/States/HurtState.cs.meta
new file mode 100644
index 00000000..ba24ef88
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/HurtState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a7f21d9eef4527249a00204754fbff5b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs b/Assets/Scripts/Avatar/States/IdleState.cs
index e692cc2a..8b46b904 100644
--- a/Assets/Scripts/Avatar/Abilities/IdleAbility.cs
+++ b/Assets/Scripts/Avatar/States/IdleState.cs
@@ -1,57 +1,57 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-
-public class IdleAbility : AbilityBase
-{
- Animator m_Animator;
-
- int m_AnimHash;
-
- /// <summary>
- /// 在Idle状态时可以切换的ability
- /// </summary>
- private List<Trigger> m_Triggers = new List<Trigger>();
-
- public IdleAbility(Animator animator, int animation)
- : base()
- {
- m_Animator = animator;
- m_AnimHash = animation;
- }
-
- public override void OnEnter()
- {
- m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
-
- foreach (var trigger in m_Triggers)
- {
- trigger.Reset();
- }
- }
-
- public override void OnInit()
- {
- base.OnInit();
- }
-
- public override void OnUpdate()
- {
- foreach(var trigger in m_Triggers)
- {
- if (trigger.Update() && trigger.Swallow)
- break;
- }
-
- base.OnUpdate();
- }
-
- public void AddTrigger(Trigger trigger)
- {
- if (trigger == null || m_Triggers.Contains(trigger))
- return;
- m_Triggers.Add(trigger);
- }
-
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+
+public class IdleState : StateBase
+{
+ Animator m_Animator;
+
+ int m_AnimHash;
+
+ /// <summary>
+ /// 在Idle状态时可以切换的state
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public IdleState(Animator animator, int animation)
+ : base()
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
+
+ foreach (var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
+ }
+
+ public override void OnInit()
+ {
+ base.OnInit();
+ }
+
+ public override void OnUpdate()
+ {
+ foreach(var trigger in m_Triggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+
+ base.OnUpdate();
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/States/IdleState.cs.meta b/Assets/Scripts/Avatar/States/IdleState.cs.meta
new file mode 100644
index 00000000..f872a5a6
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/IdleState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5761f8b5c41ec014381b1bd33ad42f1d
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs b/Assets/Scripts/Avatar/States/JumpState.cs
index 5c2d6366..1e172358 100644
--- a/Assets/Scripts/Avatar/Abilities/JumpAbility.cs
+++ b/Assets/Scripts/Avatar/States/JumpState.cs
@@ -2,45 +2,45 @@
using System.Collections.Generic;
using UnityEngine;
-public struct JumpAbilityConfig
-{
- 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 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 JumpAbility : AbilityBase
+public class JumpState : StateBase
{
- public enum Direction
- {
- None,
- Neutral,
- Forward,
- Backward
+ public enum Direction
+ {
+ None,
+ Neutral,
+ Forward,
+ Backward
}
- public enum State
- {
- None,
- Ready,
- Up,
- Down,
- End,
+ public enum Stage
+ {
+ None,
+ Ready,
+ Up,
+ Down,
+ End,
}
Direction m_Dir;
@@ -48,216 +48,216 @@ public class JumpAbility : AbilityBase
PhysicsBody m_Body;
PhysicsPrimitive m_Collider;
- Animator m_Animator;
-
- public float m_NeutralJumpSpeedY; // 垂直跳跃的基础速度
- public float m_FowardJumpSpeedX; // 向前跳跃的水平速度
- public float m_BackwardJumpSpeedX; // 向后跳跃的水平速度(一般来说是负值)
-
- // jump motions
+ 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;
- State m_CurState;
- int m_CurUpMotion;
- int m_CurDownMotion;
- Vector3 m_CurInitVelocity;
-
- public State CurState
- {
- get
- {
- return m_CurState;
- }
- }
-
- public Direction CurDirection
- {
- get
- {
- return m_Dir;
- }
- }
-
- private List<Trigger> m_Triggers = new List<Trigger>();
-
- bool m_SkipStart;
-
- public JumpAbility(JumpAbilityConfig 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_CurState = State.Ready;
- else if (isUp || isOnGround && m_SkipStart)
- m_CurState = State.Up;
- else if (isDown || isFreeFall)
- m_CurState = State.Down;
- }
-
- public override void OnUpdate()
- {
- foreach (var abilityTrigger in m_Triggers)
- {
- if (abilityTrigger.Update() && abilityTrigger.Swallow)
- return;
- }
-
- AnimatorStateInfo motionInfo = m_Animator.GetCurrentAnimatorStateInfo(0);
-
- switch (m_CurState)
- {
- case State.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_CurState = State.Up;
- }
- break;
- case State.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_CurState = State.Down;
- }
- break;
- case State.Down:
- if(m_CurAnim != m_CurDownMotion)
- {
- m_Animator.CrossFade(m_CurDownMotion, 0.5f);
- m_CurAnim = m_CurDownMotion;
- }
- if(m_Collider.IsOnGround)
- {
- m_CurState = State.End;
- }
- break;
- case State.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_CurState == State.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_CurState == State.End && m_Collider.IsOnGround;
- }
-
- public void AddTrigger(Trigger trigger)
- {
- if (trigger == null || m_Triggers.Contains(trigger))
- return;
- m_Triggers.Add(trigger);
- }
-
+ 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
diff --git a/Assets/Scripts/Avatar/States/JumpState.cs.meta b/Assets/Scripts/Avatar/States/JumpState.cs.meta
new file mode 100644
index 00000000..3d18db1c
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/JumpState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b3175c1ee1042e144b77c298e7b61eeb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs b/Assets/Scripts/Avatar/States/MoveState.cs
index 61efd0cf..0fbfcddb 100644
--- a/Assets/Scripts/Avatar/Abilities/MoveAbility.cs
+++ b/Assets/Scripts/Avatar/States/MoveState.cs
@@ -1,65 +1,65 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class MoveAbility : AbilityBase
-{
- Animator m_Animator;
- int m_AnimHash;
-
- /// <summary>
- /// 在跑动状态时可以切换的ability
- /// </summary>
- private List<Trigger> m_Triggers = new List<Trigger>();
-
- public MoveAbility(Animator animator, int animation)
- {
- m_Animator = animator;
- m_AnimHash = animation;
- }
-
- public override void OnInit()
- {
-
- }
-
- public override void OnDefend()
- {
- throw new System.NotImplementedException();
- }
-
- public override void OnEnter()
- {
- m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f);
-
- foreach (var trigger in m_Triggers)
- {
- trigger.Reset();
- }
- }
-
- public override void OnExit()
- {
- }
-
- public override void OnTranslate(AbilityBase to)
- {
- }
-
- public override void OnUpdate()
- {
- foreach (var abilityTrigger in m_Triggers)
- {
- if (abilityTrigger.Update() && abilityTrigger.Swallow)
- break;
- }
- }
-
- public void AddTrigger(Trigger trigger)
- {
- if (trigger == null || m_Triggers.Contains(trigger))
- return;
- m_Triggers.Add(trigger);
- }
-
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class MoveState : StateBase
+{
+ Animator m_Animator;
+ int m_AnimHash;
+
+ /// <summary>
+ /// 在跑动状态时可以切换的state
+ /// </summary>
+ private List<Trigger> m_Triggers = new List<Trigger>();
+
+ public MoveState(Animator animator, int animation)
+ {
+ m_Animator = animator;
+ m_AnimHash = animation;
+ }
+
+ public override void OnInit()
+ {
+
+ }
+
+ public override void OnDefend()
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public override void OnEnter()
+ {
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f);
+
+ foreach (var trigger in m_Triggers)
+ {
+ trigger.Reset();
+ }
+ }
+
+ public override void OnExit()
+ {
+ }
+
+ public override void OnTranslate(StateBase to)
+ {
+ }
+
+ public override void OnUpdate()
+ {
+ foreach (var stateTrigger in m_Triggers)
+ {
+ if (stateTrigger.Update() && stateTrigger.Swallow)
+ break;
+ }
+ }
+
+ public void AddTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_Triggers.Contains(trigger))
+ return;
+ m_Triggers.Add(trigger);
+ }
+
+}
diff --git a/Assets/Scripts/Avatar/States/MoveState.cs.meta b/Assets/Scripts/Avatar/States/MoveState.cs.meta
new file mode 100644
index 00000000..eb1dbbd7
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/MoveState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ae20739ccc918064dbe538d303d4be99
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Avatar/Abilities/UberAbility.cs b/Assets/Scripts/Avatar/States/UberState.cs
index ca2e7c06..a0b6d940 100644
--- a/Assets/Scripts/Avatar/Abilities/UberAbility.cs
+++ b/Assets/Scripts/Avatar/States/UberState.cs
@@ -1,12 +1,12 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-// 一个角色只能有一个uber ability,用来处理状态的自动切换
-public abstract class UberAbility : AbilityBase
-{
- public abstract void OnUpdate();
-
- public abstract void OnPhysicsUpdate();
-
-}
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+// 一个角色只能有一个uber state,用来处理状态的自动切换
+public abstract class UberState : StateBase
+{
+ public abstract void OnUpdate();
+
+ public abstract void OnPhysicsUpdate();
+
+}
diff --git a/Assets/Scripts/Avatar/States/UberState.cs.meta b/Assets/Scripts/Avatar/States/UberState.cs.meta
new file mode 100644
index 00000000..b36ffc94
--- /dev/null
+++ b/Assets/Scripts/Avatar/States/UberState.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: eafda132ea825cc46b32edfe09ebdecc
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: