55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace MBT
|
|
{
|
|
[AddComponentMenu("")]
|
|
[MBTNode(name = "Root", order = 200)]
|
|
public class Root : Node, IParentNode
|
|
{
|
|
public override void AddChild(Node node)
|
|
{
|
|
// Allow only one children
|
|
if (this.children.Count > 0)
|
|
{
|
|
Node child = this.children[0];
|
|
if (child == node) {
|
|
return;
|
|
}
|
|
child.parent.RemoveChild(child);
|
|
this.children.Clear();
|
|
}
|
|
// Remove parent in case there is one already
|
|
if (node.parent != null) {
|
|
node.parent.RemoveChild(node);
|
|
}
|
|
this.children.Add(node);
|
|
node.parent = this;
|
|
}
|
|
|
|
public override NodeResult Execute()
|
|
{
|
|
if (children.Count == 1) {
|
|
Node child = children[0];
|
|
if (child.status == Status.Success || child.status == Status.Failure) {
|
|
return NodeResult.From(child.status);
|
|
}
|
|
// Set last tick to current time because execution just started (this reduces first deltaTime to 0)
|
|
behaviourTree.LastTick = Time.time;
|
|
return child.runningNodeResult;
|
|
}
|
|
return NodeResult.failure;
|
|
}
|
|
|
|
public override void RemoveChild(Node node)
|
|
{
|
|
if (children.Contains(node))
|
|
{
|
|
children.Remove(node);
|
|
node.parent = null;
|
|
}
|
|
}
|
|
}
|
|
}
|