2024-06-23 19:12:22 +01:00

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;
}
}
}
}