summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-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
-rw-r--r--Assets/Scripts/Physics/PhysicsPrimitive.cs5
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript.cs17
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript_Anim.cs31
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript_Anim.cs.meta11
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript_States.cs53
-rw-r--r--Assets/Scripts/Test/ArmorSoldierScript_States.cs.meta11
-rw-r--r--Assets/Scripts/Test/SaionjiScript.cs10
-rw-r--r--Assets/Scripts/Test/SaionjiScript_States.cs (renamed from Assets/Scripts/Test/SaionjiScript_Ability.cs)785
-rw-r--r--Assets/Scripts/Test/SaionjiScript_States.cs.meta (renamed from Assets/Scripts/Test/SaionjiScript_Ability.cs.meta)0
-rw-r--r--Assets/Scripts/Test/SaionjiUberAbility.cs8
47 files changed, 1435 insertions, 1258 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:
diff --git a/Assets/Scripts/Physics/PhysicsPrimitive.cs b/Assets/Scripts/Physics/PhysicsPrimitive.cs
index c94aee1a..fde705fd 100644
--- a/Assets/Scripts/Physics/PhysicsPrimitive.cs
+++ b/Assets/Scripts/Physics/PhysicsPrimitive.cs
@@ -181,6 +181,8 @@ public abstract class PhysicsPrimitive : MonoBehaviour
{
get
{
+ if (Mathf.Approximately(Bound.w, PhysicsWorld.Ground))
+ return true;
return Bound.w <= PhysicsWorld.Ground;
}
}
@@ -189,7 +191,8 @@ public abstract class PhysicsPrimitive : MonoBehaviour
{
get
{
- return Bound.w > PhysicsWorld.Ground;
+ //return Bound.w > PhysicsWorld.Ground;
+ return !IsOnGround;
}
}
diff --git a/Assets/Scripts/Test/ArmorSoldierScript.cs b/Assets/Scripts/Test/ArmorSoldierScript.cs
index b6863a23..dd4cd3e3 100644
--- a/Assets/Scripts/Test/ArmorSoldierScript.cs
+++ b/Assets/Scripts/Test/ArmorSoldierScript.cs
@@ -2,14 +2,21 @@
using System.Collections.Generic;
using UnityEngine;
-public class ArmorSoldierScript : Avatar
+public partial class ArmorSoldierScript : Avatar, IInteractable
{
- int Anim_HurtFront;
+ public Animator m_Animator;
+
+ void Awake()
+ {
+ m_Animator = GetComponent<Animator>();
+ }
private void Start()
{
- base.Init();
- Anim_HurtFront = Animator.StringToHash("Hurt_Front");
+ base.Init();
+
+ SetupAnim();
+ SetupStates();
}
private void OnAnimatorMove()
@@ -32,8 +39,6 @@ public class ArmorSoldierScript : Avatar
public void Hurt()
{
- Animator animator = GetComponent<Animator>();
- animator.CrossFade(Anim_HurtFront, 0);
}
public override void OnHurt(HurtInfo hurtInfo)
diff --git a/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs b/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs
new file mode 100644
index 00000000..cf21a504
--- /dev/null
+++ b/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs
@@ -0,0 +1,31 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class ArmorSoldierScript : Avatar, IInteractable
+{
+ int Anim_Idle;
+
+ int Anim_HurtFront;
+
+ int Anim_LightHurt;
+ int Anim_MidiumHurt;
+ int Anim_HeavyHurt;
+ int Anim_GroundHurt;
+ int Anim_AirHurt;
+
+
+ void SetupAnim()
+ {
+ Anim_Idle = Animator.StringToHash("Idle");
+
+ Anim_HurtFront = Animator.StringToHash("Hurt_Front");
+ Anim_LightHurt = Animator.StringToHash("Hurt_Light");
+ Anim_MidiumHurt = Animator.StringToHash("Hurt_Midium");
+ Anim_HeavyHurt = Animator.StringToHash("Hurt_Heavy");
+ Anim_GroundHurt = Animator.StringToHash("Hurt_Ground");
+ Anim_AirHurt = Animator.StringToHash("Hurt_Air");
+
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs.meta b/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs.meta
new file mode 100644
index 00000000..212feda4
--- /dev/null
+++ b/Assets/Scripts/Test/ArmorSoldierScript_Anim.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ff0f58fdd1c9834e858aa0dda2b0ff8
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Test/ArmorSoldierScript_States.cs b/Assets/Scripts/Test/ArmorSoldierScript_States.cs
new file mode 100644
index 00000000..67eca581
--- /dev/null
+++ b/Assets/Scripts/Test/ArmorSoldierScript_States.cs
@@ -0,0 +1,53 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class ArmorSoldierScript : Avatar, IInteractable
+{
+
+ void SetupStates()
+ {
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // states
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ IdleState idle = new IdleState(m_Animator, Anim_Idle);
+
+ HurtState lightHurt = new HurtState(m_Animator, Anim_LightHurt);
+ HurtState midiumHurt = new HurtState(m_Animator, Anim_MidiumHurt);
+ HurtState heavyHurt = new HurtState(m_Animator, Anim_HeavyHurt);
+ HurtState groundHurt = new HurtState(m_Animator, Anim_GroundHurt);
+ HurtState airHurt = new HurtState(m_Animator, Anim_AirHurt);
+ m_StateLightHurt = lightHurt;
+ m_StateMidiumHurt = midiumHurt;
+ m_StateHeavyHurt = heavyHurt;
+ m_StateGroundHurt = groundHurt;
+ m_StateAirHurt = airHurt;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // conditions
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ConditionInAir condInAir = new ConditionInAir(m_BodyCollider);
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // actions
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ActionSwitchState switchToIdle = new ActionSwitchState(m_StateSystem, idle);
+
+ Trigger trigger = null;
+
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // state setup
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // air hurt
+ ConditionMotionAtEnd airAtEnd = new ConditionMotionAtEnd(m_Animator, Anim_AirHurt);
+ trigger = new Trigger(And(airAtEnd, Not(condInAir)), switchToIdle);
+ airHurt.AddTrigger(trigger);
+
+ m_StateSystem.ForceStart(idle);
+ }
+
+} \ No newline at end of file
diff --git a/Assets/Scripts/Test/ArmorSoldierScript_States.cs.meta b/Assets/Scripts/Test/ArmorSoldierScript_States.cs.meta
new file mode 100644
index 00000000..02336b68
--- /dev/null
+++ b/Assets/Scripts/Test/ArmorSoldierScript_States.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f146c570f99fe2e4aad5f1312524413c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs
index e2386350..4e3bf23f 100644
--- a/Assets/Scripts/Test/SaionjiScript.cs
+++ b/Assets/Scripts/Test/SaionjiScript.cs
@@ -24,7 +24,7 @@ public partial class SaionjiScript : Avatar
[SerializeField]
private Weapon m_Weapon;
- public bool EnableAbilitySystem;
+ public bool EnableStateSystem;
public EffectHandler[] Effects;
@@ -45,14 +45,14 @@ public partial class SaionjiScript : Avatar
GetAnimHash();
- if (EnableAbilitySystem)
- SetupAbilities();
+ if (EnableStateSystem)
+ SetupStates();
}
//private void Update()
//{
- // //if (EnableAbilitySystem)
- // // m_AbilitySystem.OnUpdate();
+ // //if (EnableStateSystem)
+ // // m_StateSystem.OnUpdate();
//}
// 更新顺序:
diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_States.cs
index 5fc92f62..68d09280 100644
--- a/Assets/Scripts/Test/SaionjiScript_Ability.cs
+++ b/Assets/Scripts/Test/SaionjiScript_States.cs
@@ -1,405 +1,382 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public partial class SaionjiScript : Avatar
-{
-
- ConditionBase Not(ConditionBase cond)
- {
- return new ConditionNot(cond);
- }
-
- ConditionBase And(ConditionBase c1, ConditionBase c2)
- {
- return new ConditionAnd(c1, c2);
- }
-
- 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;
- }
-
- ConditionBase Or(ConditionBase c1, ConditionBase c2)
- {
- return new ConditionOr(c1,c2);
- }
-
- /// <summary>
- /// 设置abilities
- /// </summary>
- void SetupAbilities()
- {
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // abilities
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- IdleAbility idle = new IdleAbility(animator, Anim_Idle);
-
- MoveAbility move = new MoveAbility(animator, Anim_Run);
- MoveAbility dash = new MoveAbility(animator, Anim_DashWithSword);
-
- JumpAbilityConfig jumpConfig = new JumpAbilityConfig
- {
- animator = animator,
- collider = m_BodyCollider,
- body = m_Body,
- neutralJumpSpeedY = 13f,
- fowardJumpSpeedX = 5f,
- backwardJumpSpeedX = -5f,
- animJump = Anim_JumpStart,
- animJumpEnd = Anim_JumpEnd,
- animNU = Anim_JumpUp,
- animND = Anim_JumpDown,
- animFU = Anim_JumpUp,
- animFD = Anim_JumpDown,
- animBU = Anim_JumpUp,
- animBD = Anim_JumpDown,
- skipStart = true,
- };
- JumpAbility jump = new JumpAbility(jumpConfig);
-
- AttackAbility airDash = new AttackAbility(animator, Anim_AirDash, m_Body);
-
- AttackAbilityConfig config;
-
- //招式会绑定一个motion
- HitDefination hitDef = new HitDefination
- {
- };
- AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1, m_Body);
- attk1.AddHitDefination(hitDef);
- AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2, m_Body);
- attk2.AddHitDefination(hitDef);
- AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3, m_Body);
- attk3.AddHitDefination(hitDef);
- AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4, m_Body);
- attk4.AddHitDefination(hitDef);
- AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5, m_Body);
- attk5.AddHitDefination(hitDef);
- AttackAbility attkRush = new AttackAbility(animator, Anim_LightAttackRush, m_Body);
-
- config = new AttackAbilityConfig() {
- animator = this.animator,
- body = this.m_Body,
- motion = Anim_SideKick,
- velocity = new Vector3(20, 1.5f, 0)
- };
- AttackAbility sideKick = new AttackAbility(config);
-
- AttackAbility sideKickRush = new AttackAbility(animator, Anim_SideKickRush, m_Body);
- AttackAbility superKick = new AttackAbility(animator, Anim_SuperKick, m_Body);
- AttackAbility gun1 = new AttackAbility(animator, Anim_Gun1, m_Body);
- AttackAbility gun2 = new AttackAbility(animator, Anim_Gun2, m_Body);
- AttackAbility gun3 = new AttackAbility(animator, Anim_Gun3, m_Body);
- AttackAbility gun4 = new AttackAbility(animator, Anim_Gun4, m_Body);
-
- AttackAbility airAttk1 = new AttackAbility(animator, Anim_AirAttack1, m_Body);
- hitDef = new HitDefination
- {
- hurtAddForce = new Vector3(1000,2000,0)
- };
- airAttk1.AddHitDefination(hitDef);
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // actions
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ActionTurn180 turn180 = new ActionTurn180(this.transform);
- ActionTowardLeft towardLeft = new ActionTowardLeft(this.transform);
- ActionTowardRight towardRight = new ActionTowardRight(this.transform);
-
- ActionJump toJump = new ActionJump(m_AbilitySystem, jump);
- ActionJumpForward toJumpForward = new ActionJumpForward(m_AbilitySystem, jump);
-
- ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move);
- ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle);
- ActionSwitchAbility switchToAttk1 = new ActionSwitchAbility(m_AbilitySystem, attk1);
- ActionSwitchAbility switchToAttk2 = new ActionSwitchAbility(m_AbilitySystem, attk2);
- ActionSwitchAbility switchToAttk3 = new ActionSwitchAbility(m_AbilitySystem, attk3);
- ActionSwitchAbility switchToAttk4 = new ActionSwitchAbility(m_AbilitySystem, attk4);
- ActionSwitchAbility switchToAttk5 = new ActionSwitchAbility(m_AbilitySystem, attk5);
- ActionSwitchAbility switchToAttkRush = new ActionSwitchAbility(m_AbilitySystem, attkRush);
- ActionSwitchAbility switchToSideKick = new ActionSwitchAbility(m_AbilitySystem, sideKick);
- ActionSwitchAbility switchToSideKickRush = new ActionSwitchAbility(m_AbilitySystem, sideKickRush);
- ActionSwitchAbility switchToDash = new ActionSwitchAbility(m_AbilitySystem, dash);
- ActionSwitchAbility switchToSuperKick = new ActionSwitchAbility(m_AbilitySystem, superKick);
- ActionSwitchAbility switchToGun1 = new ActionSwitchAbility(m_AbilitySystem, gun1);
- ActionSwitchAbility switchToGun2 = new ActionSwitchAbility(m_AbilitySystem, gun2);
- ActionSwitchAbility switchToGun3 = new ActionSwitchAbility(m_AbilitySystem, gun3);
- ActionSwitchAbility switchToGun4 = new ActionSwitchAbility(m_AbilitySystem, gun4);
-
- ActionSwitchAbility switchToAirDash = new ActionSwitchAbility(m_AbilitySystem, airDash);
- ActionSwitchAbility switchToAirAttk1 = new ActionSwitchAbility(m_AbilitySystem, airAttk1);
-
- ActionWipeCmdRecord wipeCmdRecord = new ActionWipeCmdRecord();
-
- ActionEffectGhost enableGhost = new ActionEffectGhost(Effects[0] as CharacterGhostEffect);
- ActionDisableGhost disableGhost = new ActionDisableGhost(Effects[0] as CharacterGhostEffect);
-
- ActionActivateAfterImage enableAfterImage = new ActionActivateAfterImage(true);
- ActionActivateAfterImage disaleAfterImage = new ActionActivateAfterImage(false);
- ActionAfterImageInterval smallAfterImageInterval = new ActionAfterImageInterval(2);
- ActionAfterImageInterval midiumAfterImageInterval = new ActionAfterImageInterval(5);
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // conditions
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- ConditionCommand condLeftCmd = new ConditionCommand(GamepadButton.Left);
- ConditionCommand condRightCmd = new ConditionCommand(GamepadButton.Right);
- ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
- ConditionButtonHold condRightButtonHold = new ConditionButtonHold(GamepadButton.Right);
- ConditionButtonHold condLeftButtonHold = new ConditionButtonHold(GamepadButton.Left);
- ConditionCommand condUpCmd = new ConditionCommand(GamepadButton.Up);
- ConditionCommand condTriangleCmd = new ConditionCommand(GamepadButton.Triangle);
- ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);
- ConditionCommand condCrossCmd = new ConditionCommand(GamepadButton.Cross);
- ConditionCommand condSquareCmd = new ConditionCommand(GamepadButton.Square);
- ConditionTowardLeft condTowardLeft = new ConditionTowardLeft(this.transform);
- ConditionTowardRight condTowardRight = new ConditionTowardRight(this.transform);
- ConditionCommandSeq condRight2Cmd = new ConditionCommandSeq(new List<GamepadButton>{GamepadButton.Right, GamepadButton.Right }, 0.8f);
- ConditionCommandSeq condLeft2Cmd = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Left, GamepadButton.Left }, 0.8f);
- ConditionCommandSeq condDRC = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Down, GamepadButton.Right, GamepadButton.Circle}, 1f);
- ConditionCommandSeq condDLC = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Down, GamepadButton.Left, GamepadButton.Circle}, 1f);
-
- ConditionHit condIsHit = new ConditionHit(this);
-
- ConditionJumpDone condJumpDone = new ConditionJumpDone(jump);
- ConditionJumpOnGround condJumpOnGround = new ConditionJumpOnGround(jump);
-
- ConditionInAir condInAir = new ConditionInAir(m_BodyCollider);
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // common triggers
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- Trigger triggerTurnRight = new Trigger(And(condRightCmd, Not(condTowardRight)), towardRight);
- Trigger triggerTurnLeft = new Trigger(And(condLeftCmd, Not(condTowardLeft)), towardLeft);
-
- Trigger trigger = null;
-
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // ability setup
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
- // idle ability
- trigger = new Trigger(condTriangleCmd, toJump) ;
- idle.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardRight, condDRC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
- idle.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardLeft, condDLC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
- idle.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
- idle.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
- idle.AddTrigger(trigger);
- trigger = new Trigger(condRightButtonHold, new List<ActionBase> { switchToMove, towardRight });
- idle.AddTrigger(trigger);
- trigger = new Trigger(condLeftButtonHold, new List<ActionBase> { switchToMove, towardLeft });
- idle.AddTrigger(trigger);
- trigger = new Trigger(condCircleCmd, switchToAttk1);
- idle.AddTrigger(trigger);
- trigger = new Trigger(condCrossCmd, switchToSideKick);
- idle.AddTrigger(trigger);
- trigger = new Trigger(condSquareCmd, switchToGun1);
- idle.AddTrigger(trigger);
- idle.AddTrigger(triggerTurnRight);
- idle.AddTrigger(triggerTurnLeft);
-
- // move ability
- //trigger = new Trigger(Or(Ands(condRightButtonHold, condTowardRight, condTriangleCmd), Ands(condLeftButtonHold, condTowardLeft, condTriangleCmd)), toJumpForward);
- //move.AddTrigger(trigger);
- trigger = new Trigger(condTriangleCmd, toJump);
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash, });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condRightButtonHold, condCircleCmd), new List<ActionBase> { towardRight, switchToAttkRush });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condLeftButtonHold, condCircleCmd), new List<ActionBase> { towardLeft, switchToAttkRush });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condRightButtonHold, condCrossCmd), new List<ActionBase> { towardRight, switchToSideKickRush });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condLeftButtonHold, condCrossCmd), new List<ActionBase> { towardLeft, switchToSideKickRush });
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardRight, Not(condRightButtonHold)), switchToIdle);
- move.AddTrigger(trigger);
- trigger = new Trigger(And(condTowardLeft, Not(condLeftButtonHold)), switchToIdle);
- move.AddTrigger(trigger);
- trigger = new Trigger(condCircleCmd, switchToAttk1);
- move.AddTrigger(trigger);
- trigger = new Trigger(condCrossCmd, switchToSideKick);
- move.AddTrigger(trigger);
-
- // jump ability
- trigger = new Trigger(Ands(condInAir, condRightCmd, condRight2Cmd), new List<ActionBase> { towardRight, switchToAirDash, new ActionSetVelocity(m_Body, new Vector3(25, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, midiumAfterImageInterval});
- jump.AddTrigger(trigger);
- trigger = new Trigger(Ands(condInAir, condLeftCmd, condLeft2Cmd), new List<ActionBase> { towardLeft, switchToAirDash, new ActionSetVelocity(m_Body, new Vector3(-25, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, midiumAfterImageInterval });
- jump.AddTrigger(trigger);
- trigger = new Trigger(Ands(condInAir, condCircleCmd), new List<ActionBase> { switchToAirAttk1, new ActionSetLocalVelocity(m_Body, new Vector3(0, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, smallAfterImageInterval});
- jump.AddTrigger(trigger);
- ConditionCheckJumpState condCheckJump = new ConditionCheckJumpState(jump, JumpAbility.State.None, JumpAbility.Direction.Neutral);
- trigger = new Trigger(And(condRightButtonHold, condCheckJump), new List<ActionBase> { towardRight, new ActionSetVelocityX(m_Body, 4)}, TriggerOnlyOnce.Off, TriggerSwallow.Off);
- jump.AddTrigger(trigger);
- trigger = new Trigger(And(condLeftButtonHold, condCheckJump), new List<ActionBase> { towardLeft, new ActionSetVelocityX(m_Body,-4) }, TriggerOnlyOnce.Off, TriggerSwallow.Off);
- jump.AddTrigger(trigger);
- //trigger = new Trigger(Ands(condCheckJump, Not(condRightButtonHold), Not(condLeftButtonHold)), new ActionSetVelocityX(m_Body, 0), TriggerOnlyOnce.Off, TriggerSwallow.Off);
- //jump.AddTrigger(trigger);
- trigger = new Trigger(condJumpOnGround, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
- jump.AddTrigger(trigger);
- trigger = new Trigger(Ands(new ConditionJumpDone(jump, 0.4f), condJumpOnGround, Or(condRightButtonHold, condLeftButtonHold)), switchToMove);
- jump.AddTrigger(trigger);
- trigger = new Trigger(condJumpDone, switchToIdle);
- jump.AddTrigger(trigger);
-
- // dash ability
- trigger = new Trigger(And(new ConditionMotionRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1);
- dash.AddTrigger(trigger);
- trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_DashWithSword), switchToIdle);
- dash.AddTrigger(trigger);
-
- // attack abilities
- float expireTime = 0.3f;
-
- // sword normal attack
- ConditionMotionAtEnd condAttk1AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack1);
- trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2);
- attk1.AddTrigger(trigger);
- ConditionAttkExpireTime condAttk1ExpireTime = new ConditionAttkExpireTime(attk1, expireTime);
- trigger = new Trigger(condAttk1ExpireTime, switchToIdle);
- attk1.AddTrigger(trigger);
- attk1.AddTrigger(triggerTurnRight);
- attk1.AddTrigger(triggerTurnLeft);
- //trigger = new Trigger(condIsHit, new ActionLog("hit!!!"));
- //attk1.AddLateTrigger(trigger);
-
- //ConditionMotionRange condAttkRushGhostRange = new ConditionMotionRange(animator, 0f, 0.8f);
- //trigger = new Trigger(condAttkRushGhostRange, enableGhost, false);
- //attkRush.AddTrigger(trigger);
- //ConditionMotionRange condAttkRushGhostDisableRange = new ConditionMotionRange(animator, 0.8f, 10f);
- //trigger = new Trigger(condAttkRushGhostDisableRange, disableGhost, false);
- //attkRush.AddTrigger(trigger);
- ConditionMotionRange condAttkRushAtRange = new ConditionMotionRange(animator, 0.5f, 1f);
- trigger = new Trigger(And(condAttkRushAtRange, condCircleCmd), switchToAttk2);
- attkRush.AddTrigger(trigger);
- //trigger = new Trigger(And(And(condAttkRushAtRange, condTowardRight), condRightCmd), switchToAttkRush);
- //attkRush.AddTrigger(trigger);
- //trigger = new Trigger(And(And(condAttkRushAtRange, condTowardLeft), condLeftCmd), switchToAttkRush);
- //attkRush.AddTrigger(trigger);
- ConditionAttkExpireTime condAttkRushExpireTime = new ConditionAttkExpireTime(attkRush, expireTime);
- trigger = new Trigger(condAttkRushExpireTime, switchToIdle);
- attkRush.AddTrigger(trigger);
- //attkRush.AddTrigger(triggerTurnRight);
- //attkRush.AddTrigger(triggerTurnLeft);
-
- ConditionMotionAtEnd condAttk2AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack2);
- trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3);
- attk2.AddTrigger(trigger);
- ConditionAttkExpireTime condAttk2ExpireTime = new ConditionAttkExpireTime(attk2, expireTime);
- trigger = new Trigger(condAttk2ExpireTime, switchToIdle);
- attk2.AddTrigger(trigger);
- attk2.AddTrigger(triggerTurnRight);
- attk2.AddTrigger(triggerTurnLeft);
-
- ConditionMotionAtEnd condAttk3AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack3);
- trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4);
- attk3.AddTrigger(trigger);
- ConditionAttkExpireTime condAttk3ExpireTime = new ConditionAttkExpireTime(attk3, expireTime);
- trigger = new Trigger(condAttk3ExpireTime, switchToIdle);
- attk3.AddTrigger(trigger);
- attk3.AddTrigger(triggerTurnRight);
- attk3.AddTrigger(triggerTurnLeft);
-
- ConditionMotionAtEnd condAttk4AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack4);
- trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5);
- attk4.AddTrigger(trigger);
- ConditionAttkExpireTime condAttk4ExpireTime = new ConditionAttkExpireTime(attk4, expireTime);
- trigger = new Trigger(condAttk4ExpireTime, switchToIdle);
- attk4.AddTrigger(trigger);
- attk4.AddTrigger(triggerTurnRight);
- attk4.AddTrigger(triggerTurnLeft);
-
- ConditionMotionAtEnd condAttk5AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack5);
- trigger = new Trigger(condAttk5AtEnd, switchToIdle);
- attk5.AddTrigger(trigger);
- ConditionAttkExpireTime condAttk5ExpireTime = new ConditionAttkExpireTime(attk5, expireTime);
- trigger = new Trigger(condAttk5ExpireTime, switchToIdle);
- attk5.AddTrigger(trigger);
- attk5.AddTrigger(triggerTurnRight);
- attk5.AddTrigger(triggerTurnLeft);
-
- // side kick normal
- ConditionMotionAtEnd condKickMotionEnd = new ConditionMotionAtEnd(animator, Anim_SideKick);
- trigger = new Trigger(condKickMotionEnd, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
- sideKick.AddTrigger(trigger);
- ConditionAttkExpireTime condSideKickExpireTime = new ConditionAttkExpireTime(sideKick, expireTime);
- trigger = new Trigger(condSideKickExpireTime, switchToIdle);
- sideKick.AddTrigger(trigger);
-
- // side kick rush
- ConditionAttkExpireTime condSideKickRushExpireTime = new ConditionAttkExpireTime(sideKickRush, expireTime);
- trigger = new Trigger(condSideKickRushExpireTime, switchToIdle);
- sideKickRush.AddTrigger(trigger);
- ConditionMotionRange condSideKickRushMotionRange = new ConditionMotionRange(animator, 0.5f, 10f);
- trigger = new Trigger(And(condSideKickRushMotionRange, And(condRightButtonHold, condCircleCmd)), new List<ActionBase> { towardRight, switchToAttkRush });
- sideKickRush.AddTrigger(trigger);
- trigger = new Trigger(And(condSideKickRushMotionRange, And(condLeftButtonHold, condCircleCmd)), new List<ActionBase> { towardLeft, switchToAttkRush });
- sideKickRush.AddTrigger(trigger);
-
- // super kick combo
- ConditionAttkExpireTime condSuperKickExpireTime = new ConditionAttkExpireTime(superKick, expireTime);
- trigger = new Trigger(condSuperKickExpireTime, switchToIdle);
- superKick.AddTrigger(trigger);
-
- // gun normal
- ConditionMotionAtEnd condGun1AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun1);
- trigger = new Trigger(And(condGun1AtEnd, condSquareCmd), switchToGun2);
- gun1.AddTrigger(trigger);
- ConditionAttkExpireTime condGun1ExpireTime = new ConditionAttkExpireTime(gun1, expireTime);
- trigger = new Trigger(condGun1ExpireTime, switchToIdle);
- gun1.AddTrigger(trigger);
-
- ConditionMotionAtEnd condGun2AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun2);
- trigger = new Trigger(And(condGun2AtEnd, condSquareCmd), switchToGun3);
- gun2.AddTrigger(trigger);
- ConditionAttkExpireTime condGun2ExpireTime = new ConditionAttkExpireTime(gun2, expireTime);
- trigger = new Trigger(condGun2ExpireTime, switchToIdle);
- gun2.AddTrigger(trigger);
-
- ConditionMotionAtEnd condGun3AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun3);
- trigger = new Trigger(And(condGun3AtEnd, condSquareCmd), switchToGun4);
- gun3.AddTrigger(trigger);
- ConditionAttkExpireTime condGun3ExpireTime = new ConditionAttkExpireTime(gun3, expireTime);
- trigger = new Trigger(condGun3ExpireTime, switchToIdle);
- gun3.AddTrigger(trigger);
-
- ConditionAttkExpireTime condGun4ExpireTime = new ConditionAttkExpireTime(gun4, expireTime);
- trigger = new Trigger(condGun4ExpireTime, switchToIdle);
- gun4.AddTrigger(trigger);
- ConditionMotionRange condGun4MotionRange = new ConditionMotionRange(animator, 0.6f, 1f);
- trigger = new Trigger(And(condGun4MotionRange, condRight2Cmd), new List<ActionBase> { switchToDash, towardRight });
- gun4.AddTrigger(trigger);
- trigger = new Trigger(And(condGun4MotionRange, condLeft2Cmd), new List<ActionBase> { switchToDash, towardLeft });
- gun4.AddTrigger(trigger);
-
- // air dash
- trigger = new Trigger(new ConditionMotionRange(animator, 0.8f, 1f), disaleAfterImage, TriggerOnlyOnce.On, TriggerSwallow.Off);
- airDash.AddTrigger(trigger);
- trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_AirDash), new List<ActionBase> { new ActionSetVelocity(m_Body, Vector3.zero), new ActionUseGravity(m_Body), toJump });
- airDash.AddTrigger(trigger);
-
- trigger = new Trigger(new ConditionMotionRange(animator, 0.18f, 1f), new ActionPlayEffect("Air_Attk1", this, new Vector3(-136.805f, 0, 0), new Vector3(0.8f, 0.8f, 0.8f)), TriggerOnlyOnce.On, TriggerSwallow.Off);
- airAttk1.AddTrigger(trigger);
- trigger = new Trigger(new ConditionMotionRange(animator, 0.6f,1f), disaleAfterImage, TriggerOnlyOnce.On, TriggerSwallow.Off);
- airAttk1.AddTrigger(trigger);
- trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_AirAttack1), new List<ActionBase> { new ActionSetVelocity(m_Body, Vector3.zero), new ActionUseGravity(m_Body), toJump});
- airAttk1.AddTrigger(trigger);
-
- m_AbilitySystem.ForceStart(idle);
- }
-
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class SaionjiScript : Avatar
+{
+
+ /// <summary>
+ /// 设置states
+ /// </summary>
+ void SetupStates()
+ {
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // states
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ IdleState idle = new IdleState(animator, Anim_Idle);
+
+ MoveState move = new MoveState(animator, Anim_Run);
+ MoveState dash = new MoveState(animator, Anim_DashWithSword);
+
+ JumpStateConfig jumpConfig = new JumpStateConfig
+ {
+ animator = animator,
+ collider = m_BodyCollider,
+ body = m_Body,
+ neutralJumpSpeedY = 13f,
+ fowardJumpSpeedX = 5f,
+ backwardJumpSpeedX = -5f,
+ animJump = Anim_JumpStart,
+ animJumpEnd = Anim_JumpEnd,
+ animNU = Anim_JumpUp,
+ animND = Anim_JumpDown,
+ animFU = Anim_JumpUp,
+ animFD = Anim_JumpDown,
+ animBU = Anim_JumpUp,
+ animBD = Anim_JumpDown,
+ skipStart = true,
+ };
+ JumpState jump = new JumpState(jumpConfig);
+
+ AttackState airDash = new AttackState(animator, Anim_AirDash, m_Body);
+
+ AttackStateConfig config;
+
+ //招式会绑定一个motion
+ HitDefination hitDef = new HitDefination
+ {
+ type = HitType.Air,
+ hurtAddForce = new Vector3(0, 10000, 0)
+ };
+ AttackState attk1 = new AttackState(animator, Anim_LightAttack1, m_Body);
+ attk1.AddHitDefination(hitDef);
+ AttackState attk2 = new AttackState(animator, Anim_LightAttack2, m_Body);
+ attk2.AddHitDefination(hitDef);
+ AttackState attk3 = new AttackState(animator, Anim_LightAttack3, m_Body);
+ attk3.AddHitDefination(hitDef);
+ AttackState attk4 = new AttackState(animator, Anim_LightAttack4, m_Body);
+ attk4.AddHitDefination(hitDef);
+ AttackState attk5 = new AttackState(animator, Anim_LightAttack5, m_Body);
+ attk5.AddHitDefination(hitDef);
+ AttackState attkRush = new AttackState(animator, Anim_LightAttackRush, m_Body);
+
+ config = new AttackStateConfig() {
+ animator = this.animator,
+ body = this.m_Body,
+ motion = Anim_SideKick,
+ velocity = new Vector3(20, 1.5f, 0)
+ };
+ AttackState sideKick = new AttackState(config);
+
+ AttackState sideKickRush = new AttackState(animator, Anim_SideKickRush, m_Body);
+ AttackState superKick = new AttackState(animator, Anim_SuperKick, m_Body);
+ AttackState gun1 = new AttackState(animator, Anim_Gun1, m_Body);
+ AttackState gun2 = new AttackState(animator, Anim_Gun2, m_Body);
+ AttackState gun3 = new AttackState(animator, Anim_Gun3, m_Body);
+ AttackState gun4 = new AttackState(animator, Anim_Gun4, m_Body);
+
+ AttackState airAttk1 = new AttackState(animator, Anim_AirAttack1, m_Body);
+ hitDef = new HitDefination
+ {
+ type = HitType.Air,
+ hurtAddForce = new Vector3(0,5000,0)
+ };
+ airAttk1.AddHitDefination(hitDef);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // actions
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ActionTurn180 turn180 = new ActionTurn180(this.transform);
+ ActionTowardLeft towardLeft = new ActionTowardLeft(this.transform);
+ ActionTowardRight towardRight = new ActionTowardRight(this.transform);
+
+ ActionJump toJump = new ActionJump(m_StateSystem, jump);
+ ActionJumpForward toJumpForward = new ActionJumpForward(m_StateSystem, jump);
+
+ ActionSwitchState switchToMove = new ActionSwitchState(m_StateSystem, move);
+ ActionSwitchState switchToIdle = new ActionSwitchState(m_StateSystem, idle);
+ ActionSwitchState switchToAttk1 = new ActionSwitchState(m_StateSystem, attk1);
+ ActionSwitchState switchToAttk2 = new ActionSwitchState(m_StateSystem, attk2);
+ ActionSwitchState switchToAttk3 = new ActionSwitchState(m_StateSystem, attk3);
+ ActionSwitchState switchToAttk4 = new ActionSwitchState(m_StateSystem, attk4);
+ ActionSwitchState switchToAttk5 = new ActionSwitchState(m_StateSystem, attk5);
+ ActionSwitchState switchToAttkRush = new ActionSwitchState(m_StateSystem, attkRush);
+ ActionSwitchState switchToSideKick = new ActionSwitchState(m_StateSystem, sideKick);
+ ActionSwitchState switchToSideKickRush = new ActionSwitchState(m_StateSystem, sideKickRush);
+ ActionSwitchState switchToDash = new ActionSwitchState(m_StateSystem, dash);
+ ActionSwitchState switchToSuperKick = new ActionSwitchState(m_StateSystem, superKick);
+ ActionSwitchState switchToGun1 = new ActionSwitchState(m_StateSystem, gun1);
+ ActionSwitchState switchToGun2 = new ActionSwitchState(m_StateSystem, gun2);
+ ActionSwitchState switchToGun3 = new ActionSwitchState(m_StateSystem, gun3);
+ ActionSwitchState switchToGun4 = new ActionSwitchState(m_StateSystem, gun4);
+
+ ActionSwitchState switchToAirDash = new ActionSwitchState(m_StateSystem, airDash);
+ ActionSwitchState switchToAirAttk1 = new ActionSwitchState(m_StateSystem, airAttk1);
+
+ ActionWipeCmdRecord wipeCmdRecord = new ActionWipeCmdRecord();
+
+ ActionEffectGhost enableGhost = new ActionEffectGhost(Effects[0] as CharacterGhostEffect);
+ ActionDisableGhost disableGhost = new ActionDisableGhost(Effects[0] as CharacterGhostEffect);
+
+ ActionActivateAfterImage enableAfterImage = new ActionActivateAfterImage(true);
+ ActionActivateAfterImage disaleAfterImage = new ActionActivateAfterImage(false);
+ ActionAfterImageInterval smallAfterImageInterval = new ActionAfterImageInterval(2);
+ ActionAfterImageInterval midiumAfterImageInterval = new ActionAfterImageInterval(5);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // conditions
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ ConditionCommand condLeftCmd = new ConditionCommand(GamepadButton.Left);
+ ConditionCommand condRightCmd = new ConditionCommand(GamepadButton.Right);
+ ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
+ ConditionButtonHold condRightButtonHold = new ConditionButtonHold(GamepadButton.Right);
+ ConditionButtonHold condLeftButtonHold = new ConditionButtonHold(GamepadButton.Left);
+ ConditionCommand condUpCmd = new ConditionCommand(GamepadButton.Up);
+ ConditionCommand condTriangleCmd = new ConditionCommand(GamepadButton.Triangle);
+ ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);
+ ConditionCommand condCrossCmd = new ConditionCommand(GamepadButton.Cross);
+ ConditionCommand condSquareCmd = new ConditionCommand(GamepadButton.Square);
+ ConditionTowardLeft condTowardLeft = new ConditionTowardLeft(this.transform);
+ ConditionTowardRight condTowardRight = new ConditionTowardRight(this.transform);
+ ConditionCommandSeq condRight2Cmd = new ConditionCommandSeq(new List<GamepadButton>{GamepadButton.Right, GamepadButton.Right }, 0.8f);
+ ConditionCommandSeq condLeft2Cmd = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Left, GamepadButton.Left }, 0.8f);
+ ConditionCommandSeq condDRC = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Down, GamepadButton.Right, GamepadButton.Circle}, 1f);
+ ConditionCommandSeq condDLC = new ConditionCommandSeq(new List<GamepadButton> { GamepadButton.Down, GamepadButton.Left, GamepadButton.Circle}, 1f);
+
+ ConditionHit condIsHit = new ConditionHit(this);
+
+ ConditionJumpDone condJumpDone = new ConditionJumpDone(jump);
+ ConditionJumpOnGround condJumpOnGround = new ConditionJumpOnGround(jump);
+
+ ConditionInAir condInAir = new ConditionInAir(m_BodyCollider);
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // common triggers
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ Trigger triggerTurnRight = new Trigger(And(condRightCmd, Not(condTowardRight)), towardRight);
+ Trigger triggerTurnLeft = new Trigger(And(condLeftCmd, Not(condTowardLeft)), towardLeft);
+
+ Trigger trigger = null;
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // state setup
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ // idle state
+ trigger = new Trigger(condTriangleCmd, toJump) ;
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardRight, condDRC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, condDLC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condRightButtonHold, new List<ActionBase> { switchToMove, towardRight });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condLeftButtonHold, new List<ActionBase> { switchToMove, towardLeft });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condCircleCmd, switchToAttk1);
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condCrossCmd, switchToSideKick);
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condSquareCmd, switchToGun1);
+ idle.AddTrigger(trigger);
+ idle.AddTrigger(triggerTurnRight);
+ idle.AddTrigger(triggerTurnLeft);
+
+ // move state
+ //trigger = new Trigger(Or(Ands(condRightButtonHold, condTowardRight, condTriangleCmd), Ands(condLeftButtonHold, condTowardLeft, condTriangleCmd)), toJumpForward);
+ //move.AddTrigger(trigger);
+ trigger = new Trigger(condTriangleCmd, toJump);
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash, });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condRightButtonHold, condCircleCmd), new List<ActionBase> { towardRight, switchToAttkRush });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condLeftButtonHold, condCircleCmd), new List<ActionBase> { towardLeft, switchToAttkRush });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condRightButtonHold, condCrossCmd), new List<ActionBase> { towardRight, switchToSideKickRush });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condLeftButtonHold, condCrossCmd), new List<ActionBase> { towardLeft, switchToSideKickRush });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardRight, Not(condRightButtonHold)), switchToIdle);
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, Not(condLeftButtonHold)), switchToIdle);
+ move.AddTrigger(trigger);
+ trigger = new Trigger(condCircleCmd, switchToAttk1);
+ move.AddTrigger(trigger);
+ trigger = new Trigger(condCrossCmd, switchToSideKick);
+ move.AddTrigger(trigger);
+
+ // jump state
+ trigger = new Trigger(condJumpOnGround, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(Ands(condInAir, condRightCmd, condRight2Cmd), new List<ActionBase> { towardRight, switchToAirDash, new ActionSetVelocity(m_Body, new Vector3(25, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, midiumAfterImageInterval});
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(Ands(condInAir, condLeftCmd, condLeft2Cmd), new List<ActionBase> { towardLeft, switchToAirDash, new ActionSetVelocity(m_Body, new Vector3(-25, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, midiumAfterImageInterval });
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(Ands(condInAir, condCircleCmd), new List<ActionBase> { switchToAirAttk1, new ActionSetLocalVelocity(m_Body, new Vector3(0, 0, 0)), new ActionDontUseGravity(m_Body), enableAfterImage, smallAfterImageInterval});
+ jump.AddTrigger(trigger);
+ ConditionCheckJumpState condCheckJump = new ConditionCheckJumpState(jump, JumpState.Stage.None, JumpState.Direction.Neutral);
+ trigger = new Trigger(And(condRightButtonHold, condCheckJump), new List<ActionBase> { towardRight, new ActionSetVelocityX(m_Body, 4)}, TriggerOnlyOnce.Off, TriggerSwallow.Off);
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(And(condLeftButtonHold, condCheckJump), new List<ActionBase> { towardLeft, new ActionSetVelocityX(m_Body,-4) }, TriggerOnlyOnce.Off, TriggerSwallow.Off);
+ jump.AddTrigger(trigger);
+ //trigger = new Trigger(Ands(condCheckJump, Not(condRightButtonHold), Not(condLeftButtonHold)), new ActionSetVelocityX(m_Body, 0), TriggerOnlyOnce.Off, TriggerSwallow.Off);
+ //jump.AddTrigger(trigger);
+ trigger = new Trigger(Ands(new ConditionJumpDone(jump, 0.4f), condJumpOnGround, Or(condRightButtonHold, condLeftButtonHold)), switchToMove);
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(condJumpDone, switchToIdle);
+ jump.AddTrigger(trigger);
+
+ // dash state
+ trigger = new Trigger(And(new ConditionMotionRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1);
+ dash.AddTrigger(trigger);
+ trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_DashWithSword), switchToIdle);
+ dash.AddTrigger(trigger);
+
+ // attack states
+ float expireTime = 0.3f;
+
+ // sword normal attack
+ ConditionMotionAtEnd condAttk1AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack1);
+ trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2);
+ attk1.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttk1ExpireTime = new ConditionAttkExpireTime(attk1, expireTime);
+ trigger = new Trigger(condAttk1ExpireTime, switchToIdle);
+ attk1.AddTrigger(trigger);
+ attk1.AddTrigger(triggerTurnRight);
+ attk1.AddTrigger(triggerTurnLeft);
+ //trigger = new Trigger(condIsHit, new ActionLog("hit!!!"));
+ //attk1.AddLateTrigger(trigger);
+
+ //ConditionMotionRange condAttkRushGhostRange = new ConditionMotionRange(animator, 0f, 0.8f);
+ //trigger = new Trigger(condAttkRushGhostRange, enableGhost, false);
+ //attkRush.AddTrigger(trigger);
+ //ConditionMotionRange condAttkRushGhostDisableRange = new ConditionMotionRange(animator, 0.8f, 10f);
+ //trigger = new Trigger(condAttkRushGhostDisableRange, disableGhost, false);
+ //attkRush.AddTrigger(trigger);
+ ConditionMotionRange condAttkRushAtRange = new ConditionMotionRange(animator, 0.5f, 1f);
+ trigger = new Trigger(And(condAttkRushAtRange, condCircleCmd), switchToAttk2);
+ attkRush.AddTrigger(trigger);
+ //trigger = new Trigger(And(And(condAttkRushAtRange, condTowardRight), condRightCmd), switchToAttkRush);
+ //attkRush.AddTrigger(trigger);
+ //trigger = new Trigger(And(And(condAttkRushAtRange, condTowardLeft), condLeftCmd), switchToAttkRush);
+ //attkRush.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttkRushExpireTime = new ConditionAttkExpireTime(attkRush, expireTime);
+ trigger = new Trigger(condAttkRushExpireTime, switchToIdle);
+ attkRush.AddTrigger(trigger);
+ //attkRush.AddTrigger(triggerTurnRight);
+ //attkRush.AddTrigger(triggerTurnLeft);
+
+ ConditionMotionAtEnd condAttk2AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack2);
+ trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3);
+ attk2.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttk2ExpireTime = new ConditionAttkExpireTime(attk2, expireTime);
+ trigger = new Trigger(condAttk2ExpireTime, switchToIdle);
+ attk2.AddTrigger(trigger);
+ attk2.AddTrigger(triggerTurnRight);
+ attk2.AddTrigger(triggerTurnLeft);
+
+ ConditionMotionAtEnd condAttk3AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack3);
+ trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4);
+ attk3.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttk3ExpireTime = new ConditionAttkExpireTime(attk3, expireTime);
+ trigger = new Trigger(condAttk3ExpireTime, switchToIdle);
+ attk3.AddTrigger(trigger);
+ attk3.AddTrigger(triggerTurnRight);
+ attk3.AddTrigger(triggerTurnLeft);
+
+ ConditionMotionAtEnd condAttk4AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack4);
+ trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5);
+ attk4.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttk4ExpireTime = new ConditionAttkExpireTime(attk4, expireTime);
+ trigger = new Trigger(condAttk4ExpireTime, switchToIdle);
+ attk4.AddTrigger(trigger);
+ attk4.AddTrigger(triggerTurnRight);
+ attk4.AddTrigger(triggerTurnLeft);
+
+ ConditionMotionAtEnd condAttk5AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack5);
+ trigger = new Trigger(condAttk5AtEnd, switchToIdle);
+ attk5.AddTrigger(trigger);
+ ConditionAttkExpireTime condAttk5ExpireTime = new ConditionAttkExpireTime(attk5, expireTime);
+ trigger = new Trigger(condAttk5ExpireTime, switchToIdle);
+ attk5.AddTrigger(trigger);
+ attk5.AddTrigger(triggerTurnRight);
+ attk5.AddTrigger(triggerTurnLeft);
+
+ // side kick normal
+ ConditionMotionAtEnd condKickMotionEnd = new ConditionMotionAtEnd(animator, Anim_SideKick);
+ trigger = new Trigger(condKickMotionEnd, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
+ sideKick.AddTrigger(trigger);
+ ConditionAttkExpireTime condSideKickExpireTime = new ConditionAttkExpireTime(sideKick, expireTime);
+ trigger = new Trigger(condSideKickExpireTime, switchToIdle);
+ sideKick.AddTrigger(trigger);
+
+ // side kick rush
+ ConditionAttkExpireTime condSideKickRushExpireTime = new ConditionAttkExpireTime(sideKickRush, expireTime);
+ trigger = new Trigger(condSideKickRushExpireTime, switchToIdle);
+ sideKickRush.AddTrigger(trigger);
+ ConditionMotionRange condSideKickRushMotionRange = new ConditionMotionRange(animator, 0.5f, 10f);
+ trigger = new Trigger(And(condSideKickRushMotionRange, And(condRightButtonHold, condCircleCmd)), new List<ActionBase> { towardRight, switchToAttkRush });
+ sideKickRush.AddTrigger(trigger);
+ trigger = new Trigger(And(condSideKickRushMotionRange, And(condLeftButtonHold, condCircleCmd)), new List<ActionBase> { towardLeft, switchToAttkRush });
+ sideKickRush.AddTrigger(trigger);
+
+ // super kick combo
+ ConditionAttkExpireTime condSuperKickExpireTime = new ConditionAttkExpireTime(superKick, expireTime);
+ trigger = new Trigger(condSuperKickExpireTime, switchToIdle);
+ superKick.AddTrigger(trigger);
+
+ // gun normal
+ ConditionMotionAtEnd condGun1AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun1);
+ trigger = new Trigger(And(condGun1AtEnd, condSquareCmd), switchToGun2);
+ gun1.AddTrigger(trigger);
+ ConditionAttkExpireTime condGun1ExpireTime = new ConditionAttkExpireTime(gun1, expireTime);
+ trigger = new Trigger(condGun1ExpireTime, switchToIdle);
+ gun1.AddTrigger(trigger);
+
+ ConditionMotionAtEnd condGun2AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun2);
+ trigger = new Trigger(And(condGun2AtEnd, condSquareCmd), switchToGun3);
+ gun2.AddTrigger(trigger);
+ ConditionAttkExpireTime condGun2ExpireTime = new ConditionAttkExpireTime(gun2, expireTime);
+ trigger = new Trigger(condGun2ExpireTime, switchToIdle);
+ gun2.AddTrigger(trigger);
+
+ ConditionMotionAtEnd condGun3AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun3);
+ trigger = new Trigger(And(condGun3AtEnd, condSquareCmd), switchToGun4);
+ gun3.AddTrigger(trigger);
+ ConditionAttkExpireTime condGun3ExpireTime = new ConditionAttkExpireTime(gun3, expireTime);
+ trigger = new Trigger(condGun3ExpireTime, switchToIdle);
+ gun3.AddTrigger(trigger);
+
+ ConditionAttkExpireTime condGun4ExpireTime = new ConditionAttkExpireTime(gun4, expireTime);
+ trigger = new Trigger(condGun4ExpireTime, switchToIdle);
+ gun4.AddTrigger(trigger);
+ ConditionMotionRange condGun4MotionRange = new ConditionMotionRange(animator, 0.6f, 1f);
+ trigger = new Trigger(And(condGun4MotionRange, condRight2Cmd), new List<ActionBase> { switchToDash, towardRight });
+ gun4.AddTrigger(trigger);
+ trigger = new Trigger(And(condGun4MotionRange, condLeft2Cmd), new List<ActionBase> { switchToDash, towardLeft });
+ gun4.AddTrigger(trigger);
+
+ // air dash
+ trigger = new Trigger(new ConditionMotionRange(animator, 0.8f, 1f), disaleAfterImage, TriggerOnlyOnce.On, TriggerSwallow.Off);
+ airDash.AddTrigger(trigger);
+ trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_AirDash), new List<ActionBase> { new ActionSetVelocity(m_Body, Vector3.zero), new ActionUseGravity(m_Body), toJump });
+ airDash.AddTrigger(trigger);
+
+ trigger = new Trigger(new ConditionMotionRange(animator, 0.18f, 1f), new ActionPlayEffect("Air_Attk1", this, new Vector3(-136.805f, 0, 0), new Vector3(0.8f, 0.8f, 0.8f)), TriggerOnlyOnce.On, TriggerSwallow.Off);
+ airAttk1.AddTrigger(trigger);
+ trigger = new Trigger(new ConditionMotionRange(animator, 0.6f,1f), disaleAfterImage, TriggerOnlyOnce.On, TriggerSwallow.Off);
+ airAttk1.AddTrigger(trigger);
+ trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_AirAttack1), new List<ActionBase> { new ActionSetVelocity(m_Body, Vector3.zero), new ActionUseGravity(m_Body), toJump});
+ airAttk1.AddTrigger(trigger);
+
+ m_StateSystem.ForceStart(idle);
+ }
+
} \ No newline at end of file
diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs.meta b/Assets/Scripts/Test/SaionjiScript_States.cs.meta
index 10e51e09..10e51e09 100644
--- a/Assets/Scripts/Test/SaionjiScript_Ability.cs.meta
+++ b/Assets/Scripts/Test/SaionjiScript_States.cs.meta
diff --git a/Assets/Scripts/Test/SaionjiUberAbility.cs b/Assets/Scripts/Test/SaionjiUberAbility.cs
index b1f39938..aef538a2 100644
--- a/Assets/Scripts/Test/SaionjiUberAbility.cs
+++ b/Assets/Scripts/Test/SaionjiUberAbility.cs
@@ -2,15 +2,15 @@
using System.Collections.Generic;
using UnityEngine;
-public class SaionjiUberAbility : UberAbility
+public class SaionjiUberState : UberState
{
Avatar m_Avatar;
- AbilitySystem m_AbilitySystem;
+ StateSystem m_StateSystem;
- public SaionjiUberAbility(Avatar avatar, AbilitySystem system)
+ public SaionjiUberState(Avatar avatar, StateSystem system)
{
m_Avatar = avatar;
- m_AbilitySystem = system;
+ m_StateSystem = system;
}
public override void OnUpdate()