summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs3
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/AbilitySystem.cs17
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs11
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs40
-rw-r--r--Assets/Scripts/ApplicationMain.cs3
-rw-r--r--Assets/Scripts/GUI.meta8
-rw-r--r--Assets/Scripts/Input/InputManager.cs7
-rw-r--r--Assets/Scripts/Test/SaionjiScript.cs4
-rw-r--r--Assets/Scripts/Test/SaionjiScript_Ability.cs52
-rw-r--r--Assets/Scripts/Test/SaionjiScript_Anim.cs6
13 files changed, 149 insertions, 17 deletions
diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
index a3cda9c9..85a5a0a6 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using UnityEngine;
+// 单独的一个招式
public class AttackAbility : AbilityBase
{
Animator m_Animator;
@@ -43,7 +44,7 @@ public class AttackAbility : AbilityBase
public override void OnEnter()
{
m_TimeCount = 0;
- m_Animator.CrossFade(m_AnimHash, 0f);
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
}
public override void OnExit()
diff --git a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
index dfd9478d..0a59419f 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/IdleAbility.cs
@@ -23,7 +23,7 @@ public class IdleAbility : AbilityBase
public override void OnEnter()
{
- m_Animator.CrossFade(m_AnimHash, 0.3f);
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.25f);
}
public override void OnInit()
diff --git a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
index eadee433..139325b6 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/MoveAbility.cs
@@ -30,7 +30,7 @@ public class MoveAbility : AbilityBase
public override void OnEnter()
{
- m_Animator.CrossFade(m_AnimHash, 0);
+ m_Animator.CrossFadeInFixedTime(m_AnimHash, 0.1f);
}
public override void OnExit()
diff --git a/Assets/Scripts/AbilitySystem/AbilitySystem.cs b/Assets/Scripts/AbilitySystem/AbilitySystem.cs
index b9b2b9ee..0441e813 100644
--- a/Assets/Scripts/AbilitySystem/AbilitySystem.cs
+++ b/Assets/Scripts/AbilitySystem/AbilitySystem.cs
@@ -7,10 +7,12 @@ using UnityEngine;
/// </summary>
public class AbilitySystem
{
+ private static List<AbilitySystem> AbilitySystems = new List<AbilitySystem>();
+
/// <summary>
/// 当前执行的ability
/// </summary>
- private AbilityBase m_Currrent;
+ private AbilityBase m_Currrent;
public AbilityBase Current
{
@@ -22,6 +24,19 @@ public class AbilitySystem
private List<AbilityBase> m_Abilities = new List<AbilityBase>();
+ public AbilitySystem()
+ {
+ AbilitySystems.Add(this);
+ }
+
+ public static void Update()
+ {
+ foreach(var systems in AbilitySystems)
+ {
+ systems.OnUpdate();
+ }
+ }
+
public void ForceStart(AbilityBase ability)
{
if (ability == null)
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs b/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs
new file mode 100644
index 00000000..b3bdd3fa
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs
@@ -0,0 +1,11 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ActionWipeCmdRecord : ActionBase
+{
+ public override void Execute()
+ {
+ InputManager.Instance.CommandRecord.Clear();
+ }
+} \ No newline at end of file
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs.meta
new file mode 100644
index 00000000..86c5ec59
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionWipeCmdRecord.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6124291d136fa604bafde35cb10af76b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
index 8c955400..71a7dbf3 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionCommandSeq.cs
@@ -7,14 +7,48 @@ using UnityEngine;
/// </summary>
public class ConditionCommandSeq : ConditionBase
{
+ List<GamepadButton> m_CommandSeq = new List<GamepadButton>();
+ float m_DeltaTime = 0;
+ List<int> m_LastCmdID = new List<int>();
- public ConditionCommandSeq(List<GamepadButton> commandSeq, float maxDeltaTime)
- {
+ List<int> id = new List<int>();
+ public ConditionCommandSeq(List<GamepadButton> commandSeq, float maxDeltaTime)
+ {
+ m_CommandSeq.AddRange(commandSeq);
+ m_DeltaTime = maxDeltaTime;
}
public override bool Evaluate()
{
- throw new System.NotImplementedException();
+ List<Command> commandRecord = InputManager.Instance.CommandRecord;
+ if (commandRecord == null || commandRecord.Count < m_CommandSeq.Count)
+ return false;
+ id.Clear();
+ for (int i = 1; i < m_CommandSeq.Count; ++i)
+ {
+ GamepadButton button = m_CommandSeq[i];
+ GamepadButton preButton = m_CommandSeq[i-1];
+ int j = commandRecord.Count - m_CommandSeq.Count + i;
+ Command cmd = commandRecord[j];
+ Command preCmd = commandRecord[j-1];
+ if (preCmd.code != preButton || cmd.code != button)
+ return false;
+ if (cmd.time - preCmd.time > m_DeltaTime)
+ return false;
+ id.Add(preCmd.id);
+ if (j == commandRecord.Count - 1)
+ id.Add(cmd.id);
+ }
+
+ //for (int i = 0; i < id.Count; ++i)
+ //{
+ // if (m_LastCmdID.Contains(id[i]))
+ // return false;
+ //}
+ //m_LastCmdID.Clear();
+ //m_LastCmdID.AddRange(id);
+
+ return true;
}
}
diff --git a/Assets/Scripts/ApplicationMain.cs b/Assets/Scripts/ApplicationMain.cs
index 04648edf..7bee23a5 100644
--- a/Assets/Scripts/ApplicationMain.cs
+++ b/Assets/Scripts/ApplicationMain.cs
@@ -14,7 +14,8 @@ public class ApplicationMain : MonoBehaviour
// Update is called once per frame
void Update()
{
- InputManager.Instance.Update();
+ InputManager.Instance.Update();
+ AbilitySystem.Update();
}
private void LateUpdate()
diff --git a/Assets/Scripts/GUI.meta b/Assets/Scripts/GUI.meta
new file mode 100644
index 00000000..649b12c1
--- /dev/null
+++ b/Assets/Scripts/GUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 452d3a87e77cbe642b89b8cdd976ddaf
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs
index 771032a8..f24a3efa 100644
--- a/Assets/Scripts/Input/InputManager.cs
+++ b/Assets/Scripts/Input/InputManager.cs
@@ -5,6 +5,13 @@ using UnityEngine;
public class InputManager : Singleton<InputManager>
{
private List<Command> m_CommandRecord;
+ public List<Command> CommandRecord
+ {
+ get
+ {
+ return m_CommandRecord;
+ }
+ }
private readonly int kCommandRecords = 10;
// 本帧内的指令,会在下一帧被清空
diff --git a/Assets/Scripts/Test/SaionjiScript.cs b/Assets/Scripts/Test/SaionjiScript.cs
index 0ea5f003..6b3f983e 100644
--- a/Assets/Scripts/Test/SaionjiScript.cs
+++ b/Assets/Scripts/Test/SaionjiScript.cs
@@ -35,8 +35,8 @@ public partial class SaionjiScript : MonoBehaviour
private void Update()
{
- if (EnableAbilitySystem)
- m_AbilitySystem.OnUpdate();
+ //if (EnableAbilitySystem)
+ // m_AbilitySystem.OnUpdate();
}
// 更新顺序:
diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs
index 375dc631..bd62c138 100644
--- a/Assets/Scripts/Test/SaionjiScript_Ability.cs
+++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs
@@ -29,17 +29,22 @@ public partial class SaionjiScript : MonoBehaviour
/// </summary>
void SetupAbilities()
{
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// abilities
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
IdleAbility idle = new IdleAbility(animator, Anim_Idle);
MoveAbility move = new MoveAbility(animator, Anim_Run);
- MoveAbility dash = 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 sideKick = new AttackAbility(animator, Anim_SideKick);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// actions
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ActionTurn180 turn180 = new ActionTurn180(this.transform);
ActionTowardLeft towardLeft = new ActionTowardLeft(this.transform);
ActionTowardRight towardRight = new ActionTowardRight(this.transform);
@@ -51,44 +56,75 @@ public partial class SaionjiScript : MonoBehaviour
ActionSwitchAbility switchToAttk3 = new ActionSwitchAbility(m_AbilitySystem, attk3);
ActionSwitchAbility switchToAttk4 = new ActionSwitchAbility(m_AbilitySystem, attk4);
ActionSwitchAbility switchToAttk5 = new ActionSwitchAbility(m_AbilitySystem, attk5);
+ ActionSwitchAbility switchToSideKick = new ActionSwitchAbility(m_AbilitySystem, sideKick);
+ ActionSwitchAbility switchToDash = new ActionSwitchAbility(m_AbilitySystem, dash);
+ ActionWipeCmdRecord wipeCmdRecord = new ActionWipeCmdRecord();
+
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 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);
+ ConditionCommand condCrossCmd = new ConditionCommand(GamepadButton.Cross);
ConditionTowardLeft condTowardLeft = new ConditionTowardLeft(this.transform);
ConditionTowardRight condTowardRight = new ConditionTowardRight(this.transform);
+ ConditionCommandSeq condRight2Cmd = new ConditionCommandSeq(new List<GamepadButton>{GamepadButton.Right, GamepadButton.Right }, 1f);
+ ConditionCommandSeq condLeft2Cmd = new ConditionCommandSeq(new List<GamepadButton>{GamepadButton.Left, GamepadButton.Left }, 1f);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// common triggers
- Trigger triggerTurnRight = new Trigger(condRightCmd, towardRight);
- Trigger triggerTurnLeft = new Trigger(condLeftCmd, towardLeft);
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ Trigger triggerTurnRight = new Trigger(And(condRightButtonHold, Not(condTowardRight)), towardRight);
+ Trigger triggerTurnLeft = new Trigger(And(condLeftButtonHold, Not(condTowardLeft)), towardLeft);
Trigger trigger = null;
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // ability setup
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
// idle ability
- trigger = new Trigger(condRightCmd, new List<ActionBase> { switchToMove, towardRight});
+ trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord , switchToDash });
idle.AddTrigger(trigger);
- trigger = new Trigger(condLeftCmd, new List<ActionBase> { switchToMove, towardLeft});
+ trigger = new Trigger(And(condRightButtonHold, Not(condRight2Cmd)), new List<ActionBase> { switchToMove, towardRight });
+ idle.AddTrigger(trigger);
+ trigger = new Trigger(And(condLeftButtonHold, Not(condLeft2Cmd)), new List<ActionBase> { switchToMove, towardLeft });
idle.AddTrigger(trigger);
trigger = new Trigger(condCircleCmd, switchToAttk1);
idle.AddTrigger(trigger);
+ trigger = new Trigger(condCrossCmd, switchToSideKick);
+ idle.AddTrigger(trigger);
trigger = new Trigger(condLeftCmd, turn180);
idle.AddTrigger(trigger);
// move ability
+ trigger = new Trigger(And(condTowardRight, And(condRightCmd, condRight2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash, });
+ move.AddTrigger(trigger);
+ trigger = new Trigger(And(condTowardLeft, And(condLeftCmd, condLeft2Cmd)), new List<ActionBase> { wipeCmdRecord, switchToDash });
+ move.AddTrigger(trigger);
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);
+ trigger = new Trigger(condCrossCmd, switchToSideKick);
+ move.AddTrigger(trigger);
+
+ // dash ability
+ trigger = new Trigger(new ConditionAnimAtEnd(animator, Anim_DashWithSword), switchToIdle);
+ dash.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);
@@ -134,6 +170,10 @@ public partial class SaionjiScript : MonoBehaviour
attk5.AddTrigger(triggerTurnRight);
attk5.AddTrigger(triggerTurnLeft);
+ ConditionAttkExpireTime condSideKickExpireTime = new ConditionAttkExpireTime(sideKick, expireTime);
+ trigger = new Trigger(condSideKickExpireTime, switchToIdle);
+ sideKick.AddTrigger(trigger);
+
m_AbilitySystem.ForceStart(idle);
}
diff --git a/Assets/Scripts/Test/SaionjiScript_Anim.cs b/Assets/Scripts/Test/SaionjiScript_Anim.cs
index c0ebb95f..03d1671a 100644
--- a/Assets/Scripts/Test/SaionjiScript_Anim.cs
+++ b/Assets/Scripts/Test/SaionjiScript_Anim.cs
@@ -11,7 +11,9 @@ public partial class SaionjiScript : MonoBehaviour
int Anim_LightAttack2;
int Anim_LightAttack3;
int Anim_LightAttack4;
- int Anim_LightAttack5;
+ int Anim_LightAttack5;
+ int Anim_SideKick;
+ int Anim_DashWithSword;
void GetAnimHash()
{
@@ -23,6 +25,8 @@ public partial class SaionjiScript : MonoBehaviour
Anim_LightAttack3 = Animator.StringToHash("Light_Attk_3");
Anim_LightAttack4 = Animator.StringToHash("Light_Attk_4");
Anim_LightAttack5 = Animator.StringToHash("Light_Attk_5");
+ Anim_SideKick = Animator.StringToHash("SideKick");
+ Anim_DashWithSword = Animator.StringToHash("Dash_With_Sword");
}
}