root/src/BRAINSFramework/Behaviors/SelectorBehavior.cs

User picture

Author: conkerjo

Revision: 30 («Previous)


File Size: 1.81 KB

(July 05, 2009 18:01 UTC) Almost 3 years ago

Behavior Refactoring

 
Show/hide line numbers

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Brains.Framework.Designer;


namespace Brains.Framework.Behaviors
{
    /// <summary>
    /// The Selector Behavior is a list of behaviors that are tried one after the other until one succeeds.
    /// </summary>
    /// <remarks>Only fails on a critical error, otherwise continues to loop until one succeeds</remarks>
    [BehaviorAttribute("Selector")]
    public class SelectorBehavior : CompositeBehavior, ICompositeBehavior
    {

        public SelectorBehavior()
        {

        }
        
        /// <summary>
        /// Runs the currently active Sub Behavior
        /// </summary>
        /// <param name="gameTime"></param>
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);
        }
        
        public override void OnSuccess()
        {
            Reset();
        }

        public override void OnFailure()
        {
            Reset();
        }

        public override void OnSubBehaviorFailure()
        {
            SubBehaviors[CurrentSubBehavior].State = BehaviorState.Idle;
            CurrentSubBehavior++;
            if (CurrentSubBehavior == SubBehaviors.Count)
            {
                //Once a selector has reached the end, loop back to start
                CurrentSubBehavior = 0;
                State = BehaviorState.Failed;
            }
        }
     
        public override void OnSubBehaviorSuccess()
        {
            //Reset the state of the sub behavior
            SubBehaviors[CurrentSubBehavior].State = BehaviorState.Idle;
            CurrentSubBehavior = 0;
            State = BehaviorState.Success;
            return;
        }
    }
}