using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BehaviorTreeSlayer
{
    public class MagicQueue : CompositeNode
    {
        TreeNode last;
        public override void Enter(object args)
        {

        }
        public override void Exit(object args)
        {

        }
        public override TaskResult Tick(double dt, object args = null)
        {
            childs.Sort((a, b) => a.x < b.x ? -1 : 1);
            if (childs.Count == 0)
            {
                return TaskResult.Fail;
            }
            TreeNode curNode = childs[Index];
            if (last != curNode)
            {
                curNode.Enter(args);
            }
            TaskResult result = curNode.Tick(dt, args);
            last = curNode;
            curNode.state = result;
            if (result == TaskResult.Running)
            {
                return TaskResult.Running;
            }
            if (result == TaskResult.OK)
            {
                curNode.Exit(args);
                Index = (Index + 1) % childs.Count;
                return TaskResult.OK;
            }
            return TaskResult.Fail;
        }
    }
}