From 3d3f0b7ede44569ecaab523350feede9fee383c3 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 26 Oct 2020 08:36:27 +0800 Subject: * ability system --- Assets/Scripts/Test/SaionjiScript_Ability.cs | 80 +++++++++++++++++----------- 1 file changed, 48 insertions(+), 32 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 2ed956ef..21901096 100644 --- a/Assets/Scripts/Test/SaionjiScript_Ability.cs +++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs @@ -33,21 +33,34 @@ public partial class SaionjiScript : MonoBehaviour // abilities //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// IdleAbility idle = new IdleAbility(animator, Anim_Idle); + MoveAbility move = new MoveAbility(animator, Anim_Run); MoveAbility dash = new MoveAbility(animator, Anim_DashWithSword); - 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); - AttackAbility attkRush = new AttackAbility(animator, Anim_LightAttackRush); - AttackAbility sideKick = new AttackAbility(animator, Anim_SideKick); - AttackAbility sideKickRush = new AttackAbility(animator, Anim_SideKickRush); - AttackAbility superKick = new AttackAbility(animator, Anim_SuperKick); - AttackAbility gun1 = new AttackAbility(animator, Anim_Gun1); - AttackAbility gun2 = new AttackAbility(animator, Anim_Gun2); - AttackAbility gun3 = new AttackAbility(animator, Anim_Gun3); - AttackAbility gun4 = new AttackAbility(animator, Anim_Gun4); + + AttackAbilityConfig config; + + //招式会绑定一个motion + AttackAbility attk1 = new AttackAbility(animator, Anim_LightAttack1, m_Body); + AttackAbility attk2 = new AttackAbility(animator, Anim_LightAttack2, m_Body); + AttackAbility attk3 = new AttackAbility(animator, Anim_LightAttack3, m_Body); + AttackAbility attk4 = new AttackAbility(animator, Anim_LightAttack4, m_Body); + AttackAbility attk5 = new AttackAbility(animator, Anim_LightAttack5, m_Body); + 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); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // actions @@ -155,16 +168,16 @@ public partial class SaionjiScript : MonoBehaviour move.AddTrigger(trigger); // dash ability - trigger = new Trigger(And(new ConditionAnimRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1); + trigger = new Trigger(And(new ConditionMotionRange(animator, 0.5f, 1.0f), condCircleCmd), switchToAttk1); dash.AddTrigger(trigger); - trigger = new Trigger(new ConditionAnimAtEnd(animator, Anim_DashWithSword), switchToIdle); + trigger = new Trigger(new ConditionMotionAtEnd(animator, Anim_DashWithSword), switchToIdle); dash.AddTrigger(trigger); // attack abilities float expireTime = 0.3f; // sword normal attack - ConditionAnimAtEnd condAttk1AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack1); + ConditionMotionAtEnd condAttk1AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack1); trigger = new Trigger(And(condAttk1AtEnd, condCircleCmd), switchToAttk2); attk1.AddTrigger(trigger); ConditionAttkExpireTime condAttk1ExpireTime = new ConditionAttkExpireTime(attk1, expireTime); @@ -175,13 +188,13 @@ public partial class SaionjiScript : MonoBehaviour trigger = new Trigger(condIsHit, new ActionLog("hit!!!")); attk1.AddLateTrigger(trigger); - //ConditionAnimRange condAttkRushGhostRange = new ConditionAnimRange(animator, 0f, 0.8f); + //ConditionMotionRange condAttkRushGhostRange = new ConditionMotionRange(animator, 0f, 0.8f); //trigger = new Trigger(condAttkRushGhostRange, enableGhost, false); //attkRush.AddTrigger(trigger); - //ConditionAnimRange condAttkRushGhostDisableRange = new ConditionAnimRange(animator, 0.8f, 10f); + //ConditionMotionRange condAttkRushGhostDisableRange = new ConditionMotionRange(animator, 0.8f, 10f); //trigger = new Trigger(condAttkRushGhostDisableRange, disableGhost, false); //attkRush.AddTrigger(trigger); - ConditionAnimRange condAttkRushAtRange = new ConditionAnimRange(animator, 0.5f, 1f); + 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); @@ -194,7 +207,7 @@ public partial class SaionjiScript : MonoBehaviour //attkRush.AddTrigger(triggerTurnRight); //attkRush.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk2AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack2); + ConditionMotionAtEnd condAttk2AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack2); trigger = new Trigger(And(condAttk2AtEnd, condCircleCmd), switchToAttk3); attk2.AddTrigger(trigger); ConditionAttkExpireTime condAttk2ExpireTime = new ConditionAttkExpireTime(attk2, expireTime); @@ -203,7 +216,7 @@ public partial class SaionjiScript : MonoBehaviour attk2.AddTrigger(triggerTurnRight); attk2.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk3AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack3); + ConditionMotionAtEnd condAttk3AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack3); trigger = new Trigger(And(condAttk3AtEnd, condCircleCmd), switchToAttk4); attk3.AddTrigger(trigger); ConditionAttkExpireTime condAttk3ExpireTime = new ConditionAttkExpireTime(attk3, expireTime); @@ -212,7 +225,7 @@ public partial class SaionjiScript : MonoBehaviour attk3.AddTrigger(triggerTurnRight); attk3.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk4AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack4); + ConditionMotionAtEnd condAttk4AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack4); trigger = new Trigger(And(condAttk4AtEnd, condCircleCmd), switchToAttk5); attk4.AddTrigger(trigger); ConditionAttkExpireTime condAttk4ExpireTime = new ConditionAttkExpireTime(attk4, expireTime); @@ -221,7 +234,7 @@ public partial class SaionjiScript : MonoBehaviour attk4.AddTrigger(triggerTurnRight); attk4.AddTrigger(triggerTurnLeft); - ConditionAnimAtEnd condAttk5AtEnd = new ConditionAnimAtEnd(animator, Anim_LightAttack5); + ConditionMotionAtEnd condAttk5AtEnd = new ConditionMotionAtEnd(animator, Anim_LightAttack5); trigger = new Trigger(condAttk5AtEnd, switchToIdle); attk5.AddTrigger(trigger); ConditionAttkExpireTime condAttk5ExpireTime = new ConditionAttkExpireTime(attk5, expireTime); @@ -231,6 +244,9 @@ public partial class SaionjiScript : MonoBehaviour 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); @@ -239,10 +255,10 @@ public partial class SaionjiScript : MonoBehaviour ConditionAttkExpireTime condSideKickRushExpireTime = new ConditionAttkExpireTime(sideKickRush, expireTime); trigger = new Trigger(condSideKickRushExpireTime, switchToIdle); sideKickRush.AddTrigger(trigger); - ConditionAnimRange condSideKickRushAnimRange = new ConditionAnimRange(animator, 0.5f, 10f); - trigger = new Trigger(And(condSideKickRushAnimRange, And(condRightButtonHold, condCircleCmd)), new List { towardRight, switchToAttkRush }); + ConditionMotionRange condSideKickRushMotionRange = new ConditionMotionRange(animator, 0.5f, 10f); + trigger = new Trigger(And(condSideKickRushMotionRange, And(condRightButtonHold, condCircleCmd)), new List { towardRight, switchToAttkRush }); sideKickRush.AddTrigger(trigger); - trigger = new Trigger(And(condSideKickRushAnimRange, And(condLeftButtonHold, condCircleCmd)), new List { towardLeft, switchToAttkRush }); + trigger = new Trigger(And(condSideKickRushMotionRange, And(condLeftButtonHold, condCircleCmd)), new List { towardLeft, switchToAttkRush }); sideKickRush.AddTrigger(trigger); // super kick combo @@ -251,21 +267,21 @@ public partial class SaionjiScript : MonoBehaviour superKick.AddTrigger(trigger); // gun normal - ConditionAnimAtEnd condGun1AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun1); + 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); - ConditionAnimAtEnd condGun2AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun2); + 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); - ConditionAnimAtEnd condGun3AtEnd = new ConditionAnimAtEnd(animator, Anim_Gun3); + ConditionMotionAtEnd condGun3AtEnd = new ConditionMotionAtEnd(animator, Anim_Gun3); trigger = new Trigger(And(condGun3AtEnd, condSquareCmd), switchToGun4); gun3.AddTrigger(trigger); ConditionAttkExpireTime condGun3ExpireTime = new ConditionAttkExpireTime(gun3, expireTime); @@ -275,10 +291,10 @@ public partial class SaionjiScript : MonoBehaviour ConditionAttkExpireTime condGun4ExpireTime = new ConditionAttkExpireTime(gun4, expireTime); trigger = new Trigger(condGun4ExpireTime, switchToIdle); gun4.AddTrigger(trigger); - ConditionAnimRange condGun4AnimRange = new ConditionAnimRange(animator, 0.6f, 1f); - trigger = new Trigger(And(condGun4AnimRange, condRight2Cmd), new List { switchToDash, towardRight }); + ConditionMotionRange condGun4MotionRange = new ConditionMotionRange(animator, 0.6f, 1f); + trigger = new Trigger(And(condGun4MotionRange, condRight2Cmd), new List { switchToDash, towardRight }); gun4.AddTrigger(trigger); - trigger = new Trigger(And(condGun4AnimRange, condLeft2Cmd), new List { switchToDash, towardLeft }); + trigger = new Trigger(And(condGun4MotionRange, condLeft2Cmd), new List { switchToDash, towardLeft }); gun4.AddTrigger(trigger); m_AbilitySystem.ForceStart(idle); -- cgit v1.1-26-g67d0