// (c) copyright Hutong Games, LLC 2010-2012. All rights reserved. using UnityEngine; namespace HutongGames.PlayMaker.Actions { [ActionCategory(ActionCategory.StateMachine)] [Tooltip("Creates an FSM from a saved FSM Template.")] public class RunFSM : RunFSMAction { public FsmTemplateControl fsmTemplateControl = new FsmTemplateControl(); [UIHint(UIHint.Variable)] public FsmInt storeID; [Tooltip("Event to send when the FSM has finished (usually because it ran a Finish FSM action).")] public FsmEvent finishEvent; public override void Reset() { fsmTemplateControl = new FsmTemplateControl(); storeID = null; runFsm = null; } /// /// Initialize FSM on awake so it doesn't cause hitches later /// public override void Awake() { if (fsmTemplateControl.fsmTemplate != null && Application.isPlaying) { runFsm = Fsm.CreateSubFsm(fsmTemplateControl); } } /// /// Start the FSM on entering the state /// public override void OnEnter() { if (runFsm == null) { Finish(); return; } fsmTemplateControl.UpdateValues(); fsmTemplateControl.ApplyOverrides(runFsm); runFsm.OnEnable(); if (!runFsm.Started) { runFsm.Start(); } storeID.Value = fsmTemplateControl.ID; CheckIfFinished(); } // Other functionality covered in RunFSMAction base class protected override void CheckIfFinished() { if (runFsm == null || runFsm.Finished) { Finish(); Fsm.Event(finishEvent); } } } }