From 85629d871b1cbf65e57c8e25b2145c0b77f7e353 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Mon, 15 May 2023 19:16:29 +0800 Subject: *misc --- .../Assets/Scripts/Tools/TriggerSystem/Action.cs | 16 +++ .../Scripts/Tools/TriggerSystem/Action.cs.meta | 11 +++ .../Scripts/Tools/TriggerSystem/ActiveTrigger.cs | 19 ---- .../Tools/TriggerSystem/ActiveTrigger.cs.meta | 11 --- .../Tools/TriggerSystem/GlobalActiveTrigger.cs | 19 ++++ .../TriggerSystem/GlobalActiveTrigger.cs.meta | 11 +++ .../Tools/TriggerSystem/GlobalPassiveTrigger.cs | 110 +++++++++++++++++++++ .../TriggerSystem/GlobalPassiveTrigger.cs.meta | 11 +++ .../Assets/Scripts/Tools/TriggerSystem/Trigger.cs | 106 ++++---------------- .../Scripts/Tools/TriggerSystem/Trigger.cs.meta | 2 +- 10 files changed, 199 insertions(+), 117 deletions(-) create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs.meta delete mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs delete mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs.meta create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs.meta create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs create mode 100644 WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs.meta (limited to 'WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem') diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs new file mode 100644 index 0000000..7405c88 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs @@ -0,0 +1,16 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace WK +{ + + public abstract class Action + { + public abstract void Execute(params object[] args); + + public virtual void Init() { } + + } + +} diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs.meta new file mode 100644 index 0000000..124d597 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Action.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce0de120c2520f84492089c52286f7cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs deleted file mode 100644 index 1a4e988..0000000 --- a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Newtonsoft.Json.Serialization; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace WK -{ - - /// - /// 定期轮训条件的主动式触发器。不安全 - /// - public class ActiveTrigger - { - - - - } - -} diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs.meta deleted file mode 100644 index 1fa37dc..0000000 --- a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/ActiveTrigger.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6e06c17e867b36f4bb0b6796ed74b89b -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs new file mode 100644 index 0000000..a7398d5 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs @@ -0,0 +1,19 @@ +using Newtonsoft.Json.Serialization; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace WK +{ + + /// + /// 定期轮训条件的主动式触发器。不安全 + /// + public class GlobalActiveTrigger + { + + + + } + +} diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs.meta new file mode 100644 index 0000000..1fa37dc --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalActiveTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e06c17e867b36f4bb0b6796ed74b89b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs new file mode 100644 index 0000000..f21cee6 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs @@ -0,0 +1,110 @@ +using System.Collections.Generic; +using System.Diagnostics.Tracing; + +namespace WK +{ + + /// + /// 事件发生后检测条件的被动触发器 + /// + public class GlobalPassiveTrigger + { + 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 class ConditionAlways : ConditionBase + { + public override bool Evaluate(params object[] args) + { + return true; + } + } + + public class ConditionAlwaysNot : ConditionBase + { + public override bool Evaluate(params object[] args) + { + return false; + } + } + + public class ConditionAnd : ConditionBase + { + 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 + { + 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); + } + } + + public delegate void Action(params object[] args); + + // 触发事件 + private string m_Event; + // 触发条件 + private ConditionBase m_Condition; + // 触发操作 + private List m_Actions = new List(); + + 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) + { + m_Condition = condition; + } + + public void OnEvent(params object[] args) + { + if (m_Condition == null) + return; + if (m_Condition.Evaluate()) + { + foreach (Action action in m_Actions) + { + action.Invoke(args); + } + } + } + + } + +} diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs.meta new file mode 100644 index 0000000..c5f1c19 --- /dev/null +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/GlobalPassiveTrigger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3ee81c4dceea3346b4c5e7b1d371e92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: 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 { /// - /// 事件发生后检测条件的被动触发器 + /// 保存action并由OnActive()指定触发时机和条件 /// - 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 m_Actions = new List(); - - 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(); } - } - + */ } diff --git a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs.meta b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs.meta index c5f1c19..08630d3 100644 --- a/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs.meta +++ b/WorldlineKeepers/Assets/Scripts/Tools/TriggerSystem/Trigger.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c3ee81c4dceea3346b4c5e7b1d371e92 +guid: 93ca5bd37a4caea40ad66ea9d41f8530 MonoImporter: externalObjects: {} serializedVersion: 2 -- cgit v1.1-26-g67d0