SRNumberButton.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using UnityEngine;
  3. using UnityEngine.EventSystems;
  4. using UnityEngine.UI;
  5. namespace SRF.UI
  6. {
  7. [AddComponentMenu("SRF/UI/SRNumberButton")]
  8. public class SRNumberButton : Button, IEventSystemHandler, IPointerDownHandler, IPointerUpHandler, IPointerClickHandler
  9. {
  10. public override void OnPointerDown(PointerEventData eventData)
  11. {
  12. base.OnPointerDown(eventData);
  13. if (!base.interactable)
  14. {
  15. return;
  16. }
  17. this.Apply();
  18. this._isDown = true;
  19. this._downTime = Time.realtimeSinceStartup;
  20. this._delayTime = this._downTime + 0.4f;
  21. }
  22. public override void OnPointerUp(PointerEventData eventData)
  23. {
  24. base.OnPointerUp(eventData);
  25. this._isDown = false;
  26. }
  27. protected virtual void Update()
  28. {
  29. if (this._isDown && this._delayTime <= Time.realtimeSinceStartup)
  30. {
  31. this.Apply();
  32. float num = 0.2f;
  33. int num2 = Mathf.RoundToInt((Time.realtimeSinceStartup - this._downTime) / 3f);
  34. for (int i = 0; i < num2; i++)
  35. {
  36. num *= 0.5f;
  37. }
  38. this._delayTime = Time.realtimeSinceStartup + num;
  39. }
  40. }
  41. private void Apply()
  42. {
  43. double num = double.Parse(this.TargetField.text);
  44. num += this.Amount;
  45. if (num > this.TargetField.MaxValue)
  46. {
  47. num = this.TargetField.MaxValue;
  48. }
  49. if (num < this.TargetField.MinValue)
  50. {
  51. num = this.TargetField.MinValue;
  52. }
  53. this.TargetField.text = num.ToString();
  54. this.TargetField.onEndEdit.Invoke(this.TargetField.text);
  55. }
  56. private const float ExtraThreshold = 3f;
  57. public const float Delay = 0.4f;
  58. private float _delayTime;
  59. private float _downTime;
  60. private bool _isDown;
  61. public double Amount = 1.0;
  62. public SRNumberSpinner TargetField;
  63. }
  64. }