91 lines
2.0 KiB
C#
91 lines
2.0 KiB
C#
// (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<PlayMakerFSM>();
|
|
foreach (var component in fsmComponents)
|
|
{
|
|
if (component.FsmName == fsmName.Value)
|
|
{
|
|
fsmComponent = component;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// get first FSM component
|
|
|
|
fsmComponent = go.GetComponent<PlayMakerFSM>();
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
}
|
|
} |