using System; using System.Collections.Generic; using CleverCrow.Fluid.BTs.Tasks; using CleverCrow.Fluid.BTs.Trees; using UnityEngine; namespace CleverCrow.Fluid.BTs.TaskParents { public abstract class TaskParentBase : GenericTaskBase, ITaskParent { private int _lastTickCount; public IBehaviorTree ParentTree { get; set; } public TaskStatus LastStatus { get; private set; } public virtual string Name { get; set; } public Func Info { get; set; } public bool Enabled { get; set; } = true; public List Children { get; } = new List(); protected virtual int MaxChildren { get; } = -1; public GameObject Owner { get; set; } public override TaskStatus Update () { base.Update(); UpdateTicks(); var status = OnUpdate(); LastStatus = status; if (status != TaskStatus.Continue) { Reset(); } return status; } private void UpdateTicks () { if (ParentTree == null) { return; } if (_lastTickCount != ParentTree.TickCount) { Reset(); } _lastTickCount = ParentTree.TickCount; } public virtual void End () { throw new System.NotImplementedException(); } protected virtual TaskStatus OnUpdate () { return TaskStatus.Success; } public virtual void Reset () { } public virtual ITaskParent AddChild (ITask child) { if (!child.Enabled) { return this; } if (Children.Count < MaxChildren || MaxChildren < 0) { Children.Add(child); } return this; } } }