66 lines
2.7 KiB
C#
66 lines
2.7 KiB
C#
using SharpUI.Source.Common.UI.Util.Keyboard;
|
|
using SharpUI.Source.Common.Util.Extensions;
|
|
using UniRx;
|
|
using UniRx.Triggers;
|
|
using UnityEngine;
|
|
|
|
namespace SharpUI.Source.Common.UI.Elements.Button
|
|
{
|
|
[RequireComponent(typeof(UnityEngine.UI.Button))]
|
|
public class BaseButton : BaseElement
|
|
{
|
|
protected UnityEngine.UI.Button button;
|
|
|
|
private CompositeDisposable _deselectionObservable = new CompositeDisposable();
|
|
private IKeyListener _keyListener;
|
|
|
|
protected override void SetupElement()
|
|
{
|
|
base.SetupElement();
|
|
button = GetComponent<UnityEngine.UI.Button>();
|
|
}
|
|
|
|
public void EnablePermanentSelection()
|
|
{
|
|
if (!_deselectionObservable.IsDisposed)
|
|
_deselectionObservable.Dispose();
|
|
}
|
|
|
|
public void DisablePermanentSelection()
|
|
{
|
|
if (!_deselectionObservable.IsDisposed) return;
|
|
|
|
_deselectionObservable = new CompositeDisposable();
|
|
button.OnDeselectAsObservable().SubscribeWith(_deselectionObservable,
|
|
_ => eventPromoter.ObservedDeselect());
|
|
}
|
|
|
|
public void SetKeyListener(IKeyListener keyListener) => _keyListener = keyListener;
|
|
|
|
public IKeyListener GetKeyListener() => _keyListener ?? (_keyListener = CreateKeyListener());
|
|
|
|
private IKeyListener CreateKeyListener()
|
|
{
|
|
_keyListener = gameObject.AddComponent<SimpleKeyListener>();
|
|
_keyListener.TakeButton(this);
|
|
return _keyListener;
|
|
}
|
|
|
|
protected override void SetupSelectable() => selectableElement = button;
|
|
|
|
protected override void ObserveEvents()
|
|
{
|
|
button.OnPointerDownAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedPointerDown());
|
|
button.OnPointerUpAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedPointerUp());
|
|
button.OnClickAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedClick());
|
|
button.OnPointerEnterAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedPointerEnter());
|
|
button.OnPointerExitAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedPointerExit());
|
|
button.OnSelectAsObservable().SubscribeWith(this, _ => eventPromoter.ObservedSelected());
|
|
button.OnDeselectAsObservable().SubscribeWith(_deselectionObservable, _ => eventPromoter.ObservedDeselect());
|
|
button.OnPointerClickAsObservable().SubscribeWith(this, data => eventPromoter.ObservePointerClick(data.button));
|
|
|
|
if (isSelected)
|
|
eventPromoter.ObservedSelected();
|
|
}
|
|
}
|
|
} |