summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs184
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs25
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs19
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/Camera.meta (renamed from Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta)2
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs2
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs18
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta11
-rw-r--r--Assets/Scripts/Test/SaionjiScript_Ability.cs29
9 files changed, 177 insertions, 115 deletions
diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
index 7b178621..168b6086 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs
@@ -64,7 +64,7 @@ public class AttackAbility : AbilityBase
if(m_Config.body != null)
{
- m_Config.body.Velocity = m_Config.velocity;
+ m_Config.body.LocalVelocity = m_Config.velocity;
}
}
diff --git a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs
index b6615516..e0f73efa 100644
--- a/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs
+++ b/Assets/Scripts/AbilitySystem/Abilities/JumpAbility.cs
@@ -62,6 +62,9 @@ public class JumpAbility : AbilityBase
int m_CurAnim;
State m_CurState;
+ int m_CurUpMotion;
+ int m_CurDownMotion;
+ Vector3 m_CurInitVelocity;
private List<Trigger> m_Triggers = new List<Trigger>();
@@ -87,93 +90,99 @@ public class JumpAbility : AbilityBase
{
m_Dir = dir;
}
-
+
public override void OnEnter()
{
base.OnEnter();
m_CurAnim = 0;
- OnUpdate();
- }
+
+ switch(m_Dir)
+ {
+ case Direction.Neutral:
+ m_CurUpMotion = m_AnimJumpNeutralUpwards;
+ m_CurDownMotion = m_AnimJumpNeutralDownwards;
+ m_CurInitVelocity = new Vector3(0, m_NeutralJumpSpeedY, 0);
+ break;
+ case Direction.Forward:
+ m_CurUpMotion = m_AnimJumpFwdUpwards;
+ m_CurDownMotion = m_AnimJumpFwdDownwards;
+ m_CurInitVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0);
+ break;
+ case Direction.Backward:
+ m_CurUpMotion = m_AnimJumpBackUpwards;
+ m_CurDownMotion = m_AnimJumpBackDownwards;
+ m_CurInitVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0);
+ break;
+ }
+
+ bool isOnGround = m_Collider.IsOnGround;
+ bool isUp = m_Body.Velocity.y > 0;
+ bool isDown = m_Body.Velocity.y < 0;
+ bool isFreeFall = Mathf.Approximately(m_Body.Velocity.y, 0);
+
+ if (isOnGround)
+ m_CurState = State.Ready;
+ else if (isUp)
+ m_CurState = State.Up;
+ else if (isDown || isFreeFall)
+ m_CurState = State.Down;
+ }
public override void OnUpdate()
{
-
- AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0);
-
- bool onGround = m_Collider.IsOnGround;
-
- float fadeDuration = 0.2f;
-
- if (onGround && m_CurAnim == m_AnimJumpNeutralDownwards && m_CurAnim != m_AnimJumpEnd)
- {
- m_Animator.CrossFade(m_AnimJumpEnd, 0);
- m_CurAnim = m_AnimJumpEnd;
- }
-
- foreach (var abilityTrigger in m_Triggers)
- {
- if (abilityTrigger.Update() && abilityTrigger.Swallow)
- return ;
- }
-
- if(onGround && m_CurAnim != m_AnimJumpStart && m_CurAnim != m_AnimJumpEnd)
- {
- m_Animator.CrossFade(m_AnimJumpStart, 0.1f);
- m_CurAnim = m_AnimJumpStart;
- return;
- }
-
- if(onGround && m_CurAnim == m_AnimJumpStart && state.normalizedTime >= 1f)
- {
- if (m_Dir == Direction.Neutral)
- m_Body.LocalVelocity = new Vector3(0, m_NeutralJumpSpeedY,0);
- else if(m_Dir == Direction.Forward)
- m_Body.LocalVelocity = new Vector3(m_FowardJumpSpeedX, m_NeutralJumpSpeedY, 0);
- else if(m_Dir == Direction.Backward)
- m_Body.LocalVelocity = new Vector3(m_BackwardJumpSpeedX, m_NeutralJumpSpeedY, 0);
- }
-
- bool neutral = Mathf.Approximately(m_Body.LocalVelocity.x, 0);
- //bool forward = m_Body.LocalVelocity.x > 0;
- //bool backward = m_Body.LocalVelocity.x < 0;
- bool forward = m_Dir == Direction.Forward;
- bool backward = m_Dir == Direction.Backward;
-
- bool upward = m_Body.LocalVelocity.y > 0;
- bool downward = m_Body.LocalVelocity.y < 0;
-
- if (neutral && upward && m_CurAnim != m_AnimJumpNeutralUpwards)
- {
- m_Animator.CrossFade(m_AnimJumpNeutralUpwards, fadeDuration);
- m_CurAnim = m_AnimJumpNeutralUpwards;
- }
- else if (forward && upward && m_CurAnim != m_AnimJumpFwdUpwards)
- {
- m_Animator.CrossFade(m_AnimJumpFwdUpwards, fadeDuration);
- m_CurAnim = m_AnimJumpFwdUpwards;
- }
- else if (backward && upward && m_CurAnim != m_AnimJumpBackUpwards)
- {
- m_Animator.CrossFade(m_AnimJumpBackUpwards, fadeDuration);
- m_CurAnim = m_AnimJumpBackUpwards;
- }
- else if (neutral && downward && m_CurAnim != m_AnimJumpNeutralDownwards)
- {
- m_Animator.CrossFade(m_AnimJumpNeutralDownwards, fadeDuration);
- m_CurAnim = m_AnimJumpNeutralDownwards;
- }
- else if (forward && downward && m_CurAnim != m_AnimJumpFwdDownwards)
- {
- m_Animator.CrossFade(m_AnimJumpFwdDownwards, fadeDuration);
- m_CurAnim = m_AnimJumpFwdDownwards;
- }
- else if (backward && downward && m_CurAnim != m_AnimJumpBackDownwards)
- {
- m_Animator.CrossFade(m_AnimJumpBackDownwards, fadeDuration);
- m_CurAnim = m_AnimJumpBackDownwards;
- }
-
+ foreach (var abilityTrigger in m_Triggers)
+ {
+ if (abilityTrigger.Update() && abilityTrigger.Swallow)
+ return;
+ }
+
+ AnimatorStateInfo motionInfo = m_Animator.GetCurrentAnimatorStateInfo(0);
+
+ switch (m_CurState)
+ {
+ case State.Ready:
+ if(m_CurAnim != m_AnimJumpStart)
+ {
+ m_Animator.CrossFade(m_AnimJumpStart, 0.2f);
+ m_CurAnim = m_AnimJumpStart;
+ }
+ if(motionInfo.shortNameHash == m_AnimJumpStart && motionInfo.normalizedTime >= 1f)
+ {
+ m_Body.LocalVelocity = m_CurInitVelocity;
+ m_CurState = State.Up;
+ }
+ break;
+ case State.Up:
+ if(m_CurAnim != m_CurUpMotion)
+ {
+ m_Animator.CrossFade(m_CurUpMotion, 0.2f);
+ m_CurAnim = m_CurUpMotion;
+ }
+ if(m_Body.Velocity.y <= 0)
+ {
+ m_CurState = State.Down;
+ }
+ break;
+ case State.Down:
+ if(m_CurAnim != m_CurDownMotion)
+ {
+ m_Animator.CrossFade(m_CurDownMotion, 0.2f);
+ m_CurAnim = m_CurDownMotion;
+ }
+ if(m_Collider.IsOnGround)
+ {
+ m_CurState = State.End;
+ }
+ break;
+ case State.End:
+ if(m_CurAnim != m_AnimJumpEnd)
+ {
+ m_Animator.CrossFade(m_AnimJumpEnd, 0.2f);
+ m_CurAnim = m_AnimJumpEnd;
+ }
+ break;
+ }
}
public override void OnLateUpdate()
@@ -198,16 +207,12 @@ public class JumpAbility : AbilityBase
}
/// <summary>
- /// 着地
+ /// 结束
/// </summary>
/// <returns></returns>
public bool IsJumpDone()
{
- bool onGround = m_Collider.IsOnGround;
- if (!onGround)
- return false;
-
- if (m_CurAnim == m_AnimJumpEnd)
+ if (m_CurState == State.End)
{
AnimatorStateInfo state = m_Animator.GetCurrentAnimatorStateInfo(0);
return state.shortNameHash == m_AnimJumpEnd && state.normalizedTime >= 1f;
@@ -216,6 +221,15 @@ public class JumpAbility : AbilityBase
return false;
}
+ /// <summary>
+ /// 着地
+ /// </summary>
+ /// <returns></returns>
+ public bool IsJumpGround()
+ {
+ return m_CurState == State.End && m_Collider.IsOnGround;
+ }
+
public void AddTrigger(Trigger trigger)
{
if (trigger == null || m_Triggers.Contains(trigger))
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs b/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs
index 3b1de41d..4e71dcf6 100644
--- a/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionJumpForward.cs
@@ -2,17 +2,20 @@
using System.Collections.Generic;
using UnityEngine;
-public class ActionJumpForward : MonoBehaviour
+// 垂直跳跃,切换到jump ability
+public class ActionJumpForward : ActionSwitchAbility
{
- // Start is called before the first frame update
- void Start()
- {
-
- }
+ private JumpAbility m_JumpAbility;
- // Update is called once per frame
- void Update()
- {
-
- }
+ public ActionJumpForward(AbilitySystem system, JumpAbility jumpAbility)
+ : base(system, jumpAbility)
+ {
+ m_JumpAbility = jumpAbility;
+ }
+
+ public override void Execute()
+ {
+ m_JumpAbility.SetDir(JumpAbility.Direction.Forward);
+ base.Execute(); // switch to jump ability
+ }
}
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs
index 913eb3d2..a4e62294 100644
--- a/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs
+++ b/Assets/Scripts/AbilitySystem/Actions/ActionSetPosition.cs
@@ -2,17 +2,14 @@
using System.Collections.Generic;
using UnityEngine;
-public class ActionSetPosition : MonoBehaviour
+public class ActionSetPosition : ActionBase
{
- // Start is called before the first frame update
- void Start()
- {
-
- }
+ public ActionSetPosition()
+ {
+ }
- // Update is called once per frame
- void Update()
- {
-
- }
+ public override void Execute()
+ {
+ throw new System.NotImplementedException();
+ }
}
diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta
index 17a426dd..bfa55719 100644
--- a/Assets/Scripts/AbilitySystem/Actions/ActionEffects.meta
+++ b/Assets/Scripts/AbilitySystem/Conditions/Camera.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 0b5ccfefc2e6b104a8566f4da9a16c5f
+guid: 8d7f28027add89c448243fbe5ea14144
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs
index 73b9b380..8dff29da 100644
--- a/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionBase.cs
@@ -127,7 +127,7 @@ public sealed class ConditionNone : ConditionBase
/// </summary>
public sealed class ConditionMultiAnd : ConditionBase
{
- List<ConditionBase> m_Conditions;
+ List<ConditionBase> m_Conditions = new List<ConditionBase>();
public ConditionMultiAnd(List<ConditionBase> conditions)
: base()
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs
new file mode 100644
index 00000000..47f74cab
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs
@@ -0,0 +1,18 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ConditionJumpOnGround : ConditionBase
+{
+ JumpAbility m_Jump;
+
+ public ConditionJumpOnGround(JumpAbility jump)
+ {
+ m_Jump = jump;
+ }
+
+ public override bool Evaluate()
+ {
+ return m_Jump.IsJumpGround();
+ }
+}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta
new file mode 100644
index 00000000..33f0341b
--- /dev/null
+++ b/Assets/Scripts/AbilitySystem/Conditions/ConditionJumpOnGround.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1a04452218ec0b849bbed3d0ba35cd12
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Test/SaionjiScript_Ability.cs b/Assets/Scripts/Test/SaionjiScript_Ability.cs
index c3fa94ce..10f358e4 100644
--- a/Assets/Scripts/Test/SaionjiScript_Ability.cs
+++ b/Assets/Scripts/Test/SaionjiScript_Ability.cs
@@ -19,6 +19,18 @@ public partial class SaionjiScript : MonoBehaviour
return new ConditionAnd(c1, c2);
}
+
+ ConditionBase Ands(params ConditionBase[] cond)
+ {
+ List<ConditionBase> conditions = new List<ConditionBase>();
+ for(int i = 0;i < cond.Length; ++i)
+ {
+ conditions.Add(cond[i]);
+ }
+ ConditionMultiAnd and = new ConditionMultiAnd(conditions);
+ return and;
+ }
+
ConditionBase Or(ConditionBase c1, ConditionBase c2)
{
return new ConditionOr(c1,c2);
@@ -42,8 +54,8 @@ public partial class SaionjiScript : MonoBehaviour
jumpConfig.collider = m_BodyCollider;
jumpConfig.body = m_Body;
jumpConfig.neutralJumpSpeedY = 10f;
- jumpConfig.fowardJumpSpeedX = 1f;
- jumpConfig.backwardJumpSpeedX = -1f;
+ jumpConfig.fowardJumpSpeedX = 5f;
+ jumpConfig.backwardJumpSpeedX = -5f;
jumpConfig.animJump = Anim_JumpStart;
jumpConfig.animJumpEnd = Anim_JumpEnd;
jumpConfig.animNU = Anim_JumpUp;
@@ -83,6 +95,7 @@ public partial class SaionjiScript : MonoBehaviour
ActionTowardRight towardRight = new ActionTowardRight(this.transform);
ActionJump toJump = new ActionJump(m_AbilitySystem, jump);
+ ActionJumpForward toJumpForward = new ActionJumpForward(m_AbilitySystem, jump);
ActionSwitchAbility switchToMove = new ActionSwitchAbility(m_AbilitySystem, move);
ActionSwitchAbility switchToIdle = new ActionSwitchAbility(m_AbilitySystem, idle);
@@ -114,6 +127,7 @@ public partial class SaionjiScript : MonoBehaviour
ConditionNoMoveButtonHold condNoMoveButtonHold = new ConditionNoMoveButtonHold();
ConditionButtonHold condRightButtonHold = new ConditionButtonHold(GamepadButton.Right);
ConditionButtonHold condLeftButtonHold = new ConditionButtonHold(GamepadButton.Left);
+ ConditionCommand condUpCmd = new ConditionCommand(GamepadButton.Up);
ConditionCommand condTriangleCmd = new ConditionCommand(GamepadButton.Triangle);
ConditionCommand condCircleCmd = new ConditionCommand(GamepadButton.Circle);
ConditionCommand condCrossCmd = new ConditionCommand(GamepadButton.Cross);
@@ -128,6 +142,7 @@ public partial class SaionjiScript : MonoBehaviour
ConditionHit condIsHit = new ConditionHit(this);
ConditionJumpDone condJumpDone = new ConditionJumpDone(jump);
+ ConditionJumpOnGround condJumpOnGround = new ConditionJumpOnGround(jump);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// common triggers
@@ -142,7 +157,7 @@ public partial class SaionjiScript : MonoBehaviour
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// idle ability
- trigger = new Trigger(condTriangleCmd, toJump) ;
+ trigger = new Trigger(condUpCmd, toJump) ;
idle.AddTrigger(trigger);
trigger = new Trigger(And(condTowardRight, condDRC), new List<ActionBase> { wipeCmdRecord, switchToSuperKick });
idle.AddTrigger(trigger);
@@ -166,6 +181,8 @@ public partial class SaionjiScript : MonoBehaviour
idle.AddTrigger(triggerTurnLeft);
// move ability
+ trigger = new Trigger(Or(Ands(condRightButtonHold, condTowardRight, condUpCmd), Ands(condLeftButtonHold, condTowardLeft, condUpCmd)), toJumpForward);
+ move.AddTrigger(trigger);
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 });
@@ -187,8 +204,10 @@ public partial class SaionjiScript : MonoBehaviour
trigger = new Trigger(condCrossCmd, switchToSideKick);
move.AddTrigger(trigger);
- // jump ability
- trigger = new Trigger(condJumpDone, switchToIdle);
+ // jump ability
+ trigger = new Trigger(condJumpOnGround, new ActionSetVelocity(m_Body, Vector3.zero), TriggerOnlyOnce.On, TriggerSwallow.Off);
+ jump.AddTrigger(trigger);
+ trigger = new Trigger(condJumpDone, switchToIdle);
jump.AddTrigger(trigger);
// dash ability