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 +++++---- Assets/Scripts/Input/Command.cs | 8 +-- Assets/Scripts/Input/InputManager.cs | 66 ++++++++++++++-------- Assets/Scripts/Test/SaionjiScript.cs | 12 ++++ Assets/Scripts/Test/SaionjiScript_Ability.cs | 55 +++++++++++++++++- 21 files changed, 355 insertions(+), 67 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') 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()) { diff --git a/Assets/Scripts/Input/Command.cs b/Assets/Scripts/Input/Command.cs index fae88684..7ef6c9eb 100644 --- a/Assets/Scripts/Input/Command.cs +++ b/Assets/Scripts/Input/Command.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using UnityEngine; -public enum CommandCode +public enum GamepadButton { Blank, @@ -22,13 +22,13 @@ public enum CommandCode public struct Command { - public CommandCode code; // 指令码 + public GamepadButton code; // 指令码 public float time; // 触发时间 public int id; - public static Command Blank = new Command(CommandCode.Blank, 0); + public static Command Blank = new Command(GamepadButton.Blank, 0); - public Command(CommandCode code, float time) + public Command(GamepadButton code, float time) { this.code = code; this.time = time; diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs index 25daf848..771032a8 100644 --- a/Assets/Scripts/Input/InputManager.cs +++ b/Assets/Scripts/Input/InputManager.cs @@ -20,36 +20,36 @@ public class InputManager : Singleton public void Init() { m_CommandRecord = new List(); - m_CurrentCommand = new Command(CommandCode.Blank, 0); + m_CurrentCommand = new Command(GamepadButton.Blank, 0); } public void Update() { - CommandCode cmd = CommandCode.Blank; + GamepadButton cmd = GamepadButton.Blank; // 移动 if (Input.GetKeyDown("w")) - cmd = CommandCode.Up; + cmd = GamepadButton.Up; if (Input.GetKeyDown("s")) - cmd = CommandCode.Down; + cmd = GamepadButton.Down; if (Input.GetKeyDown("a")) - cmd = CommandCode.Left; + cmd = GamepadButton.Left; if (Input.GetKeyDown("d")) - cmd = CommandCode.Right; + cmd = GamepadButton.Right; // 动作 if (Input.GetKeyDown("j")) - cmd = CommandCode.Circle; + cmd = GamepadButton.Circle; if (Input.GetKeyDown("k")) - cmd = CommandCode.Triangle; + cmd = GamepadButton.Triangle; if (Input.GetKeyDown("l")) - cmd = CommandCode.Square; + cmd = GamepadButton.Square; if(Input.GetKeyDown("u")) - cmd = CommandCode.Cross; + cmd = GamepadButton.Cross; - if(cmd != CommandCode.Blank) + if(cmd != GamepadButton.Blank) { float time = Time.time; Command command = new Command(cmd, time); - Debug.Log(CommandToString(command)); + //Debug.Log(CommandToString(command)); m_CurrentCommand = command; m_CommandRecord.Add(command); @@ -57,24 +57,24 @@ public class InputManager : Singleton if(m_CommandRecord.Count > 10) m_CommandRecord.RemoveRange(0, m_CommandRecord.Count - 10); } - else if(m_CurrentCommand.code != CommandCode.Blank) + else if(m_CurrentCommand.code != GamepadButton.Blank) { m_CurrentCommand = Command.Blank; } } - string CommandCodeToString(CommandCode cmd) + string CommandCodeToString(GamepadButton cmd) { switch(cmd) { - case CommandCode.Left: return "←"; - case CommandCode.Right: return "→"; - case CommandCode.Up: return "↑"; - case CommandCode.Down: return "↓"; - case CommandCode.Circle: return "○"; - case CommandCode.Triangle: return "△"; - case CommandCode.Square: return "□"; - case CommandCode.Cross: return "×"; + case GamepadButton.Left: return "←"; + case GamepadButton.Right: return "→"; + case GamepadButton.Up: return "↑"; + case GamepadButton.Down: return "↓"; + case GamepadButton.Circle: return "○"; + case GamepadButton.Triangle: return "△"; + case GamepadButton.Square: return "□"; + case GamepadButton.Cross: return "×"; default: return "Unknown"; } } @@ -85,4 +85,26 @@ public class InputManager : Singleton return sign + " " + cmd.time + "s" + " " + cmd.id; } + string GetGamepadButtonKey(GamepadButton button) + { + switch (button) + { + case GamepadButton.Blank: return ""; + case GamepadButton.Up: return "w"; + case GamepadButton.Down: return "s"; + case GamepadButton.Left: return "a"; + case GamepadButton.Right: return "d"; + case GamepadButton.Circle: return "j"; + case GamepadButton.Triangle: return "k"; + case GamepadButton.Square: return "l"; + case GamepadButton.Cross: return "u"; + } + return ""; + } + + public bool IsButtonHold(GamepadButton button) + { + return Input.GetKey(GetGamepadButtonKey(button)); + } + } diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs index a7ba6091..871f155f 100644 --- a/Assets/Scripts/Test/SaionjiScript.cs +++ b/Assets/Scripts/Test/SaionjiScript.cs @@ -14,6 +14,8 @@ public partial class SaionjiScript : MonoBehaviour public bool UsePistol; public bool UseBlade; + public bool EnableAbilitySystem; + // Start is called before the first frame update void Start() { @@ -25,6 +27,16 @@ public partial class SaionjiScript : MonoBehaviour Go_PistolR.SetActive(UsePistol); Go_Blade.SetActive(UseBlade); + GetAnimHash(); + + if (EnableAbilitySystem) + SetupAbilities(); + } + + private void Update() + { + if (EnableAbilitySystem) + m_AbilitySystem.OnUpdate(); } // 更新顺序: diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index 4b8f4693..1b248751 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -24,10 +24,59 @@ public partial class SaionjiScript : MonoBehaviour /// void SetupAbilities() { - IdleAbility idleAbility = new IdleAbility(Anim_Idle); + IdleAbility idle = new IdleAbility(animator, Anim_Idle); + MoveAbility move = new MoveAbility(animator, Anim_Run); + AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1); + AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2); + AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3); + AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4); + AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5); + 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); - m_AbilitySystem.AddAbility(idleAbility); - } + ConditionCommand condRightCmd = new ConditionCommand(GamepadButton.Right); + ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold(); + ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle); + + Trigger trigger = null; + + trigger = new Trigger(condRightCmd, switchToMove); + idle.AddTrigger(trigger); + trigger = new Trigger(condCircleCmd, switchToAttk1); + idle.AddTrigger(trigger); + + trigger = new Trigger(condNoMoveButtonHold, switchToIdle); + move.AddTrigger(trigger); + trigger = new Trigger(condCircleCmd, switchToAttk1); + move.AddTrigger(trigger); + + ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack1); + trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2); + attk1.AddTrigger(trigger); + + ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack2); + trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3); + attk2.AddTrigger(trigger); + + ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack3); + trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4); + attk3.AddTrigger(trigger); + + ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack4); + trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5); + attk4.AddTrigger(trigger); + + ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack5); + trigger = new Trigger(condAttk5AtEnd, switchToIdle); + attk5.AddTrigger(trigger); + + m_AbilitySystem.ForceStart(idle); + } } \ No newline at end of file -- cgit v1.1-26-g67d0