using DG.Tweening; using System; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using UnityAsync; //using UnityEditor.VersionControl; using UnityEngine; using UnityEngine.UI; using WaitUntil = UnityAsync.WaitUntil; [Serializable] public class AllRegionData { public List regions; } [Serializable] public class RegionData { public string region; public string responsibility; public List members; } [Serializable] public class MemberData { public string village; public string position; public string name; public string phone; } [Serializable] public class EmergencyResponseData { public List LDS; } [Serializable] public class ResponseMember { public string unit; public string position; public string name; public string phone; public string responsibility; } [Serializable] public class XHDDAlertData { public AllAlert allAlert; } [Serializable] public class AllAlert { public AlertInfo blueAlert; public AlertInfo yellowAlert; public AlertInfo orangeAlert; public AlertInfo redAlert; } [Serializable] public class AlertInfo { public string publishCondition; public string coreGoal; public List tasks; public List originalSections; } [Serializable] public class TaskItem { public string title; public string items; } [Serializable] public class OriginalSection { public string title; public string content; } [System.Serializable] public enum YJType { BLUE, YELLOW, ORANGE, RED } [Serializable] public class SchedulingPlan { public float max_water_level; public string max_water_level_unit; public string max_water_level_time; public float flood_peak_flow_rate; public string flood_peak_flow_rate_unit; public float intercepted_flood_volume; public string intercepted_flood_volume_unit; public int peak_reduction_rate; public float final_water_level; public string final_water_level_unit; } [Serializable] public class SchedulingResults { public float inflow_peak; public string inflow_peak_unit; public float outflow_total; public string outflow_total_unit; public float initial_water_level; public string initial_water_level_unit; public float target_water_level; public string target_water_level_unit; } [Serializable] public class RiskInformation { public string warning_level; public float submerged_area; public string submerged_area_unit; public float submerged_farmland_area; public string submerged_farmland_area_unit; public float affected_population; public string affected_population_unit; public float submerged_area_gdp; public string submerged_area_gdp_unit; public float flood_loss; public string flood_loss_unit; } [Serializable] public class PersonnelSupport { public int id; public string person; public string unit; public string position; public string phone; } [Serializable] public class MaterialSupport { public int id; public string type; public int quantity; public string unit; public string person_in_charge; public string region; } [Serializable] public class Data { public SchedulingPlan scheduling_plan; public SchedulingResults scheduling_results; public RiskInformation risk_information; public List personnel_support; public List material_support; } [Serializable] public class SchedulingData { public int id; public string scheduling_name; public Data data; } public class XHDDLayer : YZTRootLayer { public RectTransform qxhddContent; public RectTransform xhddContent; private bool inAniamtion = false; public Button enterBtn; public Button exitBtn; public Dropdown yjDropdown; public Button[] yjButtons; public YJType yJType = YJType.BLUE; public bool playing = false; float currentTime = 0; [Header("DownLeft")] public RectTransform rkzyContent; public GameObject rkzyPrefab; [Header("UpRight")] public Text yanmomianjiText; public Text yanmogengdiText; public Text yingxiangrenkouText; public Text gDPText; public Text hongshuisunshiText; [Header("MiddleRight")] public RectTransform rybzContent; public GameObject rybzPrefab; [Header("DownRight")] public RectTransform wzbzContent; public GameObject wzbzPrefab; [Header("损失概况")] public GameObject SunShiGaiKuangPanel; public Text yanMoMianJiText; public Text yanMoGengDiText; public Text yanMoRenKouText; public Text sunShiCaiChanText; public GameObject sunShiLieBiaoPrefab; public Transform sunShiLieBiaoContent; public GameObject mask; public Text yjTitle; public Text fbsjText; public VerticalLayoutGroup zyrwContent; public Text hxmbText; public VerticalLayoutGroup zxmxContent; public VerticalLayoutGroup yrzzContent; public VerticalLayoutGroup xgxzContent; public Dropdown regionDropdown; public GameObject titleContentPrefab; public GameObject g0; public GameObject g1; // Start is called before the first frame update void Start() { InitButton(); InitUpLeft(); InitDownLeft(); InitUpRight(); InitDownRight(); } private void OnEnable() { CameraManager.SwitchCamera(0); StaticLod.instance.OnFoucusStatic(1); TimeLineControl.instance.transform.GetChild(1).GetChild(0).gameObject.SetActive(true); TimeLineControl.instance.transform.GetChild(1).GetChild(1).gameObject.SetActive(true); GameObject.FindGameObjectWithTag("HeMianStatic").transform.GetChild(2).gameObject.SetActive(false); } private async Task InitDownLeft() { await new WaitUntil(() => { return GlobalData.allServerMovePlans.Count > 0; }); for (int i = 0; i < GlobalData.allServerMovePlans.Count; i++) { GameObject obj = Instantiate(rkzyPrefab); obj.transform.SetParent(rkzyContent); obj.transform.localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = i.ToString(); obj.transform.GetChild(1).GetComponent().text = GlobalData.allServerMovePlans[i].from; obj.transform.GetChild(2).GetComponent().text = GlobalData.allServerMovePlans[i].to; obj.transform.GetChild(3).GetComponent().text = CoordinateConverter.Haversine(GlobalData.allServerMovePlans[i].fromLttd, GlobalData.allServerMovePlans[i].fromLong, GlobalData.allServerMovePlans[i].toLttd, GlobalData.allServerMovePlans[i].toLong).ToString("0.00") + "km"; obj.transform.GetChild(4).GetComponent().text = GlobalData.allServerMovePlans[i].manNum.ToString(); } } private void InitUpLeft() { yanmomianjiText.text = $"{GlobalData.schedulingData.data.risk_information.submerged_area} k㎡"; yanmogengdiText.text = $"{GlobalData.schedulingData.data.risk_information.submerged_farmland_area} h㎡"; yingxiangrenkouText.text = $"{GlobalData.schedulingData.data.risk_information.affected_population} 万人"; gDPText.text = $"{GlobalData.schedulingData.data.risk_information.submerged_area_gdp} 亿元"; hongshuisunshiText.text = $"{GlobalData.schedulingData.data.risk_information.flood_loss} 亿元"; } private void InitUpRight() { for (int i = 0; i < GlobalData.schedulingData.data.personnel_support.Count; i++) { GameObject obj = Instantiate(rybzPrefab); obj.transform.SetParent(rybzContent); obj.transform.localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = GlobalData.schedulingData.data.personnel_support[i].id.ToString(); obj.transform.GetChild(1).GetComponent().text = GlobalData.schedulingData.data.personnel_support[i].person; obj.transform.GetChild(2).GetComponent().text = GlobalData.schedulingData.data.personnel_support[i].unit; obj.transform.GetChild(3).GetComponent().text = GlobalData.schedulingData.data.personnel_support[i].position.ToString(); obj.transform.GetChild(4).GetComponent().text = GlobalData.schedulingData.data.personnel_support[i].phone.ToString(); } } private void InitDownRight() { for (int i = 0; i < GlobalData.schedulingData.data.material_support.Count; i++) { GameObject obj = Instantiate(wzbzPrefab); obj.transform.SetParent(wzbzContent); obj.transform.localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = GlobalData.schedulingData.data.material_support[i].id.ToString(); obj.transform.GetChild(1).GetComponent().text = GlobalData.schedulingData.data.material_support[i].type; obj.transform.GetChild(2).GetComponent().text = GlobalData.schedulingData.data.material_support[i].quantity.ToString() + GlobalData.schedulingData.data.material_support[i].unit.ToString(); obj.transform.GetChild(3).GetComponent().text = GlobalData.schedulingData.data.material_support[i].unit.ToString(); obj.transform.GetChild(4).GetComponent().text = GlobalData.schedulingData.data.material_support[i].person_in_charge.ToString(); obj.transform.GetChild(5).GetComponent().text = GlobalData.schedulingData.data.material_support[i].region.ToString(); } } public override void OnUILeave() { base.OnUILeave(); OnExitXHDDYS(); } void OnExitXHDDYS() { qxhddContent.gameObject.SetActive(true); xhddContent.gameObject.SetActive(false); inAniamtion = false; GameObject tkobj = StaticLod.instance.staticImportants[1].gameObject; tkobj.transform.GetChild(1).GetComponent().Play("ZhaMenEmpty"); mask.gameObject.SetActive(false); playing = false; AllRestore(); } void ChangeDDYAContent(AlertInfo alertInfo) { fbsjText.text = alertInfo.publishCondition; hxmbText.text = alertInfo.coreGoal; for (int i = 0; i < alertInfo.tasks.Count; i++) { GameObject obj = Instantiate(titleContentPrefab); obj.GetComponent().SetParent(zyrwContent.transform); obj.GetComponent().localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = alertInfo.tasks[i].title; obj.transform.GetChild(1).GetComponent().text = alertInfo.tasks[i].items; } for (int i = 0; i < alertInfo.originalSections.Count; i++) { GameObject obj = Instantiate(titleContentPrefab); obj.GetComponent().SetParent(zxmxContent.transform); obj.GetComponent().localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = alertInfo.originalSections[i].title; obj.transform.GetChild(1).GetComponent().text = alertInfo.originalSections[i].content; } LayoutRebuilder.ForceRebuildLayoutImmediate(fbsjText.transform.parent.GetComponent()); // 强制重新计算布局 LayoutRebuilder.ForceRebuildLayoutImmediate(hxmbText.transform.parent.GetComponent()); // 强制重新计算布局 LayoutRebuilder.ForceRebuildLayoutImmediate(zyrwContent.GetComponent()); // 强制重新计算布局 LayoutRebuilder.ForceRebuildLayoutImmediate(zxmxContent.GetComponent()); // 强制重新计算布局 } void ChangeXHDDYA1(YJType type) { for (int i = zyrwContent.transform.childCount - 1; i >= 0; i--) { Destroy(zyrwContent.transform.GetChild(i).gameObject); } for (int i = zxmxContent.transform.childCount - 1; i >= 0; i--) { Destroy(zxmxContent.transform.GetChild(i).gameObject); } switch (type) { case YJType.BLUE: yjTitle.text = "蓝色预警"; ChangeDDYAContent(GlobalData.xHDDAlertData.allAlert.blueAlert); break; case YJType.YELLOW: yjTitle.text = "黄色预警"; ChangeDDYAContent(GlobalData.xHDDAlertData.allAlert.yellowAlert); break; case YJType.ORANGE: yjTitle.text = "橙色预警"; ChangeDDYAContent(GlobalData.xHDDAlertData.allAlert.orangeAlert); break; case YJType.RED: yjTitle.text = "红色预警"; ChangeDDYAContent(GlobalData.xHDDAlertData.allAlert.redAlert); break; } } void ChangeXHDDYA2() { for (int i = yrzzContent.transform.childCount - 1; i >= 0; i--) { Destroy(yrzzContent.transform.GetChild(i).gameObject); } for (int i = 0; i < GlobalData.emergencyResponseData.LDS.Count; i++) { GameObject obj = Instantiate(g0); obj.GetComponent().SetParent(yrzzContent.transform); obj.GetComponent().localScale = Vector3.one; obj.transform.GetChild(0).GetChild(0).GetComponent().text = GlobalData.emergencyResponseData.LDS[i].unit; obj.transform.GetChild(0).GetChild(1).GetComponent().text = GlobalData.emergencyResponseData.LDS[i].position; obj.transform.GetChild(0).GetChild(2).GetComponent().text = GlobalData.emergencyResponseData.LDS[i].name; obj.transform.GetChild(0).GetChild(3).GetComponent().text = GlobalData.emergencyResponseData.LDS[i].phone; obj.transform.GetChild(1).GetChild(1).GetComponent().text = GlobalData.emergencyResponseData.LDS[i].responsibility; } } void ChangeXHDDYA3(int index) { for (int i = xgxzContent.transform.childCount - 1; i >= 0; i--) { Destroy(xgxzContent.transform.GetChild(i).gameObject); } for (int i = 0; i < GlobalData.allRegionData.regions[0].members.Count; i++) { GameObject obj = Instantiate(g1); obj.GetComponent().SetParent(xgxzContent.transform); obj.GetComponent().localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = GlobalData.allRegionData.regions[0].members[i].village; obj.transform.GetChild(1).GetComponent().text = GlobalData.allRegionData.regions[0].members[i].position; obj.transform.GetChild(2).GetComponent().text = GlobalData.allRegionData.regions[0].members[i].name; obj.transform.GetChild(3).GetComponent().text = GlobalData.allRegionData.regions[0].members[i].phone; } regionDropdown.ClearOptions(); List dropoptions = new List(); for (int i = 0; i < GlobalData.allRegionData.regions.Count; i++) { dropoptions.Add(new Dropdown.OptionData(GlobalData.allRegionData.regions[i].region)); } regionDropdown.AddOptions(dropoptions); regionDropdown.onValueChanged.RemoveAllListeners(); regionDropdown.onValueChanged.AddListener((int index) => { for (int i = xgxzContent.transform.childCount - 1; i >= 0; i--) { Destroy(xgxzContent.transform.GetChild(i).gameObject); } for (int i = 0; i < GlobalData.allRegionData.regions[index].members.Count;i++ ) { GameObject obj = Instantiate(g1); obj.GetComponent().SetParent(xgxzContent.transform); obj.GetComponent().localScale = Vector3.one; obj.transform.GetChild(0).GetComponent().text = GlobalData.allRegionData.regions[index].members[i].village; obj.transform.GetChild(1).GetComponent().text = GlobalData.allRegionData.regions[index].members[i].position; obj.transform.GetChild(2).GetComponent().text = GlobalData.allRegionData.regions[index].members[i].name; obj.transform.GetChild(3).GetComponent().text = GlobalData.allRegionData.regions[index].members[i].phone; } }); } void InitButton() { enterBtn.onClick.AddListener(() => { qxhddContent.gameObject.SetActive(false); xhddContent.gameObject.SetActive(true); inAniamtion = true; for (int j = 0; j < yjButtons.Length; j++) { yjButtons[j].GetComponent().alpha = 0.2f; } yjButtons[0].GetComponent().alpha = 1f; yJType = (YJType)(0); ChangeXHDDYA1(yJType); ChangeXHDDYA2(); ChangeXHDDYA3(0); }); exitBtn.onClick.AddListener(OnExitXHDDYS); for (int i = 0; i < yjButtons.Length; i++) { int temp = i; yjButtons[i].onClick.AddListener(() => { if (!playing) { } for (int j = 0; j < yjButtons.Length; j++) { yjButtons[j].GetComponent().alpha = 0.2f; } yjButtons[temp].GetComponent().alpha = 1f; yJType = (YJType)(temp); ChangeXHDDYA1(yJType); }); } } void AllRestore() { TimeLineControl.instance.transform.GetChild(1).GetChild(1).localPosition = Vector3.zero; TimeLineControl.instance.transform.GetChild(0).gameObject.SetActive(false); GameObject.FindGameObjectWithTag("HeMianStatic").transform.GetChild(2).gameObject.SetActive(true); Material material = TimeLineControl.instance.transform.GetChild(1).GetChild(0).GetComponent().material; material.SetFloat("_ClipLength", 1); currentTime = 0; } async void ControlYJ() { switch (yJType) { case YJType.YELLOW: TimeLineControl.instance.transform.GetChild(1).GetChild(1).localPosition = Vector3.zero; await new WaitUntil(() => { return currentTime > 1; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird1"); await new WaitUntil(() => { return currentTime > 3; }); if (!playing) { mask.gameObject.SetActive(false); return; } TimeLineControl.instance.transform.GetChild(1).GetChild(1).DOLocalMove(new Vector3(0, 0, 31.2f), 12.0f); await new WaitUntil(() => { return currentTime > 14; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird2"); await new WaitUntil(() => { return currentTime > 17; }); if (!playing) { mask.gameObject.SetActive(false); return; } mask.gameObject.SetActive(false); break; case YJType.ORANGE: TimeLineControl.instance.transform.GetChild(1).GetChild(1).localPosition = new Vector3(0, 0, 31.2f); TimeLineControl.instance.transform.GetChild(0).gameObject.SetActive(false); await new WaitUntil(() => { return currentTime > 1; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird3"); await new WaitUntil(() => { return currentTime > 3; }); if (!playing) { mask.gameObject.SetActive(false); return; } TimeLineControl.instance.transform.GetChild(0).gameObject.SetActive(true); await new WaitUntil(() => { return currentTime > 11; }); if (!playing) { mask.gameObject.SetActive(false); return; } //StaticLod.instance.OnFoucusStatic("Bird3"); await new WaitUntil(() => { return currentTime > 14; }); if (!playing) { mask.gameObject.SetActive(false); return; } mask.gameObject.SetActive(false); break; case YJType.RED: Material material = TimeLineControl.instance.transform.GetChild(1).GetChild(0).GetComponent().material; TimeLineControl.instance.transform.GetChild(0).gameObject.SetActive(false); material.SetFloat("_ClipLength", 1); TimeLineControl.instance.transform.GetChild(1).GetChild(1).localPosition = new Vector3(0, 0, 31.2f); await new WaitUntil(() => { return currentTime > 1; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird2"); await new WaitUntil(() => { return currentTime > 4; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird4"); GameObject tkobj = StaticLod.instance.staticImportants[1].gameObject; tkobj.transform.GetChild(1).GetComponent().Play("ZhaMen"); await new WaitUntil(() => { return currentTime > 5.2; }); if (!playing) { mask.gameObject.SetActive(false); return; } await new WaitUntil(() => { return currentTime > 6.7; }); StaticLod.instance.OnFoucusStatic("Bird5"); CameraManager.instance.mainCamera.GetComponent().target.DOLocalMoveX(2650, 7.0f); await new WaitUntil(() => { return currentTime > 14.7; }); material.SetFloat("_ClipLength", 1f); DOTween.To(() => material.GetFloat("_ClipLength"), x => material.SetFloat("_ClipLength", x), 0.981f, 2f); if (!playing) { mask.gameObject.SetActive(false); return; } await new WaitUntil(() => { return currentTime > 15.7; }); if (!playing) { mask.gameObject.SetActive(false); return; } //StaticLod.instance.OnFoucusStatic("Bird5"); DOTween.To(() => material.GetFloat("_ClipLength"), x => material.SetFloat("_ClipLength", x), 0.881f, 4f); await new WaitUntil(() => { return currentTime > 20.7; }); if (!playing) { mask.gameObject.SetActive(false); return; } StaticLod.instance.OnFoucusStatic("Bird3"); DOTween.To(() => material.GetFloat("_ClipLength"), x => material.SetFloat("_ClipLength", x), 0.1f, 6f); await new WaitUntil(() => { return currentTime > 26.7; }); if (!playing) { mask.gameObject.SetActive(false); return; } mask.gameObject.SetActive(false); break; } } // Update is called once per frame void Update() { currentTime += Time.deltaTime; GameObject tkobj = StaticLod.instance.staticImportants[1].gameObject; tkobj.transform.GetChild(1).gameObject.SetActive(inAniamtion); tkobj.transform.GetChild(tkobj.transform.childCount - 1).gameObject.SetActive(!inAniamtion); } }