// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved. using UnityEngine; namespace HutongGames.PlayMaker.Actions { [ActionCategory(ActionCategory.StateMachine)] [ActionTarget(typeof(PlayMakerFSM),"gameObject,fsmName")] [Tooltip("Enables/Disables an FSM component on a GameObject.")] public class EnableFSM : FsmStateAction { [RequiredField] [Tooltip("The GameObject that owns the FSM component.")] public FsmOwnerDefault gameObject; [UIHint(UIHint.FsmName)] [Tooltip("Optional name of FSM on GameObject. Useful if you have more than one FSM on a GameObject.")] public FsmString fsmName; [Tooltip("Set to True to enable, False to disable.")] public FsmBool enable; [Tooltip("Reset the initial enabled state when exiting the state.")] public FsmBool resetOnExit; private PlayMakerFSM fsmComponent; public override void Reset() { gameObject = null; fsmName = ""; enable = true; resetOnExit = true; } public override void OnEnter() { DoEnableFSM(); Finish(); } void DoEnableFSM() { GameObject go = gameObject.OwnerOption == OwnerDefaultOption.UseOwner ? Owner : gameObject.GameObject.Value; if (go == null) return; if (!string.IsNullOrEmpty(fsmName.Value)) { // find by FSM component name var fsmComponents = go.GetComponents(); foreach (var component in fsmComponents) { if (component.FsmName == fsmName.Value) { fsmComponent = component; break; } } } else { // get first FSM component fsmComponent = go.GetComponent(); } if (fsmComponent == null) { // TODO: Not sure if this is an error condition... LogError("Missing FsmComponent!"); return; } fsmComponent.enabled = enable.Value; } public override void OnExit() { if (fsmComponent == null) return; if (resetOnExit.Value) { fsmComponent.enabled = !enable.Value; } } } }