ZMJKLayer.cs 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. using UnityEngine;
  6. using UnityEngine.UI;
  7. using UnityAsync;
  8. using WaitUntil = UnityAsync.WaitUntil;
  9. using XCharts.Runtime;
  10. public class ZMJKLayer : MonoBehaviour
  11. {
  12. public GameObject ZhaZhanItemOri;
  13. public Transform itemContent;
  14. public Text zhaZhanCount;
  15. public GameObject gongChengPanel;
  16. public Button closeButton;
  17. public Text zhaZhanMingCheng;
  18. public Text zhaQianShuiWei;
  19. public Text zhaHouShuiWei;
  20. public Text zhaMenKaiDu;
  21. public Text guoZhaLiuLiang;
  22. public Button byBtn;
  23. public Button tkBtn;
  24. public BarChart shuiweiChart;
  25. public InputField _zmSearchInputField;
  26. public List<ZhaZhanItem> currentZMDataList = new List<ZhaZhanItem>();
  27. public GameObject targetObj;
  28. public bool showGongPanel = false;
  29. private Camera _camera;
  30. private void Awake()
  31. {
  32. closeButton.onClick.AddListener(() =>
  33. {
  34. gongChengPanel.SetActive(false);
  35. showGongPanel = false;
  36. });
  37. gongChengPanel.SetActive(false);
  38. showGongPanel = false;
  39. }
  40. private void OnEnable()
  41. {
  42. _camera = CameraManager.instance.mainCamera;
  43. StaticLod.instance.OnFoucusStatic(0);
  44. }
  45. // Start is called before the first frame update
  46. async void Start()
  47. {
  48. InitFloorGateData();
  49. _zmSearchInputField.onValueChanged.AddListener(SearchObsItem);
  50. byBtn.onClick.AddListener(() =>
  51. {
  52. byBtn.GetComponent<CanvasGroup>().alpha = 1;
  53. tkBtn.GetComponent<CanvasGroup>().alpha = 0.5f;
  54. StaticLod.instance.OnFoucusStatic("BuYuan");
  55. });
  56. tkBtn.onClick.AddListener(() =>
  57. {
  58. byBtn.GetComponent<CanvasGroup>().alpha = 0.5f;
  59. tkBtn.GetComponent<CanvasGroup>().alpha = 1f;
  60. StaticLod.instance.OnFoucusStatic("TaoKou");
  61. });
  62. }
  63. async Task InitFloorGateData() {
  64. await new WaitUntil(() =>
  65. {
  66. return GlobalData.floorGateData.success;
  67. });
  68. float[] byV3 = new float[GlobalData.floorGateData.buYuan.Length];
  69. for (int i = 0; i < GlobalData.floorGateData.buYuan.Length; i++)
  70. {
  71. int tempIndex = i;
  72. ZhaZhanItem tempItem = Instantiate(ZhaZhanItemOri, itemContent).GetComponent<ZhaZhanItem>();
  73. tempItem.SetData(GlobalData.floorGateData.buYuan[tempIndex], $"补元闸门-{tempIndex + 1}");
  74. byV3[tempIndex] = GlobalData.floorGateData.buYuan[tempIndex].opening_degree * 0.01f;
  75. Debug.Log($"补元闸门-{tempIndex + 1}:{byV3[tempIndex]}");
  76. tempItem.gameObject.GetComponent<Button>().onClick.AddListener(() =>
  77. {
  78. StaticLod.instance.OnFoucusStatic($"BY_ZM_{tempIndex+1:00}");
  79. targetObj = StaticLod.instance.GetStaticObj($"BY_ZM_{tempIndex + 1:00}");
  80. gongChengPanel.SetActive(true);
  81. showGongPanel = true;
  82. zhaZhanMingCheng.text = tempItem._name;
  83. zhaMenKaiDu.text = $"{GlobalData.floorGateData.buYuan[tempIndex].opening_degree:0.00}<size=14><color=#A5BFE2>%</color></size>";
  84. //guoZhaLiuLiang.text = $"{GlobalData.floorGateData.buYuan[tempIndex].CurrentFlow}<size=14><color=#A5BFE2>m\u00b3/s</color></size>";
  85. guoZhaLiuLiang.text = $"-<size=14><color=#A5BFE2>m\u00b3/s</color></size>";
  86. //zhaQianShuiWei.text = $"{GlobalData.floorGateData.BuYuan.FloodGates[tempIndex]} <size=14><color=#A5BFE2>m</color></size>";
  87. zhaQianShuiWei.text = $"- <size=14><color=#A5BFE2>m</color></size>";
  88. //zhaHouShuiWei.text = $"{GlobalData.floorGateData.BuYuan.FloodGates[tempIndex]} <size=14><color=#A5BFE2>m</color></size>";
  89. zhaHouShuiWei.text = $"{GlobalData.floorGateData.buYuanSW} <size=14><color=#A5BFE2>m</color></size>";
  90. //shuiweiChart todo
  91. var shuiweiData = GlobalData.floorGateData.swzxtBY;
  92. XAxis tempXaxis = shuiweiChart.GetChartComponent<XAxis>();
  93. tempXaxis.data.Clear();
  94. for (int i = 0; i < shuiweiData.Length; i++)
  95. {
  96. tempXaxis.AddData(shuiweiData[i].key);
  97. }
  98. var tempSeries = shuiweiChart.series;
  99. tempSeries[0].serieName = "水位";
  100. tempSeries[1].serieName = "水位";
  101. SerieData[] tempDatas = new SerieData[shuiweiData.Length];
  102. for (int i = 0; i < tempDatas.Length; i++)
  103. {
  104. tempDatas[i] = new SerieData();
  105. tempDatas[i].data = new List<double>();
  106. tempDatas[i].data.Add(i);
  107. tempDatas[i].data.Add(shuiweiData[i].value);
  108. }
  109. tempSeries[0].data.Clear();
  110. tempSeries[0].data.AddRange(tempDatas);
  111. tempSeries[1].data.Clear();
  112. tempSeries[1].data.AddRange(tempDatas);
  113. });
  114. currentZMDataList.Add(tempItem);
  115. }
  116. ActionInstance._Instance.ModelAni_On?.Invoke(AniType.buYuan,byV3);
  117. float[] tkV3 = new float[GlobalData.floorGateData.taoKou.Length];
  118. for (int i = 0; i < GlobalData.floorGateData.taoKou.Length; i++)
  119. {
  120. int tempIndex = i;
  121. ZhaZhanItem tempItem = Instantiate(ZhaZhanItemOri, itemContent).GetComponent<ZhaZhanItem>();
  122. tempItem.SetData(GlobalData.floorGateData.taoKou[tempIndex], $"套口闸门-{tempIndex + 1}");
  123. tkV3[tempIndex] = GlobalData.floorGateData.taoKou[tempIndex].opening_degree * 0.01f;
  124. tempItem.gameObject.GetComponent<Button>().onClick.AddListener(() =>
  125. {
  126. StaticLod.instance.OnFoucusStatic($"TK_ZM_{tempIndex+1:00}");
  127. targetObj = StaticLod.instance.GetStaticObj($"TK_ZM_{tempIndex+1:00}");
  128. gongChengPanel.SetActive(true);
  129. showGongPanel = true;
  130. zhaZhanMingCheng.text = tempItem._name;
  131. zhaMenKaiDu.text = $"{GlobalData.floorGateData.taoKou[tempIndex].opening_degree:0.00}<size=14><color=#A5BFE2>%</color></size>";
  132. //guoZhaLiuLiang.text = $"{GlobalData.floorGateData.taoKou[tempIndex].CurrentFlow}<size=14><color=#A5BFE2>m\u00b3/s</color></size>";
  133. guoZhaLiuLiang.text = $"-<size=14><color=#A5BFE2>m\u00b3/s</color></size>";
  134. //zhaQianShuiWei.text = $"{GlobalData.floorGateData.BuYuan.FloodGates[tempIndex]} <size=14><color=#A5BFE2>m</color></size>";
  135. zhaQianShuiWei.text = $"{GlobalData.floorGateData.taoKouSW} <size=14><color=#A5BFE2>m</color></size>";
  136. //zhaHouShuiWei.text = $"{GlobalData.floorGateData.BuYuan.FloodGates[tempIndex]} <size=14><color=#A5BFE2>m</color></size>";
  137. zhaHouShuiWei.text = $"-<size=14><color=#A5BFE2>m</color></size>";
  138. var shuiweiData = GlobalData.floorGateData.swzxtTK;
  139. XAxis tempXaxis = shuiweiChart.GetChartComponent<XAxis>();
  140. tempXaxis.data.Clear();
  141. for (int i = 0; i < shuiweiData.Length; i++)
  142. {
  143. tempXaxis.AddData(shuiweiData[i].key);
  144. }
  145. var tempSeries = shuiweiChart.series;
  146. tempSeries[0].serieName = "水位";
  147. tempSeries[1].serieName = "水位";
  148. SerieData[] tempDatas = new SerieData[shuiweiData.Length];
  149. for (int i = 0; i < tempDatas.Length; i++)
  150. {
  151. tempDatas[i] = new SerieData();
  152. tempDatas[i].data = new List<double>();
  153. tempDatas[i].data.Add(i);
  154. tempDatas[i].data.Add(shuiweiData[i].value);
  155. }
  156. tempSeries[0].data.Clear();
  157. tempSeries[0].data.AddRange(tempDatas);
  158. tempSeries[1].data.Clear();
  159. tempSeries[1].data.AddRange(tempDatas);
  160. });
  161. currentZMDataList.Add(tempItem);
  162. }
  163. ActionInstance._Instance.ModelAni_On?.Invoke(AniType.taoKou,tkV3);
  164. int totalCount = GlobalData.floorGateData.BuYuanTotalGates + GlobalData.floorGateData.TaoKouTotalGates;
  165. zhaZhanCount.text = $"闸门列表 (<color=#FFFFFF>{totalCount}</color>)";
  166. }
  167. public void SearchObsItem(string s_name)
  168. {
  169. if (s_name.Equals(""))
  170. {
  171. for (int i = 0; i < currentZMDataList.Count; i++)
  172. {
  173. currentZMDataList[i].gameObject.SetActive(true);
  174. }
  175. }
  176. else
  177. {
  178. for (int i = 0; i < currentZMDataList.Count; i++)
  179. {
  180. currentZMDataList[i].gameObject.SetActive(currentZMDataList[i]._name.Contains(s_name));
  181. }
  182. }
  183. }
  184. // Update is called once per frame
  185. void Update()
  186. {
  187. if (showGongPanel)
  188. {
  189. if (targetObj != null)
  190. {
  191. if (IsObjectInCameraView(targetObj.transform, _camera))
  192. {
  193. gongChengPanel.transform.position=_camera.WorldToScreenPoint(targetObj.transform.position);
  194. }
  195. }
  196. }
  197. }
  198. bool IsObjectInCameraView(Transform objectTransform, Camera camera)
  199. {
  200. Vector3 objectScreenPosition = camera.WorldToScreenPoint(objectTransform.position);
  201. return objectScreenPosition.z > 0 &&
  202. objectScreenPosition.x > 0 &&
  203. objectScreenPosition.x < Screen.width &&
  204. objectScreenPosition.y > 0 &&
  205. objectScreenPosition.y < Screen.height;
  206. }
  207. }