summaryrefslogtreecommitdiff
path: root/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-05-15 19:16:29 +0800
committerchai <215380520@qq.com>2023-05-15 19:16:29 +0800
commit85629d871b1cbf65e57c8e25b2145c0b77f7e353 (patch)
treed52121acd9c7b8975b903c43d70348c3afedde87 /WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs
parent3b036c6de871aa519a1f7fbfb52e09618945041f (diff)
*misc
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs')
-rw-r--r--WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs106
1 files changed, 20 insertions, 86 deletions
diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs
index ed69284..c8607fc 100644
--- a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs
+++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs
@@ -1,110 +1,44 @@
+using System.Collections;
using System.Collections.Generic;
-using System.Diagnostics.Tracing;
+using UnityEngine;
namespace WK
{
/// <summary>
- /// 事件发生后检测条件的被动触发器
+ /// 保存action并由OnActive()指定触发时机和条件
/// </summary>
- public class Trigger
+ public abstract class Trigger
{
- public class ConditionBase
- {
- public virtual bool Evaluate(params object[] args) { return false; }
-
- public static ConditionBase Always = new ConditionAlways();
- public static ConditionBase AlwaysNot = new ConditionAlwaysNot();
- }
+ public delegate void TriggerHandler(params object[] args);
- public class ConditionAlways : ConditionBase
- {
- public override bool Evaluate(params object[] args)
- {
- return true;
- }
- }
+ public event TriggerHandler handler;
- public class ConditionAlwaysNot : ConditionBase
- {
- public override bool Evaluate(params object[] args)
- {
- return false;
- }
- }
+ //需要指定调用FireTrigger的时机
+ public abstract void OnActive();
- public class ConditionAnd : ConditionBase
+ public virtual void OnDeactive()
{
- private ConditionBase m_Left;
- private ConditionBase m_Right;
- public ConditionAnd(ConditionBase left, ConditionBase right)
- {
- m_Left = left;
- m_Right = right;
- }
- public override bool Evaluate(params object[] args)
- {
- return m_Left.Evaluate(args) && m_Right.Evaluate(args);
- }
}
- public class ConditionOr : ConditionBase
+ protected void FireTrigger(params object[] args)
{
- private ConditionBase m_Left;
- private ConditionBase m_Right;
- public ConditionOr(ConditionBase left, ConditionBase right)
- {
- m_Left = left;
- m_Right = right;
- }
- public override bool Evaluate(params object[] args)
- {
- return m_Left.Evaluate(args) || m_Right.Evaluate(args);
- }
+ handler?.Invoke(args);
}
- public delegate void Action(params object[] args);
-
- // 触发事件
- private string m_Event;
- // 触发条件
- private ConditionBase m_Condition;
- // 触发操作
- private List<Action> m_Actions = new List<Action>();
-
- public void SetEvent(string eventType)
- {
- if (m_Event != string.Empty || m_Event != null)
- {
- GlobalEventManager.Instance.UnRegister(m_Event, OnEvent);
- }
- m_Event = eventType;
- GlobalEventManager.Instance.Register(eventType, OnEvent);
- }
-
- public void AddAction(Action action)
- {
- m_Actions.Add(action);
- }
-
- public void SetCondition(ConditionBase condition)
+ }
+ /*
+ public class OnPlayerHurt : Trigger
+ {
+ public override void OnActive()
{
- m_Condition = condition;
+ UnitManager.Instance.player.AddObserver("Player.Hurt", OnPlayerHurtCallbak);
}
- public void OnEvent(params object[] args)
+ private void OnPlayerHurtCallbak()
{
- if (m_Condition == null)
- return;
- if (m_Condition.Evaluate())
- {
- foreach (Action action in m_Actions)
- {
- action.Invoke(args);
- }
- }
+ FireTrigger();
}
-
}
-
+ */
}