summaryrefslogtreecommitdiff
path: root/Assets/Scripts/AbilitySystem
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/AbilitySystem')
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/AbilityBase.cs5
-rw-r--r--Assets/Scripts/AbilitySystem/Abilities/AttackAbility.cs19
-rw-r--r--Assets/Scripts/AbilitySystem/AbilitySystem.cs17
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionLog.cs18
-rw-r--r--Assets/Scripts/AbilitySystem/Actions/ActionLog.cs.meta11
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHit.cs10
-rw-r--r--Assets/Scripts/AbilitySystem/Conditions/Interactive/ConditionHurt.cs24
-rw-r--r--Assets/Scripts/AbilitySystem/IInteractable.cs21
-rw-r--r--Assets/Scripts/AbilitySystem/IInteractable.cs.meta11
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: