From f325841eff10ae492ce6c634d4b07cf058a068c6 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 16 Nov 2020 08:30:54 +0800 Subject: *state system --- Assets/Scripts/Avatar/Avatar.cs | 51 +++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 12 deletions(-) (limited to 'Assets/Scripts/Avatar/Avatar.cs') 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 conditions = new List(); + 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); + } + } -- cgit v1.1-26-g67d0