From bdf47cf0fd36a5c858575a805cca70ab623868eb Mon Sep 17 00:00:00 2001 From: chai Date: Thu, 29 Oct 2020 19:39:42 +0800 Subject: *misc --- Assets/Scripts/Avatar/Conditions/ConditionBase.cs | 196 ++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 Assets/Scripts/Avatar/Conditions/ConditionBase.cs (limited to 'Assets/Scripts/Avatar/Conditions/ConditionBase.cs') diff --git a/Assets/Scripts/Avatar/Conditions/ConditionBase.cs b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs new file mode 100644 index 00000000..8dff29da --- /dev/null +++ b/Assets/Scripts/Avatar/Conditions/ConditionBase.cs @@ -0,0 +1,196 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +/// +/// 触发条件基类 +/// +public abstract class ConditionBase +{ + + public ConditionBase() + { + } + + public abstract bool Evaluate(); + +} + +/// +/// 两个condition都达成才会返回真 +/// +public sealed class ConditionNot : ConditionBase +{ + ConditionBase m_Condition; + + + public ConditionNot(ConditionBase cond) + : base() + { + m_Condition = cond; + } + + public override bool Evaluate() + { + return !m_Condition.Evaluate(); + } +} + +/// +/// 总是满足 +/// +public sealed class ConditionAlways : ConditionBase +{ + public override bool Evaluate() + { + return true; + } +} + +/// +/// 总是不满足 +/// +public sealed class ConditionAlwaysNot : ConditionBase +{ + public override bool Evaluate() + { + return false; + } +} + +/// +/// 两个condition都达成才会返回真 +/// +public sealed class ConditionAnd : ConditionBase +{ + ConditionBase m_FirstCondition, m_LastCondition; + + + public ConditionAnd(ConditionBase first, ConditionBase last) + : base() + { + m_FirstCondition = first; + m_LastCondition = last; + } + + public override bool Evaluate() + { + return m_FirstCondition.Evaluate() && m_LastCondition.Evaluate(); + } +} + +/// +/// 两个condition至少一个达成才会返回真 +/// +public sealed class ConditionOr : ConditionBase +{ + ConditionBase m_FirstCondition, m_LastCondition; + + + public ConditionOr(ConditionBase first, ConditionBase last) + : base() + { + m_FirstCondition = first; + m_LastCondition = last; + } + + public override bool Evaluate() + { + return m_FirstCondition.Evaluate() || m_LastCondition.Evaluate(); + } +} + + +/// +/// 两个condition都不达成才会返回真 +/// +public sealed class ConditionNone : ConditionBase +{ + ConditionBase m_FirstCondition, m_LastCondition; + + public ConditionNone(ConditionBase first, ConditionBase last) + : base() + { + m_FirstCondition = first; + m_LastCondition = last; + } + + public override bool Evaluate() + { + return !m_FirstCondition.Evaluate() && !m_LastCondition.Evaluate(); + } +} + + +/// +/// 多个condition都达成才会返回真 +/// +public sealed class ConditionMultiAnd : ConditionBase +{ + List m_Conditions = new List(); + + public ConditionMultiAnd(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach(var condition in m_Conditions) + { + if(!condition.Evaluate()) + return false; + } + return true; + } +} + +/// +/// 多个condition至少一个达成才会返回真 +/// +public sealed class ConditionMultiOr : ConditionBase +{ + List m_Conditions; + + public ConditionMultiOr(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach (var condition in m_Conditions) + { + if (condition.Evaluate()) + return true; + } + return false; + } +} + +/// +/// 多个condition都不达成才会返回真 +/// +public sealed class ConditionMultiNone : ConditionBase +{ + List m_Conditions; + + public ConditionMultiNone(List conditions) + : base() + { + m_Conditions.AddRange(conditions); + } + + public override bool Evaluate() + { + foreach (var condition in m_Conditions) + { + if (condition.Evaluate()) + return false; + } + return true; + } +} + -- cgit v1.1-26-g67d0