Files
2024-11-20 15:21:28 +01:00

67 lines
1.7 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.GameObject)]
[Tooltip("Adds a Component to a Game Object. Use this to change the behaviour of objects on the fly. Optionally remove the Component on exiting the state.")]
public class AddComponent : FsmStateAction
{
[RequiredField]
[Tooltip("The GameObject to add the Component to.")]
public FsmOwnerDefault gameObject;
[RequiredField]
[UIHint(UIHint.ScriptComponent)]
[Title("Component Type"), Tooltip("The type of Component to add to the Game Object.")]
public FsmString component;
[UIHint(UIHint.Variable)]
[ObjectType(typeof(Component))]
[Tooltip("Store the component in an Object variable. E.g., to use with Set Property.")]
public FsmObject storeComponent;
[Tooltip("Remove the Component when this State is exited.")]
public FsmBool removeOnExit;
// save added component so we can remove on exit
private Component addedComponent;
public override void Reset()
{
gameObject = null;
component = null;
storeComponent = null;
}
public override void OnEnter()
{
DoAddComponent();
Finish();
}
public override void OnExit()
{
if (removeOnExit.Value && addedComponent != null)
{
Object.Destroy(addedComponent);
}
}
private void DoAddComponent()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go == null) return;
addedComponent = go.AddComponent(ReflectionUtils.GetGlobalType(component.Value));
storeComponent.Value = addedComponent;
if (addedComponent == null)
{
LogError("Can't add component: " + component.Value);
}
}
}
}