diff options
Diffstat (limited to 'Assets/Scripts/AbilitySystem')
9 files changed, 122 insertions, 14 deletions
diff --git a/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs b/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs index 330850e2..8b1a5549 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs @@ -38,6 +38,11 @@ public abstract class AbilityBase /// </summary>
public virtual void OnUpdate() { }
+ /// <summary>
+ /// 在物理模拟之后更新
+ /// </summary>
+ public virtual void OnLateUpdate() { }
+
/// <summary>
/// 过渡到下一个ability的回调
/// </summary>
diff --git a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs index 9798d7a2..fc4ce7e1 100644 --- a/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs +++ b/Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs @@ -13,6 +13,8 @@ public class AttackAbility : AbilityBase /// </summary>
private List<Trigger> m_Triggers = new List<Trigger>();
+ private List<Trigger> m_LateTriggers = new List<Trigger>();
+
/// <summary>
/// 从动画结束开始计时
/// </summary>
@@ -79,6 +81,16 @@ public class AttackAbility : AbilityBase }
}
+ // 在物理模拟之后
+ public override void OnLateUpdate()
+ {
+ foreach (var trigger in m_LateTriggers)
+ {
+ if (trigger.Update() && trigger.Swallow)
+ break;
+ }
+ }
+
public void AddTrigger(Trigger trigger)
{
if (trigger == null || m_Triggers.Contains(trigger))
@@ -86,4 +98,11 @@ public class AttackAbility : AbilityBase m_Triggers.Add(trigger);
}
+ public void AddLateTrigger(Trigger trigger)
+ {
+ if (trigger == null || m_LateTriggers.Contains(trigger))
+ return;
+ m_LateTriggers.Add(trigger);
+ }
+
}
diff --git a/Assets/Scripts/AbilitySystem/AbilitySystem.cs b/Assets/Scripts/AbilitySystem/AbilitySystem.cs index 0441e813..46156c55 100644 --- a/Assets/Scripts/AbilitySystem/AbilitySystem.cs +++ b/Assets/Scripts/AbilitySystem/AbilitySystem.cs @@ -37,6 +37,14 @@ public class AbilitySystem } } + public static void LateUpdate() + { + foreach (var systems in AbilitySystems) + { + systems.OnLateUpdate(); + } + } + public void ForceStart(AbilityBase ability) { if (ability == null) @@ -62,6 +70,15 @@ public class AbilitySystem } } + public void OnLateUpdate() + { + if(m_Currrent != null) + { + m_Currrent.OnLateUpdate(); + } + } + + public void SwitchToAbility(AbilityBase targetAbility) { if (m_Currrent != null) diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs new file mode 100644 index 00000000..b276d2ef --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ActionLog : ActionBase +{ + string m_Content = ""; + + public ActionLog(string content) + { + m_Content = content; + } + + public override void Execute() + { + Debug.Log(m_Content); + } +} diff --git a/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta new file mode 100644 index 00000000..92995276 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 012a5a398b677f94abeb0aa12659d5ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs index b50121fe..d36cc538 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs @@ -5,13 +5,17 @@ using UnityEngine; // hitbox击中
public class ConditionHit : ConditionBase
{
- public ConditionHit()
+ IInteractable m_Obj;
+
+ public ConditionHit(IInteractable obj)
{
+ m_Obj = obj;
- }
+ }
public override bool Evaluate()
{
- throw new System.NotImplementedException();
+ bool isHit = m_Obj.IsHit();
+ return isHit;
}
}
diff --git a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs index b4acd71a..8a76528d 100644 --- a/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs +++ b/Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs @@ -2,17 +2,19 @@ using System.Collections.Generic;
using UnityEngine;
-public class ConditionHurt : MonoBehaviour
+// hurtbox被击中
+public class ConditionHurt : ConditionBase
{
- // Start is called before the first frame update
- void Start()
- {
-
- }
+ IInteractable m_Obj;
- // Update is called once per frame
- void Update()
- {
-
- }
+ public ConditionHurt(IInteractable obj)
+ {
+ m_Obj = obj;
+ }
+
+ public override bool Evaluate()
+ {
+ bool isHit = m_Obj.IsHit();
+ return isHit;
+ }
}
diff --git a/Assets/Scripts/AbilitySystem/IInteractable.cs b/Assets/Scripts/AbilitySystem/IInteractable.cs new file mode 100644 index 00000000..23e49912 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/IInteractable.cs @@ -0,0 +1,21 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IInteractable +{ + PhysicsPrimitive[] GetAllPrimitive(); + + PhysicsBox GetHitbox(); + + PhysicsBox GetHurtbox(); + + PhysicsPrimitive[] GetAllHit(); + + bool IsHit(); + + bool IsHurt(); + + + +} diff --git a/Assets/Scripts/AbilitySystem/IInteractable.cs.meta b/Assets/Scripts/AbilitySystem/IInteractable.cs.meta new file mode 100644 index 00000000..ae065c04 --- /dev/null +++ b/Assets/Scripts/AbilitySystem/IInteractable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6f243903bde9804488701c6d0f7920a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |