Skip to content

Instantly share code, notes, and snippets.

@Rubentxu
Forked from mzaks/Entitas-BT.cs
Created February 21, 2017 12:28
Show Gist options
  • Save Rubentxu/12ecb55dd50c8b3857f906f64fd79359 to your computer and use it in GitHub Desktop.
Save Rubentxu/12ecb55dd50c8b3857f906f64fd79359 to your computer and use it in GitHub Desktop.
Sketch for Entitas-CSharp Behaviour Tree implementation
// Based on http://www.gamasutra.com/blogs/ChrisSimpson/20140717/221339/Behavior_trees_for_AI_How_they_work.php
public enum NodeStatus
{
Success, Failure, Running
}
public interface IBehaviorNode
{
NodeStatus Execute(Entity entity);
}
public sealed class Sequence : IBehaviorNode
{
private IBehaviorNode[] nodes;
public Sequence(params IBehaviorNode[] nodes)
{
this.nodes = nodes;
}
public NodeStatus Execute(Entity entity)
{
var result = NodeStatus.Success;
for (int i = 0; i < nodes.Length; i++)
{
result = nodes[i].Execute(entity);
if (result == NodeStatus.Running || result == NodeStatus.Failure){
return result;
}
}
return result;
}
}
public sealed class Selector : IBehaviorNode
{
private IBehaviorNode[] nodes;
public Selector(params IBehaviorNode[] nodes)
{
this.nodes = nodes;
}
public NodeStatus Execute(Entity entity)
{
var result = NodeStatus.Success;
for (int i = 0; i < nodes.Length; i++)
{
result = nodes[i].Execute(entity);
if (result == NodeStatus.Running || result == NodeStatus.Success){
return result;
}
}
return result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment