using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 触发条件基类
///
public abstract class ConditionBase
{
public ConditionBase()
{
}
public abstract bool 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;
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;
}
}