using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using UnityAsync; using WaitUntil = UnityAsync.WaitUntil; using Best.HTTP.Caching; [System.Serializable] public class YZTLayerData { public string layerName; public int layerID; } public enum LayerUnitType { ZZ = 1, BZ, NC, QXZ, JK, QT } [System.Serializable] public class LayerUnitData { public bool special; public LayerUnitType type; public float longitude; public float latitude; public string name; public string name_pri; public string text1; public string text2; public string GetTypeName() { string result = ""; switch (type) { case LayerUnitType.ZZ: result = "闸站"; break; case LayerUnitType.BZ: result = "泵站"; break; case LayerUnitType.NC: result = "农场"; break; case LayerUnitType.QXZ: result = "气象站"; break; case LayerUnitType.JK: result = "监控"; break; case LayerUnitType.QT: result = "其他"; break; } return result; } } [System.Serializable] public class HotPointData { public LayerUnitType type; public float longitude; public float latitude; public string name; public string name_pri; } [System.Serializable] public class SWStationRecordData { public string name; public string time; public float value; public int dir; } public class YZTLayer : YZTRootLayer { public VerticalLayoutGroup content; public Sprite[] layerSprite; public Sprite[] hotPointSprite; public LayerBtn layerBtnPrefab; public SecLayerBtn secLayerBtnPrefab; public YZTLayerData[] layerDatas; public RectTransform leftContent; public RectTransform middleContent; public RectTransform rightContent; List layerBtns = new List(); public RuntimePoint pointPrefab; public GameObject runtimePointObj; public RectTransform pointParent; List runtimePointLib = new List(); public GameObject yZTMini; public GameObject yZT; public RectTransform infoRight; public Button returnBtn; private float clickInterval; private Vector3 startClickPosition; public Button[] leftButtons; public Button layerButton; public int currentActiveLeft = 0; public RectTransform layerInfo; public Button layerInfoExitBtn; public List cancelLayer = new List(); public Sprite[] sprites; public Text rainText; public Text[] rainTextNum; public GameObject thingPrefab; public RectTransform thingParent; public List rescordSWStationData = new List(); public List thing3s = new List(); public Button clearBtn; // Start is called before the first frame update async void Awake() { viewMode = ViewMode.miniMap; await InitData(); Init(); InitLeftBtn(); InitLayerInfo(); InitLayerBtns(); InitReturnBtn(); InitRainInfo(); InitSWHeightInfo(); await InitPointData(); InitPoint(); } void InitLeftBtn() { for (int i = 0; i < leftButtons.Length; i++) { int temp = i; leftButtons[i].onClick.AddListener(() => { LeftBtnClick(temp); }); } LeftBtnClick(0); clearBtn.onClick.AddListener(() => { if (clearBtn.GetComponent().sprite == sprites[0]) { clearBtn.GetComponent().sprite = sprites[1]; leftContent.gameObject.SetActive(false); pointParent.gameObject.SetActive(false); middleContent.gameObject.SetActive(false); rightContent.gameObject.SetActive(false); clearBtn.GetComponent().anchoredPosition = new Vector2(-827, clearBtn.GetComponent().anchoredPosition.y); } else { clearBtn.GetComponent().sprite = sprites[0]; leftContent.gameObject.SetActive(true); pointParent.gameObject.SetActive(true); middleContent.gameObject.SetActive(true); rightContent.gameObject.SetActive(true); clearBtn.GetComponent().anchoredPosition = new Vector2(-457, clearBtn.GetComponent().anchoredPosition.y); } }); } async void InitSWHeightInfo() { await new WaitUntil(() => { return GlobalData.swDatas.Count > 0; }); if (rescordSWStationData.Count < 1) { for (int i = 0; i < GlobalData.swDatas.Count; i++) { SWStationRecordData sWStationRecordData = new SWStationRecordData(); sWStationRecordData.dir = 0; sWStationRecordData.name = GlobalData.swDatas[i].STNM; sWStationRecordData.value = (GlobalData.swDatas[i].upz > GlobalData.swDatas[i].dwz)?GlobalData.swDatas[i].upz:GlobalData.swDatas[i].dwz; sWStationRecordData.time = DateTime.Now.ToString("MM/dd HH:mm"); rescordSWStationData.Add(sWStationRecordData); } for (int i = 0; i < rescordSWStationData.Count; i++) { GameObject obj = Instantiate(thingPrefab); obj.GetComponent().SetParent(thingParent); obj.transform.localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = (i + 1).ToString(); obj.transform.GetChild(1).GetComponent().text = rescordSWStationData[i].name.ToString(); obj.transform.GetChild(2).GetComponent().text = rescordSWStationData[i].time.ToString(); obj.transform.GetChild(3).GetComponent().text = rescordSWStationData[i].value.ToString(); if (rescordSWStationData[i].dir == 0) { obj.transform.GetChild(4).localEulerAngles = new Vector3(0, 0, 0); } else if (rescordSWStationData[i].dir == 1) { obj.transform.GetChild(4).localEulerAngles = new Vector3(0, 0, 90); } else { obj.transform.GetChild(4).localEulerAngles = new Vector3(0, 0, -90); } thing3s.Add(obj); } } else { for (int i = 0; i < GlobalData.swDatas.Count; i++) { rescordSWStationData[i].name = GlobalData.swDatas[i].STNM; float lastValue = rescordSWStationData[i].value; rescordSWStationData[i].value = (GlobalData.swDatas[i].upz > GlobalData.swDatas[i].dwz) ? GlobalData.swDatas[i].upz : GlobalData.swDatas[i].dwz; rescordSWStationData[i].time = DateTime.Now.ToString("MM/dd HH:mm"); if (rescordSWStationData[i].value > lastValue) { rescordSWStationData[i].dir = 1; } else if (rescordSWStationData[i].value > lastValue) { rescordSWStationData[i].dir = 0; } else { rescordSWStationData[i].dir = -1; } } for (int i = 0; i < rescordSWStationData.Count; i++) { thing3s[i].transform.GetChild(0).GetComponent().text = (i + 1).ToString(); thing3s[i].transform.GetChild(1).GetComponent().text = rescordSWStationData[i].name.ToString(); thing3s[i].transform.GetChild(2).GetComponent().text = rescordSWStationData[i].time.ToString(); thing3s[i].transform.GetChild(3).GetComponent().text = rescordSWStationData[i].value.ToString(); if (rescordSWStationData[i].dir == 0) { thing3s[i].transform.GetChild(4).localEulerAngles = new Vector3(0, 0, 0); } else if (rescordSWStationData[i].dir == 1) { thing3s[i].transform.GetChild(4).localEulerAngles = new Vector3(0, 0, 90); } else { thing3s[i].transform.GetChild(4).localEulerAngles = new Vector3(0, 0, -90); } } } } async void InitRainInfo() { await new WaitUntil(() => { return GlobalData.qXZDatas.Count > 0; }); int qxzCount = GlobalData.qXZDatas.Count; string maxName = ""; float maxValue = -99f; int value010 = 0; int value1025 = 0; int value2550 = 0; int value50100 = 0; int value100200 = 0; int value200 = 0; for (int i = 0; i < qxzCount; i++) { float value = GlobalData.qXZDatas[i].dropSum6; if (value > maxValue) { maxValue = value; maxName = GlobalData.qXZDatas[i].STNM; } if (value >= 0 && value < 10) { value010++; } else if (value >= 10 && value < 25) { value1025++; } else if (value >= 25 && value < 50) { value2550++; } else if (value >= 50 && value < 100) { value50100++; } else if (value >= 100 && value < 200) { value100200++; } else { value200++; } } rainText.text = $"数据时间:17日12时至18日12时(过去24小时)\r\n蓄洪区共有{qxzCount}个雨量站,其中几个雨量站监测有降雨最大降雨测站为{maxName}站点,降雨量{maxValue}mm."; rainTextNum[0].text = value010.ToString(); rainTextNum[1].text = value1025.ToString(); rainTextNum[2].text = value2550.ToString(); rainTextNum[3].text = value50100.ToString(); rainTextNum[4].text = value100200.ToString(); rainTextNum[5].text = value200.ToString(); } void InitLayerInfo() { Button[] btns = layerInfo.GetComponentsInChildren