using System.Collections; using System.Collections.Generic; using UnityEngine; public enum TriggerOnlyOnce { Off = 0, On = 1, } public enum TriggerSwallow { Off = 0, On = 1 } /// /// 不同效果的trigger继承这个基类 /// public sealed class Trigger { private TriggerSwallow m_Swallow; public bool Swallow { get { return m_Swallow == TriggerSwallow.On; } } private ConditionBase m_Condition; private List m_ActionChain = new List(); private TriggerOnlyOnce m_OnlyOnce; private bool m_IsTriggered; public Trigger(ConditionBase condition, List actions, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { m_OnlyOnce = onlyOnce; m_Swallow = swallow; m_Condition = condition; m_ActionChain.AddRange(actions); } public Trigger(ConditionBase condition, ActionBase action, TriggerOnlyOnce onlyOnce = TriggerOnlyOnce.Off, TriggerSwallow swallow = TriggerSwallow.On) { m_OnlyOnce = onlyOnce; m_Swallow = swallow; m_Condition = condition; m_ActionChain.Add(action); } //重置触发器的参数 public void Reset() { m_IsTriggered = false; } /// /// 如果触发执行了,返回true,否则返回false /// /// public bool Update() { if (m_IsTriggered && m_OnlyOnce == TriggerOnlyOnce.On) return false; if (m_Condition.Evaluate()) { foreach(var action in m_ActionChain) { action.Execute(); } m_IsTriggered = true; return true; } return false; } }