MouseConfirm.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. btnConfirm.transform.position = RectTransformUtils.GetPositionByPivot(_targetSelectable.transform as RectTransform, Vector2.one * 0.5f);
  36. btnConfirm.gameObject.SetActive(true);
  37. GetComponent<Canvas>().sortingOrder = _targetSelectable.GetComponentInParent<Canvas>().sortingOrder + 1;
  38. }
  39. } else {
  40. Hide();
  41. }
  42. }
  43. void Show() {
  44. _prepared = false;
  45. if (!gameObject.activeSelf) gameObject.SetActive(true);
  46. }
  47. void Hide() {
  48. _targetSelectable = null;
  49. btnConfirm.gameObject.SetActive(false);
  50. if (gameObject.activeSelf) gameObject.SetActive(false);
  51. }
  52. void OnClikc_Confirm()
  53. {
  54. try
  55. {
  56. if (_targetSelectable && _targetSelectable.interactable) {
  57. Button btn = _targetSelectable.GetComponent<Button>();
  58. btn.onClick.Invoke();
  59. }
  60. }
  61. catch (System.Exception e)
  62. {
  63. Debug.LogError(e.Message);
  64. Debug.LogError(e.StackTrace);
  65. }
  66. Hide();
  67. }
  68. public void SetSelectable(Selectable selectable) {
  69. if (!selectable) return;
  70. if (selectable == _targetSelectable) return;
  71. if (selectable == _selfSelectable) return;
  72. _targetSelectable = selectable;
  73. Show();
  74. }
  75. }