public void Add(WorldUpdate src) { if (src is Fork fork) { foreach (var act in fork.m_Options) { Add(act); } } else if (src.IsLegal() && !m_Options.Contains(src)) { if (src is Join join) { var ub = m_Options.Count; while (0 <= --ub) { if (m_Options[ub] is Join prior_join && prior_join.ForkMerge(join)) { return; } } } m_Options.Add(src); } }
public SharedPlan(WorldUpdate src, Condition <Actor> done) { #if DEBUG if (!src.IsLegal()) { throw new InvalidOperationException("illegal objective"); } #endif m_Plan = src; m_Target = done; }
public override bool IsLegal() { var ub = m_Options.Count; while (0 <= --ub) { if (m_Options[ub].IsLegal()) { return(m_Sequel.IsLegal()); } } return(false); }
public bool IsLegal() { return(!m_Target.IsDone() && m_Plan.IsLegal()); }