diff options
author | chai <215380520@qq.com> | 2023-05-15 19:16:29 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-05-15 19:16:29 +0800 |
commit | 85629d871b1cbf65e57c8e25b2145c0b77f7e353 (patch) | |
tree | d52121acd9c7b8975b903c43d70348c3afedde87 /WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs | |
parent | 3b036c6de871aa519a1f7fbfb52e09618945041f (diff) |
*misc
Diffstat (limited to 'WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs')
-rw-r--r-- | WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs | 106 |
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(); } - } - + */ } |