MouseConfirm.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. using JC.Unity.UI;
  7. using JC.Unity;
  8. public class MouseConfirm : MonoBehaviour
  9. {
  10. [SerializeField] Button btnConfirm;
  11. Selectable _targetSelectable;
  12. Selectable _selfSelectable;
  13. bool _prepared = false;
  14. void Awake() {
  15. btnConfirm.gameObject.SetActive(false);
  16. }
  17. void Start()
  18. {
  19. _selfSelectable = btnConfirm.GetComponent<Selectable>();
  20. btnConfirm.onClick.AddListener(OnClikc_Confirm);
  21. }
  22. void Update()
  23. {
  24. if (!SB_EventSystem.ins.simulateMouseIsAwaked) {
  25. Hide();
  26. return;
  27. }
  28. if (!SB_EventSystem.ins.simulateMouse.GetCurrentSelectable()) {
  29. Hide();
  30. return;
  31. }
  32. if (_targetSelectable) {
  33. if (!_prepared) {
  34. _prepared = true;
  35. RectTransform rtf = _targetSelectable.transform as RectTransform;
  36. Vector3 size = rtf.rect.size;
  37. if (size.x == 0 || size.y == 0) {
  38. Hide();
  39. return;
  40. }
  41. Vector3 maxSize = RectTransformUtils.CanvasV3ToScreenV3(Vector3.one * 120, transform as RectTransform);
  42. size = RectTransformUtils.CanvasV3ToScreenV3(size, rtf);
  43. if (size.x > maxSize.x || size.y > maxSize.y) {
  44. Hide();
  45. return;
  46. }
  47. btnConfirm.transform.position = RectTransformUtils.GetPositionByPivot(_targetSelectable.transform as RectTransform, Vector2.one * 0.5f);
  48. btnConfirm.gameObject.SetActive(true);
  49. GetComponent<Canvas>().sortingOrder = _targetSelectable.GetComponentInParent<Canvas>().sortingOrder + 1;
  50. }
  51. } else {
  52. Hide();
  53. }
  54. }
  55. void Show() {
  56. _prepared = false;
  57. if (!gameObject.activeSelf) gameObject.SetActive(true);
  58. }
  59. void Hide() {
  60. _targetSelectable = null;
  61. btnConfirm.gameObject.SetActive(false);
  62. if (gameObject.activeSelf) gameObject.SetActive(false);
  63. }
  64. void OnClikc_Confirm()
  65. {
  66. try
  67. {
  68. if (_targetSelectable && _targetSelectable.interactable) {
  69. Button btn = _targetSelectable.GetComponent<Button>();
  70. btn.onClick.Invoke();
  71. }
  72. }
  73. catch (System.Exception e)
  74. {
  75. Debug.LogError(e.Message);
  76. Debug.LogError(e.StackTrace);
  77. }
  78. Hide();
  79. }
  80. public void SetSelectable(Selectable selectable) {
  81. if (!selectable) return;
  82. if (selectable == _targetSelectable) return;
  83. if (selectable == _selfSelectable) return;
  84. _targetSelectable = selectable;
  85. Show();
  86. }
  87. }