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 UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
using Utilities.Extensions;
|
|
|
|
namespace Canvases.Components
|
|
{
|
|
public abstract class UISelectableComponentBase : UIComponentBase
|
|
{
|
|
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;
|
|
|
|
// Play select sound
|
|
OnSelected?.Invoke();
|
|
}
|
|
|
|
protected virtual void OnDestroy()
|
|
{
|
|
selectEventTriggerEntry?.callback.RemoveListener(OnSelectableSelected);
|
|
}
|
|
}
|
|
} |