先修复一下,错误的场景 删除不必要的钓场资产 修复into场景 update:更新meta文件,修复报错 update:修复资源 修复第一章节建造 修复建造第三章 update:删除多余内容 update:更新README.md update:还原图标 update:更新README update:更新配置
79 lines
2.6 KiB
C#
79 lines
2.6 KiB
C#
using System;
|
|
using UniRx;
|
|
using UniRx.Triggers;
|
|
using UnityEngine;
|
|
using UnityEngine.EventSystems;
|
|
using UnityEngine.UI;
|
|
|
|
public class UIButton : Button
|
|
{
|
|
[SerializeField]private float _holdThresh = 0.5f;
|
|
private ButtonClickedEvent m_OnDown = new ButtonClickedEvent();
|
|
private ButtonClickedEvent m_OnUp = new ButtonClickedEvent();
|
|
private ButtonClickedEvent m_OnLongPress = new ButtonClickedEvent();
|
|
private ButtonClickedEvent m_OnShortClick = new ButtonClickedEvent();
|
|
private IDisposable clickStream, longPressStream;
|
|
private DateTimeOffset _lastDownTime, _lastUpTime;
|
|
//private CompositeDisposable _pressTimer;
|
|
//private float ci;
|
|
PointerEventData pointerEventData;
|
|
protected override void Start()
|
|
{
|
|
var pointerDownStream = this.OnPointerDownAsObservable().Timestamp();
|
|
var pointerUpStream = this.OnPointerUpAsObservable().Timestamp();
|
|
//Logic of long press: delayed.Timestamp - delayThreshold - lastButtonUpTime > 0
|
|
longPressStream = pointerDownStream
|
|
.SelectMany(_ => Observable.Timer(TimeSpan.FromSeconds(_holdThresh)))
|
|
.Timestamp()
|
|
.Where(_ => (_.Timestamp - _lastUpTime ).TotalSeconds > _holdThresh)
|
|
.Subscribe(_ => m_OnLongPress.Invoke())
|
|
.AddTo(this);
|
|
clickStream = pointerUpStream
|
|
.CombineLatest(pointerDownStream, (eUp, eDown) => eUp.Timestamp - eDown.Timestamp)
|
|
.Where(interval => interval.TotalSeconds > 0 && interval.TotalSeconds <= _holdThresh)
|
|
.Subscribe(_ => m_OnShortClick.Invoke())
|
|
.AddTo(this);
|
|
}
|
|
public ButtonClickedEvent onDown
|
|
{
|
|
get { return m_OnDown; }
|
|
set { m_OnDown = value; }
|
|
}
|
|
|
|
public ButtonClickedEvent onUp
|
|
{
|
|
get { return m_OnUp; }
|
|
set { m_OnUp = value; }
|
|
}
|
|
|
|
public ButtonClickedEvent onLongPress
|
|
{
|
|
get { return m_OnLongPress; }
|
|
set { m_OnLongPress = value; }
|
|
}
|
|
|
|
public new ButtonClickedEvent onClick
|
|
{
|
|
get { return m_OnShortClick; }
|
|
set { m_OnShortClick = value; }
|
|
}
|
|
|
|
public override void OnPointerDown(PointerEventData eventData)
|
|
{
|
|
base.OnPointerDown(eventData);
|
|
m_OnDown.Invoke();
|
|
pointerEventData = eventData;
|
|
_lastDownTime = DateTimeOffset.Now;
|
|
}
|
|
public override void OnPointerUp(PointerEventData eventData)
|
|
{
|
|
base.OnPointerUp(eventData);
|
|
m_OnUp.Invoke();
|
|
_lastUpTime = DateTimeOffset.Now;
|
|
}
|
|
public void Up()
|
|
{
|
|
OnPointerUp(pointerEventData);
|
|
}
|
|
public bool IsDowning => IsPressed();
|
|
} |