SHADE_Y3/Assets/Scripts/Gameplay/AIBehaviour/BehaviourTree/Flow/BehaviourTreeSelector.cs

53 lines
1.8 KiB
C#

/*********************************************************************
* \file BehaviourTreeSelector.cs
* \author Ryan Wang Nian Jing
* \brief Based off Kheng Ian's SC_BTSelector.cs
* Selectors function like "OR" nodes, returning success on the
* first successful child and stopping operation
*
* \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction
or disclosure of this file or its contents without the prior written
consent of DigiPen Institute of Technology is prohibited.
*********************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SHADE_Scripting.AIBehaviour.BehaviourTree
{
public class BehaviourTreeSelector : BehaviourTreeNode
{
public BehaviourTreeSelector(string name) : base(name) { }
public BehaviourTreeSelector(string name, List<BehaviourTreeNode> children) :
base(name, children)
{ }
public override BehaviourTreeNodeStatus Evaluate()
{
onEnter(BehaviourTreeNodeStatus.RUNNING);
for (int i = 0; i < children.Count; ++i)
{
switch (children[i].Evaluate())
{
case BehaviourTreeNodeStatus.RUNNING:
status = BehaviourTreeNodeStatus.RUNNING;
onExit(BehaviourTreeNodeStatus.RUNNING);
return status;
case BehaviourTreeNodeStatus.SUCCESS:
status = BehaviourTreeNodeStatus.SUCCESS;
onExit(BehaviourTreeNodeStatus.SUCCESS);
return status;
case BehaviourTreeNodeStatus.FAILURE:
continue;
}
}
status = BehaviourTreeNodeStatus.FAILURE;
onExit(BehaviourTreeNodeStatus.FAILURE);
return status;
}
}
}