using UnityEngine; using MalbersAnimations.Scriptables; namespace MalbersAnimations.Controller.AI { public abstract class MTask : BrainBase { /// What name will be displayed while adding a new Task public abstract string DisplayName { get; } [Tooltip("ID Used for sending messages to the Brain to see if the Task started")] public IntReference MessageID = new IntReference(0); [Min(0), Tooltip("Task using Update will be executed every X seconds")] public float UpdateInterval = 0.2f; [Tooltip("If the previous Task is done then this Task will start")] public bool WaitForPreviousTask = false; /// When a AI State starts using this Task, Run this Code public virtual void StartTask(MAnimalBrain brain, int index) { } /// Update Internal Task public virtual void InternalUpdateTask(MAnimalBrain brain, int index) { if (MTools.ElapsedTime(brain.TasksUpdateTime[index], UpdateInterval)) { UpdateTask(brain, index); brain.TasksUpdateTime[index] = Time.time; //Reset the interval } } /// While a AI State is runing using this Task, run thi Code public virtual void UpdateTask(MAnimalBrain brain, int index) { } /// While a AI State Ends, run this Code public virtual void ExitAIState(MAnimalBrain brain, int index) { brain.TaskDone(index); } public virtual void OnTargetArrived(MAnimalBrain brain, Transform target, int index) { } public virtual void OnPositionArrived(MAnimalBrain brain, Vector3 Position, int index) { } public virtual void OnAnimalStateEnter(MAnimalBrain brain, State state, int index) { } public virtual void OnAnimalStateExit(MAnimalBrain brain, State state, int index) { } public virtual void OnAnimalStanceChange(MAnimalBrain brain, int Stance, int index) { } public virtual void OnAnimalModeStart(MAnimalBrain brain, Mode mode, int index) { } public virtual void OnAnimalModeEnd(MAnimalBrain brain, Mode mode, int index) { } public virtual void OnTargetAnimalStateEnter(MAnimalBrain brain, State state, int index) { } public virtual void OnTargetAnimalStateExit(MAnimalBrain brain, State state, int index) { } public virtual void OnTargetAnimalStanceChange(MAnimalBrain brain, int Stance, int index) { } public virtual void OnTargetAnimalModeStart(MAnimalBrain brain, Mode mode, int index) { } public virtual void OnTargetAnimalModeEnd(MAnimalBrain brain, Mode mode, int index) { } } public abstract class BrainBase : ScriptableObject { [Tooltip("Enable disable Task or Decisions")] public bool active = true; [Space,TextArea(3,10)] public string Description = "Type Description Here"; public virtual void DrawGizmos(MAnimalBrain brain) { } //public virtual void OnAnimalStateEnter(MAnimalBrain brain, State state, int index) { } //public virtual void OnAnimalStateExit(MAnimalBrain brain, State state, int index) { } //public virtual void OnAnimalStanceChange(MAnimalBrain brain, int Stance, int index) { } //public virtual void OnAnimalModeStart(MAnimalBrain brain, Mode mode, int index) { } //public virtual void OnAnimalModeEnd(MAnimalBrain brain, Mode mode, int index) { } //public virtual void OnTargetAnimalStateEnter(MAnimalBrain brain, State state, int index) { } //public virtual void OnTargetAnimalStateExit(MAnimalBrain brain, State state, int index) { } //public virtual void OnTargetAnimalStanceChange(MAnimalBrain brain, int Stance, int index) { } //public virtual void OnTargetAnimalModeStart(MAnimalBrain brain, Mode mode, int index) { } //public virtual void OnTargetAnimalModeEnd(MAnimalBrain brain, Mode mode, int index) { } } }