From fd4f77ee3621bef2ce91ee6584ca9a2dc5064f96 Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 17 Oct 2020 21:41:56 +0800 Subject: =?UTF-8?q?*=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scripts/Test/SaionjiScript_Ability.cs | 84 +++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 13 deletions(-) (limited to 'Assets/Scripts/Test/SaionjiScript_Ability.cs') diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs index 1b248751..375dc631 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -9,6 +9,11 @@ public partial class SaionjiScript : MonoBehaviour /// AbilitySystem m_AbilitySystem = new AbilitySystem(); + ConditionBase Not(ConditionBase cond) + { + return new ConditionNot(cond); + } + ConditionBase And(ConditionBase c1, ConditionBase c2) { return new ConditionAnd(c1, c2); @@ -19,18 +24,25 @@ public partial class SaionjiScript : MonoBehaviour return new ConditionOr(c1,c2); } - /// - /// 设置abilities - /// - void SetupAbilities() - { + /// + /// 设置abilities + /// + void SetupAbilities() + { + // abilities 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); + MoveAbility dash = 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); + + // actions + ActionTurn180 turn180 = new ActionTurn180(this.transform); + ActionTowardLeft towardLeft = new ActionTowardLeft(this.transform); + ActionTowardRight towardRight = new ActionTowardRight(this.transform); ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move); ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle); @@ -40,41 +52,87 @@ public partial class SaionjiScript : MonoBehaviour ActionSwitchAbility switchToAttk4 = new ActionSwitchAbility(m_AbilitySystem, attk4); ActionSwitchAbility switchToAttk5 = new ActionSwitchAbility(m_AbilitySystem, attk5); + // 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 condCircleCmd = new ConditionCommand(GamepadButton.Circle); + ConditionTowardLeft condTowardLeft = new ConditionTowardLeft(this.transform); + ConditionTowardRight condTowardRight = new ConditionTowardRight(this.transform); - Trigger trigger = null; + // common triggers + Trigger triggerTurnRight = new Trigger(condRightCmd, towardRight); + Trigger triggerTurnLeft = new Trigger(condLeftCmd, towardLeft); - trigger = new Trigger(condRightCmd, switchToMove); + Trigger trigger = null; + + // idle ability + trigger = new Trigger(condRightCmd, new List { switchToMove, towardRight}); + idle.AddTrigger(trigger); + trigger = new Trigger(condLeftCmd, new List { switchToMove, towardLeft}); idle.AddTrigger(trigger); trigger = new Trigger(condCircleCmd, switchToAttk1); idle.AddTrigger(trigger); + trigger = new Trigger(condLeftCmd, turn180); + idle.AddTrigger(trigger); - trigger = new Trigger(condNoMoveButtonHold, switchToIdle); + // move ability + 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); + // attack abilities + float expireTime = 0.3f; + ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(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); ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(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); ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(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); ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(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); ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(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); m_AbilitySystem.ForceStart(idle); } -- cgit v1.1-26-g67d0