using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MoreMountains.Tools
{
///
/// Actions are behaviours and describe what your character is doing. Examples include patrolling, shooting, jumping, etc.
///
public abstract class AIAction : MonoBehaviour
{
public enum InitializationModes { EveryTime, OnlyOnce, }
public InitializationModes InitializationMode;
protected bool _initialized;
public string Label;
public abstract void PerformAction();
public bool ActionInProgress { get; set; }
protected AIBrain _brain;
protected virtual bool ShouldInitialize
{
get
{
switch (InitializationMode)
{
case InitializationModes.EveryTime:
return true;
case InitializationModes.OnlyOnce:
return _initialized == false;
}
return true;
}
}
///
/// On Awake we grab our AIBrain
///
protected virtual void Awake()
{
_brain = this.gameObject.GetComponentInParent();
}
///
/// Initializes the action. Meant to be overridden
///
public virtual void Initialization()
{
_initialized = true;
}
///
/// Describes what happens when the brain enters the state this action is in. Meant to be overridden.
///
public virtual void OnEnterState()
{
ActionInProgress = true;
}
///
/// Describes what happens when the brain exits the state this action is in. Meant to be overridden.
///
public virtual void OnExitState()
{
ActionInProgress = false;
}
}
}