// Copyright (c) Pixel Crushers. All rights reserved.
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace PixelCrushers
{
///
/// This script deselects the previous selectable when the pointer enters this one.
///
[AddComponentMenu("")] // Use wrapper.
[RequireComponent(typeof(Selectable))]
public class DeselectPreviousOnPointerEnter : MonoBehaviour, IPointerEnterHandler, IDeselectHandler, IEventSystemUser
{
[Tooltip("Do not deselect previous if previous is in this Exceptions list.")]
[SerializeField] private List exceptions = new List();
private UnityEngine.EventSystems.EventSystem m_eventSystem = null;
public UnityEngine.EventSystems.EventSystem eventSystem
{
get
{
if (m_eventSystem == null) m_eventSystem = UnityEngine.EventSystems.EventSystem.current;
return m_eventSystem;
}
set { m_eventSystem = value; }
}
public void OnPointerEnter(PointerEventData eventData)
{
if (eventSystem == null || eventSystem.alreadySelecting) return;
if (exceptions.Contains(eventSystem.currentSelectedGameObject)) return;
eventSystem.SetSelectedGameObject(this.gameObject);
}
public void OnDeselect(BaseEventData eventData)
{
GetComponent().OnPointerExit(null);
}
}
}