using System; using JetBrains.Annotations; using UniRx; namespace SharpUI.Source.Common.UI.Elements.Events { public class ElementEventDispatcher : IElementEventDispatcher, IElementEventListener { [CanBeNull] private Subject _onPressedObserver; [CanBeNull] private Subject _onReleasedObserver; [CanBeNull] private Subject _onClickedObserver; [CanBeNull] private Subject _onLeftClickedObserver; [CanBeNull] private Subject _onRightClickedObserver; [CanBeNull] private Subject _onMiddleClickedObserver; [CanBeNull] private Subject _onEnabledObserver; [CanBeNull] private Subject _onDisabledObserver; [CanBeNull] private Subject _onEnteredObserver; [CanBeNull] private Subject _onExitedObserver; [CanBeNull] private Subject _onSelectedObserver; [CanBeNull] private Subject _onDeselectedObserver; public void OnPressed() => _onPressedObserver?.OnNext(Unit.Default); public void OnReleased() => _onReleasedObserver?.OnNext(Unit.Default); public void OnClicked() => _onClickedObserver?.OnNext(Unit.Default); public void OnLeftClicked() => _onLeftClickedObserver?.OnNext(Unit.Default); public void OnRightClicked() => _onRightClickedObserver?.OnNext(Unit.Default); public void OnMiddleClicked() => _onMiddleClickedObserver?.OnNext(Unit.Default); public void OnEnabled() => _onEnabledObserver?.OnNext(Unit.Default); public void OnDisabled() => _onDisabledObserver?.OnNext(Unit.Default); public void OnEnter() => _onEnteredObserver?.OnNext(Unit.Default); public void OnExit() => _onExitedObserver?.OnNext(Unit.Default); public void OnSelect() => _onSelectedObserver?.OnNext(Unit.Default); public void OnDeselect() => _onDeselectedObserver?.OnNext(Unit.Default); public IObservable ObserveOnPressed() => _onPressedObserver ?? (_onPressedObserver = new Subject()); public IObservable ObserveOnReleased() => _onReleasedObserver ?? (_onReleasedObserver = new Subject()); public IObservable ObserveOnClicked() => _onClickedObserver ?? (_onClickedObserver = new Subject()); public IObservable ObserveOnLeftClicked() => _onLeftClickedObserver ?? (_onLeftClickedObserver = new Subject()); public IObservable ObserveOnRightClicked() => _onRightClickedObserver ?? (_onRightClickedObserver = new Subject()); public IObservable ObserveOnMiddleClicked() => _onMiddleClickedObserver ?? (_onMiddleClickedObserver = new Subject()); public IObservable ObserveOnEnabled() => _onEnabledObserver ?? (_onEnabledObserver = new Subject()); public IObservable ObserveOnDisabled() => _onDisabledObserver ?? (_onDisabledObserver = new Subject()); public IObservable ObserveOnEntered() => _onEnteredObserver ?? (_onEnteredObserver = new Subject()); public IObservable ObserveOnExited() => _onExitedObserver ?? (_onExitedObserver = new Subject()); public IObservable ObserveOnSelected() => _onSelectedObserver ?? (_onSelectedObserver = new Subject()); public IObservable ObserveOnDeselected() => _onDeselectedObserver ?? (_onDeselectedObserver = new Subject()); } }