DeviceController.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using QFramework;
  5. using Sirenix.OdinInspector;
  6. public class DeviceController : MonoBehaviour
  7. {
  8. public static DeviceController instance;
  9. public string DeviceName;
  10. public Stack<PartMark> m_OperationPartMarkStruct = new Stack<PartMark>();
  11. [HideInInspector]
  12. public ShowState m_ShowState;
  13. public PartMark m_CurrentSelectPartItem;
  14. private void Awake()
  15. {
  16. instance = this;
  17. ResKit.Init();
  18. UIKit.OpenPanel<PartLabelPanel>();
  19. }
  20. private void Start()
  21. {
  22. DeviceOfPartDataProxy deviceOfPartDataProxy = DAL.Instance.Get<DeviceOfPartDataProxy>();
  23. deviceOfPartDataProxy.ReadStepMsgInfoFromTable(DeviceName);
  24. PartInfo tmpPartInfo = GetDevicePartInfos(transform.GetComponent<PartMark>());
  25. UIKit.OpenPanel<PartListPanel>(new PartListPanelData() { m_PartInfo = tmpPartInfo });
  26. }
  27. private void Update()
  28. {
  29. PartLabelCheck();
  30. ClikPartMarkCheck();
  31. }
  32. /// <summary>
  33. /// 标签部分检测
  34. /// </summary>
  35. private void PartLabelCheck()
  36. {
  37. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  38. RaycastHit hit;
  39. if (Physics.Raycast(ray, out hit))
  40. {
  41. PartMark partMark = GetParentPartMarkWithPartMark(hit.collider.transform);
  42. if (m_CurrentSelectPartItem != partMark)
  43. {
  44. if (m_CurrentSelectPartItem != null)
  45. {
  46. m_CurrentSelectPartItem.CloseHighlighter();
  47. }
  48. m_CurrentSelectPartItem = partMark;
  49. m_CurrentSelectPartItem.OpenHighlighter();
  50. }
  51. // 处理射线击中的对象
  52. if (partMark != null)
  53. {
  54. UIKit.OpenPanel<PartLabelPanel>(UILevel.PopUI, new PartLabelPanelData() { partName = partMark.name });
  55. }
  56. }
  57. else
  58. {
  59. if (m_CurrentSelectPartItem != null)
  60. {
  61. m_CurrentSelectPartItem.CloseHighlighter();
  62. m_CurrentSelectPartItem = null;
  63. }
  64. UIKit.HidePanel<PartLabelPanel>();
  65. }
  66. }
  67. /// <summary>
  68. /// 点击物体检测
  69. /// </summary>
  70. private void ClikPartMarkCheck()
  71. {
  72. if (Input.GetMouseButtonDown(0))
  73. {
  74. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  75. RaycastHit hit;
  76. if (Physics.Raycast(ray, out hit))
  77. {
  78. PartMark tmpMark = GetParentPartMarkWithPartMark(hit.collider.transform);
  79. if (tmpMark != null)
  80. {
  81. m_OperationPartMarkStruct.Push(tmpMark);
  82. UIKit.GetPanel<PartListPanel>().SetPartItemState(tmpMark, false);
  83. //点击版不强制刷新镜头位置
  84. //CameraSurround.instance.SetCameraPosition(this.transform);
  85. }
  86. }
  87. }
  88. }
  89. /// <summary>
  90. /// 查找携带PartMark的节点
  91. /// </summary>
  92. /// <param name="traget"></param>
  93. /// <returns></returns>
  94. private PartMark GetParentPartMarkWithPartMark(Transform traget)
  95. {
  96. PartMark tmpMark = traget.GetComponent<PartMark>();
  97. if (tmpMark == null && traget.parent != null)
  98. {
  99. tmpMark = GetParentPartMarkWithPartMark(traget.parent);
  100. }
  101. return tmpMark;
  102. }
  103. public void OnDisable()
  104. {
  105. UIKit.ClosePanel<PartLabelPanel>();
  106. }
  107. public PartInfo GetDevicePartInfos(PartMark partMark)
  108. {
  109. //最父级
  110. PartInfo partInfo = new PartInfo(partMark.transform.name, partMark);
  111. //字级
  112. foreach (var item in partMark.m_ChildPartMarks)
  113. {
  114. partInfo.childPartInfos.Add(GetDevicePartInfos(item));
  115. }
  116. return partInfo;
  117. }
  118. [Button("为所有节点添加标记")]
  119. private void AddPartMark()
  120. {
  121. Transform[] tmpTransforms = GetComponentsInChildren<Transform>();
  122. foreach (var item in tmpTransforms)
  123. {
  124. if (item.GetComponent<PartMark>() == null)
  125. {
  126. item.gameObject.AddComponent<PartMark>();
  127. }
  128. }
  129. }
  130. }