diff options
author | chai <chaifix@163.com> | 2020-10-17 21:41:56 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-10-17 21:41:56 +0800 |
commit | fd4f77ee3621bef2ce91ee6584ca9a2dc5064f96 (patch) | |
tree | 1cd330a68c7837beb3109baa0015a3c4acbb68da /Assets/Scripts/Test/SaionjiScript_Ability.cs | |
parent | fee35151213939d61d2dbd9d6a0ba71ac93b91cf (diff) |
*移动
Diffstat (limited to 'Assets/Scripts/Test/SaionjiScript_Ability.cs')
-rw-r--r-- | Assets/Scripts/Test/SaionjiScript_Ability.cs | 84 |
1 files changed, 71 insertions, 13 deletions
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 /// </summary>
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);
}
- /// <summary>
- /// 设置abilities
- /// </summary>
- void SetupAbilities()
- {
+ /// <summary>
+ /// 设置abilities
+ /// </summary>
+ 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<ActionBase> { switchToMove, towardRight});
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(condLeftCmd, new List<ActionBase> { 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);
}
|