mirror of
https://github.com/ConjureETS/Unity_Utils.git
synced 2026-03-23 20:40:58 +00:00
52 lines
1.6 KiB
C#
52 lines
1.6 KiB
C#
using System;
|
|
using JetBrains.Annotations;
|
|
using JohnsonUtils.Utilities;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
|
|
namespace JohnsonUtils.Canvases
|
|
{
|
|
public abstract class UISelectableComponentBase : UIComponentBase
|
|
{
|
|
[UsedImplicitly] public event Action OnSelected;
|
|
|
|
protected Selectable Selectable = null;
|
|
|
|
private EventTrigger.Entry _selectEventTriggerEntry;
|
|
private CanvasGroup _parentCanvasGroup;
|
|
|
|
private void Awake()
|
|
{
|
|
SetSelectableGameObject();
|
|
AddSelectEventTrigger();
|
|
_parentCanvasGroup = gameObject.GetComponentInParents<CanvasGroup>();
|
|
}
|
|
|
|
protected abstract void SetSelectableGameObject();
|
|
|
|
private void AddSelectEventTrigger()
|
|
{
|
|
EventTrigger eventTrigger = Selectable.gameObject.GetOrAddComponent<EventTrigger>();
|
|
_selectEventTriggerEntry = new EventTrigger.Entry
|
|
{
|
|
eventID = EventTriggerType.Select
|
|
};
|
|
_selectEventTriggerEntry.callback.AddListener(OnSelectableSelected);
|
|
eventTrigger.triggers.Add(_selectEventTriggerEntry);
|
|
}
|
|
|
|
private void OnSelectableSelected(BaseEventData data)
|
|
{
|
|
if (!Selectable.interactable || _parentCanvasGroup != null && !_parentCanvasGroup.interactable)
|
|
return;
|
|
|
|
OnSelected?.Invoke();
|
|
}
|
|
|
|
protected virtual void OnDestroy()
|
|
{
|
|
_selectEventTriggerEntry?.callback.RemoveListener(OnSelectableSelected);
|
|
}
|
|
}
|
|
} |