129 lines
3.2 KiB
C#
129 lines
3.2 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2018. All rights reserved.
|
|
// original action by Nuclear Napalm Entertainment LLC: http://hutonggames.com/playmakerforum/index.php?topic=10581.msg49831#msg49831
|
|
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.UI)]
|
|
[Tooltip("Sets properties of a UI CanvasGroup component.")]
|
|
public class UiCanvasGroupSetProperties : ComponentAction<CanvasGroup>
|
|
{
|
|
[RequiredField]
|
|
[CheckForComponent(typeof(CanvasGroup))]
|
|
[Tooltip("The GameObject with the UI CanvasGroup component.")]
|
|
public FsmOwnerDefault gameObject;
|
|
|
|
[Tooltip("Canvas group alpha. Ranges from 0.0 to 1.0.")]
|
|
[HasFloatSlider(0f,1f)]
|
|
public FsmFloat alpha;
|
|
|
|
[Tooltip("Is the group interactable (are the elements beneath the group enabled). Leave as None for no effect")]
|
|
public FsmBool interactable;
|
|
|
|
[Tooltip("Does this group block raycasting (allow collision). Leave as None for no effect")]
|
|
public FsmBool blocksRaycasts;
|
|
|
|
[Tooltip("Should the group ignore parent groups? Leave as None for no effect")]
|
|
public FsmBool ignoreParentGroup;
|
|
|
|
[Tooltip("Reset when exiting this state. Leave as None for no effect")]
|
|
public FsmBool resetOnExit;
|
|
|
|
public bool everyFrame;
|
|
|
|
private CanvasGroup component;
|
|
|
|
private float originalAlpha;
|
|
private bool originalInteractable;
|
|
private bool originalBlocksRaycasts;
|
|
private bool originalIgnoreParentGroup;
|
|
|
|
public override void Reset()
|
|
{
|
|
gameObject = null;
|
|
alpha = new FsmFloat {UseVariable=true};
|
|
interactable = new FsmBool {UseVariable=true};
|
|
blocksRaycasts = new FsmBool {UseVariable=true};
|
|
ignoreParentGroup = new FsmBool {UseVariable=true};
|
|
resetOnExit = null;
|
|
everyFrame = false;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
var go = Fsm.GetOwnerDefaultTarget(gameObject);
|
|
if (UpdateCache(go))
|
|
{
|
|
component = cachedComponent;
|
|
if (component != null)
|
|
{
|
|
originalAlpha = component.alpha;
|
|
originalInteractable = component.interactable;
|
|
originalBlocksRaycasts = component.blocksRaycasts;
|
|
originalIgnoreParentGroup = component.ignoreParentGroups;
|
|
}
|
|
}
|
|
|
|
DoAction();
|
|
|
|
if (!everyFrame)
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
DoAction();
|
|
}
|
|
|
|
private void DoAction()
|
|
{
|
|
if (component == null) return;
|
|
|
|
if (!alpha.IsNone)
|
|
{
|
|
component.alpha = alpha.Value;
|
|
}
|
|
if (!interactable.IsNone)
|
|
{
|
|
component.interactable = interactable.Value;
|
|
}
|
|
if (!blocksRaycasts.IsNone)
|
|
{
|
|
component.blocksRaycasts = blocksRaycasts.Value;
|
|
}
|
|
if (!ignoreParentGroup.IsNone)
|
|
{
|
|
component.ignoreParentGroups = ignoreParentGroup.Value;
|
|
}
|
|
}
|
|
|
|
public override void OnExit()
|
|
{
|
|
if (component==null) return;
|
|
|
|
if (resetOnExit.Value)
|
|
{
|
|
if (!alpha.IsNone)
|
|
{
|
|
component.alpha = originalAlpha;
|
|
}
|
|
if (!interactable.IsNone)
|
|
{
|
|
component.interactable = originalInteractable;
|
|
}
|
|
if (!blocksRaycasts.IsNone)
|
|
{
|
|
component.blocksRaycasts = originalBlocksRaycasts;
|
|
}
|
|
if (!ignoreParentGroup.IsNone)
|
|
{
|
|
component.ignoreParentGroups = originalIgnoreParentGroup;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|