Add utility AI (#806)

Co-authored-by: Pieter-Jan Briers <pieterjan.briers@gmail.com>
Co-authored-by: Metal Gear Sloth <metalgearsloth@gmail.com>
Co-authored-by: Pieter-Jan Briers <pieterjan.briers+git@gmail.com>
This commit is contained in:
metalgearsloth
2020-06-18 22:52:44 +10:00
committed by GitHub
parent 9b8cedf6c6
commit 5391d3c72a
211 changed files with 10335 additions and 527 deletions

View File

@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
namespace Content.Server.AI.Operators.Sequences
{
/// <summary>
/// Sequential chain of operators
/// Saves having to duplicate stuff like MoveTo and PickUp everywhere
/// </summary>
public abstract class SequenceOperator : AiOperator
{
public Queue<AiOperator> Sequence { get; protected set; }
public override Outcome Execute(float frameTime)
{
if (Sequence.Count == 0)
{
return Outcome.Success;
}
var op = Sequence.Peek();
op.TryStartup();
var outcome = op.Execute(frameTime);
switch (outcome)
{
case Outcome.Success:
op.Shutdown(outcome);
// Not over until all operators are done
Sequence.Dequeue();
return Outcome.Continuing;
case Outcome.Continuing:
return Outcome.Continuing;
case Outcome.Failed:
op.Shutdown(outcome);
Sequence.Clear();
return Outcome.Failed;
default:
throw new ArgumentOutOfRangeException();
}
}
}
}