75 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
} |