Files
beyond/Assets/ThirdParty/PlayMaker/Actions/UI/EventSystem/UiIsPointerOverUiObject.cs
2024-11-20 15:21:28 +01:00

75 lines
1.6 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2018. All rights reserved.
using UnityEngine.EventSystems;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.UI)]
[Tooltip("Checks if Pointer is over a UI object, optionally takes a pointer ID, otherwise uses the current event.")]
public class UiIsPointerOverUiObject : FsmStateAction
{
[Tooltip("Optional PointerId. Leave to none to use the current event")]
public FsmInt pointerId;
[Tooltip("Event to send when the Pointer is over an UI object.")]
public FsmEvent pointerOverUI;
[Tooltip("Event to send when the Pointer is NOT over an UI object.")]
public FsmEvent pointerNotOverUI;
[UIHint(UIHint.Variable)]
public FsmBool isPointerOverUI;
[Tooltip("Repeat every frame.")]
public bool everyFrame;
public override void Reset()
{
pointerId = new FsmInt {UseVariable = true};
pointerOverUI = null;
pointerNotOverUI = null;
isPointerOverUI = null;
everyFrame = false;
}
public override void OnEnter()
{
DoCheckPointer();
if (!everyFrame)
{
Finish();
}
}
public override void OnUpdate()
{
DoCheckPointer();
}
private void DoCheckPointer()
{
var isOver = false;
if (pointerId.IsNone)
{
isOver = EventSystem.current.IsPointerOverGameObject();
}
else
{
if(EventSystem.current.currentInputModule is PointerInputModule) {
var module = EventSystem.current.currentInputModule as PointerInputModule;
isOver = module.IsPointerOverGameObject(pointerId.Value);
}
}
isPointerOverUI.Value = isOver;
Fsm.Event(isOver ? pointerOverUI : pointerNotOverUI);
}
}
}