using System;
using UnityEngine;
namespace Lean.Common
{
///
/// This is the base class for all components that need to implement some kind of special logic when selected. You can
/// do this manually without this class, but this makes it much easier.
/// NOTE: This component will register and unregister the associated LeanSelectable in OnEnable and OnDisable.
///
public abstract class LeanSelectableBehaviour : MonoBehaviour
{
[NonSerialized] private LeanSelectable selectable;
/// This tells you which LeanSelectable is currently associated with this component.
public LeanSelectable Selectable
{
get
{
if (selectable == null) Register();
return selectable;
}
}
protected virtual void Start()
{
if (selectable == null) Register();
}
protected virtual void OnEnable()
{
Register();
}
protected virtual void OnDisable()
{
Unregister();
}
///
/// This method allows you to manually register the LeanSelectable this component is associated with. This is
/// useful if you're manually spawning and attaching children from code.
///
[ContextMenu("Register")]
public void Register()
{
Register(GetComponentInParent());
}
/// This method allows you to manually register the LeanSelectable this component is associated with.
public void Register(LeanSelectable newSelectable)
{
if (newSelectable != selectable)
{
// Unregister existing
Unregister();
// Register a new one?
if (newSelectable != null)
{
selectable = newSelectable;
selectable.OnSelected.AddListener(OnSelected);
selectable.OnDeselected.AddListener(OnDeselected);
}
}
}
///
/// This method allows you to manually register the LeanSelectable this component is associated with. This is
/// useful if you're changing the associated LeanSelectable.
///
[ContextMenu("Unregister")]
public void Unregister()
{
if (selectable != null)
{
selectable.OnSelected.RemoveListener(OnSelected);
selectable.OnDeselected.RemoveListener(OnDeselected);
selectable = null;
}
}
/// Called when selection begins.
protected virtual void OnSelected(LeanSelect select)
{
}
/// Called when this is deselected.
protected virtual void OnDeselected(LeanSelect select)
{
}
}
}