// for uGUI(from 4.6) #if !(UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5) using System; // require keep for Windows Universal App using UnityEngine; using UnityEngine.EventSystems; namespace UniRx.Triggers { [DisallowMultipleComponent] public class ObservableEventTrigger : ObservableTriggerBase, IEventSystemHandler, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler, IBeginDragHandler, IInitializePotentialDragHandler, IDragHandler, IEndDragHandler, IDropHandler, IScrollHandler, IUpdateSelectedHandler, ISelectHandler, IDeselectHandler, IMoveHandler, ISubmitHandler, ICancelHandler { #region IDeselectHandler Subject onDeselect; void IDeselectHandler.OnDeselect(BaseEventData eventData) { if (onDeselect != null) onDeselect.OnNext(eventData); } public IObservable OnDeselectAsObservable() { return onDeselect ?? (onDeselect = new Subject()); } #endregion #region IMoveHandler Subject onMove; void IMoveHandler.OnMove(AxisEventData eventData) { if (onMove != null) onMove.OnNext(eventData); } public IObservable OnMoveAsObservable() { return onMove ?? (onMove = new Subject()); } #endregion #region IPointerDownHandler Subject onPointerDown; void IPointerDownHandler.OnPointerDown(PointerEventData eventData) { if (onPointerDown != null) onPointerDown.OnNext(eventData); } public IObservable OnPointerDownAsObservable() { return onPointerDown ?? (onPointerDown = new Subject()); } #endregion #region IPointerEnterHandler Subject onPointerEnter; void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) { if (onPointerEnter != null) onPointerEnter.OnNext(eventData); } public IObservable OnPointerEnterAsObservable() { return onPointerEnter ?? (onPointerEnter = new Subject()); } #endregion #region IPointerExitHandler Subject onPointerExit; void IPointerExitHandler.OnPointerExit(PointerEventData eventData) { if (onPointerExit != null) onPointerExit.OnNext(eventData); } public IObservable OnPointerExitAsObservable() { return onPointerExit ?? (onPointerExit = new Subject()); } #endregion #region IPointerUpHandler Subject onPointerUp; void IPointerUpHandler.OnPointerUp(PointerEventData eventData) { if (onPointerUp != null) onPointerUp.OnNext(eventData); } public IObservable OnPointerUpAsObservable() { return onPointerUp ?? (onPointerUp = new Subject()); } #endregion #region ISelectHandler Subject onSelect; void ISelectHandler.OnSelect(BaseEventData eventData) { if (onSelect != null) onSelect.OnNext(eventData); } public IObservable OnSelectAsObservable() { return onSelect ?? (onSelect = new Subject()); } #endregion #region IPointerClickHandler Subject onPointerClick; void IPointerClickHandler.OnPointerClick(PointerEventData eventData) { if (onPointerClick != null) onPointerClick.OnNext(eventData); } public IObservable OnPointerClickAsObservable() { return onPointerClick ?? (onPointerClick = new Subject()); } #endregion #region ISubmitHandler Subject onSubmit; void ISubmitHandler.OnSubmit(BaseEventData eventData) { if (onSubmit != null) onSubmit.OnNext(eventData); } public IObservable OnSubmitAsObservable() { return onSubmit ?? (onSubmit = new Subject()); } #endregion #region IDragHandler Subject onDrag; void IDragHandler.OnDrag(PointerEventData eventData) { if (onDrag != null) onDrag.OnNext(eventData); } public IObservable OnDragAsObservable() { return onDrag ?? (onDrag = new Subject()); } #endregion #region IBeginDragHandler Subject onBeginDrag; void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { if (onBeginDrag != null) onBeginDrag.OnNext(eventData); } public IObservable OnBeginDragAsObservable() { return onBeginDrag ?? (onBeginDrag = new Subject()); } #endregion #region IEndDragHandler Subject onEndDrag; void IEndDragHandler.OnEndDrag(PointerEventData eventData) { if (onEndDrag != null) onEndDrag.OnNext(eventData); } public IObservable OnEndDragAsObservable() { return onEndDrag ?? (onEndDrag = new Subject()); } #endregion #region IDropHandler Subject onDrop; void IDropHandler.OnDrop(PointerEventData eventData) { if (onDrop != null) onDrop.OnNext(eventData); } public IObservable OnDropAsObservable() { return onDrop ?? (onDrop = new Subject()); } #endregion #region IUpdateSelectedHandler Subject onUpdateSelected; void IUpdateSelectedHandler.OnUpdateSelected(BaseEventData eventData) { if (onUpdateSelected != null) onUpdateSelected.OnNext(eventData); } public IObservable OnUpdateSelectedAsObservable() { return onUpdateSelected ?? (onUpdateSelected = new Subject()); } #endregion #region IInitializePotentialDragHandler Subject onInitializePotentialDrag; void IInitializePotentialDragHandler.OnInitializePotentialDrag(PointerEventData eventData) { if (onInitializePotentialDrag != null) onInitializePotentialDrag.OnNext(eventData); } public IObservable OnInitializePotentialDragAsObservable() { return onInitializePotentialDrag ?? (onInitializePotentialDrag = new Subject()); } #endregion #region ICancelHandler Subject onCancel; void ICancelHandler.OnCancel(BaseEventData eventData) { if (onCancel != null) onCancel.OnNext(eventData); } public IObservable OnCancelAsObservable() { return onCancel ?? (onCancel = new Subject()); } #endregion #region IScrollHandler Subject onScroll; void IScrollHandler.OnScroll(PointerEventData eventData) { if (onScroll != null) onScroll.OnNext(eventData); } public IObservable OnScrollAsObservable() { return onScroll ?? (onScroll = new Subject()); } #endregion protected override void RaiseOnCompletedOnDestroy() { if (onDeselect != null) { onDeselect.OnCompleted(); } if (onMove != null) { onMove.OnCompleted(); } if (onPointerDown != null) { onPointerDown.OnCompleted(); } if (onPointerEnter != null) { onPointerEnter.OnCompleted(); } if (onPointerExit != null) { onPointerExit.OnCompleted(); } if (onPointerUp != null) { onPointerUp.OnCompleted(); } if (onSelect != null) { onSelect.OnCompleted(); } if (onPointerClick != null) { onPointerClick.OnCompleted(); } if (onSubmit != null) { onSubmit.OnCompleted(); } if (onDrag != null) { onDrag.OnCompleted(); } if (onBeginDrag != null) { onBeginDrag.OnCompleted(); } if (onEndDrag != null) { onEndDrag.OnCompleted(); } if (onDrop != null) { onDrop.OnCompleted(); } if (onUpdateSelected != null) { onUpdateSelected.OnCompleted(); } if (onInitializePotentialDrag != null) { onInitializePotentialDrag.OnCompleted(); } if (onCancel != null) { onCancel.OnCompleted(); } if (onScroll != null) { onScroll.OnCompleted(); } } } } #endif