From fee35151213939d61d2dbd9d6a0ba71ac93b91cf Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 17 Oct 2020 15:39:34 +0800 Subject: =?UTF-8?q?+=20=E8=BF=9E=E5=87=BB=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AbilitySystem/Abilities/AttackAbility.cs | 65 ++++++++++++++++++++-- .../Scripts/AbilitySystem/Abilities/IdleAbility.cs | 22 +++++--- .../Scripts/AbilitySystem/Abilities/MoveAbility.cs | 22 ++++++-- Assets/Scripts/AbilitySystem/AbilitySystem.cs | 12 +++- .../AbilitySystem/Actions/ActionSwitchAbility.cs | 20 +++++++ .../Actions/ActionSwitchAbility.cs.meta | 11 ++++ .../AbilitySystem/Conditions/ConditionAnimAtEnd.cs | 2 +- .../AbilitySystem/Conditions/ConditionAnimRange.cs | 9 ++- .../Conditions/ConditionButtonHold.cs | 18 ++++++ .../Conditions/ConditionButtonHold.cs.meta | 11 ++++ .../AbilitySystem/Conditions/ConditionCommand.cs | 4 +- .../Conditions/ConditionCommandSeq.cs | 2 +- .../Conditions/ConditionMoveButtonHold.cs | 18 ++++++ .../Conditions/ConditionMoveButtonHold.cs.meta | 11 ++++ .../Conditions/ConditionNoMoveButtonHold.cs | 16 ++++++ .../Conditions/ConditionNoMoveButtonHold.cs.meta | 11 ++++ Assets/Scripts/AbilitySystem/Trigger.cs | 27 +++++---- 17 files changed, 243 insertions(+), 38 deletions(-) create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs create mode 100644 Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs create mode 100644 Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta (limited to 'Assets/Scripts/AbilitySystem') diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs index 6732cf57..067d49a8 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs @@ -2,12 +2,67 @@ using System.Collections.Generic; using UnityEngine; -/// -/// 单个招式ability -/// -public class AttackAbilityBase : AbilityBase +public class AttackAbility : AbilityBase { - // 攻击ability默认都会回到idle + Animator m_Animator; + int m_AnimHash; + /// + /// 在跑动状态时可以切换的ability + /// + private List m_Triggers = new List(); + + public AttackAbility(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.CrossFade(m_AnimHash, 0); + } + + public override void OnExit() + { + } + + public override void OnHit() + { + } + + public override void OnHurt() + { + } + + public override void OnTranslate(AbilityBase to) + { + } + + public override void OnUpdate() + { + foreach (var abilityTrigger in m_Triggers) + { + if (abilityTrigger.Update()) + break; + } + } + + public void AddTrigger(Trigger trigger) + { + if (trigger == null || m_Triggers.Contains(trigger)) + return; + m_Triggers.Add(trigger); + } } diff --git a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs index 4b9cd21e..8be58188 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs @@ -5,25 +5,27 @@ using UnityEngine; public class IdleAbility : AbilityBase { - /// - /// idle的动画 - /// + Animator m_Animator; + int m_AnimHash; /// /// 在Idle状态时可以切换的ability /// - private List m_Triggers; + private List m_Triggers = new List(); - public IdleAbility(int animation) + public IdleAbility(Animator animator, int animation) : base() { - m_AnimHash = animation; + m_Animator = animator; + m_AnimHash = animation; } public override void OnEnter() { - + m_Animator.speed = 1; + m_Animator.CrossFade(m_AnimHash, 0.3f); + m_Animator.speed = 0; } public override void OnInit() @@ -42,9 +44,11 @@ public class IdleAbility : AbilityBase base.OnUpdate(); } - public void AddTrigger() + public void AddTrigger(Trigger trigger) { - + if (trigger == null || m_Triggers.Contains(trigger)) + return; + m_Triggers.Add(trigger); } } diff --git a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs index 2c39afd5..eadee433 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs @@ -4,11 +4,19 @@ using UnityEngine; public class MoveAbility : AbilityBase { + Animator m_Animator; + int m_AnimHash; /// /// 在跑动状态时可以切换的ability /// - private List m_Triggers; + private List m_Triggers = new List(); + + public MoveAbility(Animator animator, int animation) + { + m_Animator = animator; + m_AnimHash = animation; + } public override void OnInit() { @@ -22,7 +30,7 @@ public class MoveAbility : AbilityBase public override void OnEnter() { - + m_Animator.CrossFade(m_AnimHash, 0); } public override void OnExit() @@ -31,7 +39,6 @@ public class MoveAbility : AbilityBase public override void OnHit() { - throw new System.NotImplementedException(); } public override void OnHurt() @@ -40,7 +47,6 @@ public class MoveAbility : AbilityBase public override void OnTranslate(AbilityBase to) { - throw new System.NotImplementedException(); } public override void OnUpdate() @@ -51,4 +57,12 @@ public class MoveAbility : AbilityBase break; } } + + public void AddTrigger(Trigger trigger) + { + if (trigger == null || m_Triggers.Contains(trigger)) + return; + m_Triggers.Add(trigger); + } + } diff --git a/Assets/Scripts/AbilitySystem/AbilitySystem.cs b/Assets/Scripts/AbilitySystem/AbilitySystem.cs index 890c1b4b..b9b2b9ee 100644 --- a/Assets/Scripts/AbilitySystem/AbilitySystem.cs +++ b/Assets/Scripts/AbilitySystem/AbilitySystem.cs @@ -20,7 +20,7 @@ public class AbilitySystem } } - private List m_Abilities; + private List m_Abilities = new List(); public void ForceStart(AbilityBase ability) { @@ -30,8 +30,8 @@ public class AbilitySystem if (m_Currrent != null) m_Currrent.OnExit(); - ability.OnEnter(); m_Currrent = ability; + m_Currrent.OnEnter(); } public void AddAbility(AbilityBase ability) @@ -47,4 +47,12 @@ public class AbilitySystem } } + public void SwitchToAbility(AbilityBase targetAbility) + { + if (m_Currrent != null) + m_Currrent.OnExit(); + m_Currrent = targetAbility; + m_Currrent.OnEnter(); + } + } \ No newline at end of file diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs new file mode 100644 index 00000000..69c7f179 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionSwitchAbility : ActionBase +{ + AbilitySystem m_AbilitySystem; + AbilityBase m_TargetAbility; + + public ActionSwitchAbility(AbilitySystem abilitySystem, AbilityBase targetAbility) + { + m_AbilitySystem = abilitySystem; + m_TargetAbility = targetAbility; + } + + public override void Execute() + { + m_AbilitySystem.SwitchToAbility(m_TargetAbility); + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta new file mode 100644 index 00000000..3059d95d --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionSwitchAbility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce17bc5eca89ffc468e536284af75c4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs index 019c16a9..cfdcfab5 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimAtEnd.cs @@ -20,7 +20,7 @@ public class ConditionAnimAtEnd : ConditionBase public override bool Evaluate() { AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); - if(info.fullPathHash == m_AnimationHash) + if(info.shortNameHash == m_AnimationHash) { float t = info.normalizedTime; if (t >= 0.99f) diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs index 82db03e0..b8f98065 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionAnimRange.cs @@ -12,14 +12,17 @@ public sealed class ConditionAnimRange : ConditionBase public ConditionAnimRange(Animator animator, float start, float end) { - m_TimeRange.Set(start, end); + m_Animator = animator; + + m_TimeRange.Set(start, end); } public override bool Evaluate() { AnimatorStateInfo info = m_Animator.GetCurrentAnimatorStateInfo(0); float time = info.normalizedTime; - return time >= m_TimeRange.x && time <= m_TimeRange.y; - } + bool result = time >= m_TimeRange.x && time <= m_TimeRange.y; + return result; + } } diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs new file mode 100644 index 00000000..52abad03 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConditionButtonHold : ConditionBase +{ + GamepadButton m_Button; + + public ConditionButtonHold(GamepadButton button) + { + m_Button = button; + } + + public override bool Evaluate() + { + return InputManager.Instance.IsButtonHold(m_Button); + } +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta new file mode 100644 index 00000000..82d350e2 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionButtonHold.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b0cd6f63cbe32649a15ab38d5bb6ee3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs index a7487d33..d735ef5b 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommand.cs @@ -7,9 +7,9 @@ using UnityEngine; /// public class ConditionCommand : ConditionBase { - CommandCode m_TargetCommand; + GamepadButton m_TargetCommand; - public ConditionCommand(CommandCode command) + public ConditionCommand(GamepadButton command) { m_TargetCommand = command; } diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs index 745d2aa8..8c955400 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs @@ -8,7 +8,7 @@ using UnityEngine; public class ConditionCommandSeq : ConditionBase { - public ConditionCommandSeq(List commandSeq, float maxDeltaTime) + public ConditionCommandSeq(List commandSeq, float maxDeltaTime) { } diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs new file mode 100644 index 00000000..1084f191 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConditionMoveButtonHold : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta new file mode 100644 index 00000000..45cf47bb --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionMoveButtonHold.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77299e998cbe9d1429c2d0b731bff6e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs new file mode 100644 index 00000000..06a76784 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ConditionNoMoveButtonHold : ConditionBase +{ + public ConditionNoMoveButtonHold() + { + } + + public override bool Evaluate() + { + bool isMoveButtonDown = InputManager.Instance.IsButtonHold(GamepadButton.Left) || InputManager.Instance.IsButtonHold(GamepadButton.Right); + return !isMoveButtonDown; + } +} diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta new file mode 100644 index 00000000..db883c19 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionNoMoveButtonHold.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce1302d58bf3a7043b6e2e25d13525d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Trigger.cs b/Assets/Scripts/AbilitySystem/Trigger.cs index b7b4751c..416655ee 100644 --- a/Assets/Scripts/AbilitySystem/Trigger.cs +++ b/Assets/Scripts/AbilitySystem/Trigger.cs @@ -9,19 +9,24 @@ using UnityEngine; public sealed class Trigger { private ConditionBase m_Condition; - private List m_ActionChain; + private List m_ActionChain = new List(); - public Trigger(ConditionBase condition, List actions) - { - m_Condition = condition; + public Trigger(ConditionBase condition, List actions) + { + m_Condition = condition; m_ActionChain.AddRange(actions); - } - - /// - /// 如果触发执行了,返回true,否则返回false - /// - /// - public bool Update() + } + public Trigger(ConditionBase condition, ActionBase action) + { + m_Condition = condition; + m_ActionChain.Add(action); + } + + /// + /// 如果触发执行了,返回true,否则返回false + /// + /// + public bool Update() { if (m_Condition.Evaluate()) { -- cgit v1.1-26-g67d0