using System; using System.Collections; using System.Collections.Generic; using System.Text; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; using static UnityEditor.Progress; public class UIClickBody : UIBase { public Button btn; public Transform currentModel; public Transform morePanel; public Button moreBtn; public Transform morePanel2; BodyInfoDataItem currentData; //Dictionary List moreBtns; List moreBtns2; List posBtns; public Transform posParent; private void Awake() { var allModel = DataManager.Instance.GetGameData().allModel; for (int i = 0; i < allModel.Length; i++) { if (allModel[i].gameObject.activeSelf) { currentModel = allModel[i].transform; } } moreBtns = new List(); moreBtns2 = new List(); posBtns = new List(); moreBtns.Clear(); moreBtns2.Clear(); posBtns.Clear(); EventCenter.dispatcher.AddListener(MsgType.OnGetBodyInfo, OnGetBodyInfo); EventCenter.dispatcher.AddListener(MsgType.OnGetBodyPosInfo, OnGetBodyPosInfo); Refrush(); AddCheckQuestionToQuitList(); } private void AddCheckQuestionToQuitList() { int diagnosisID = DataManager.Instance.currentData.id; string url = "http://122.112.171.137:85/api/problem/answer/getClinicalProblem/" + diagnosisID; StartCoroutine(GetCheckQuesiton(url)); } public void Refrush() { int checkType = (int)DataManager.Instance.currentCheckTool; int styleType = (int)DataManager.Instance.currentPeopleStyle; int diagnosisID = DataManager.Instance.currentData.id; string url = string.Format("http://122.112.171.137:85/api/diagnosis/clinical/getClinicalCheckResult?checkType={0}&diagnosisId={1}&postureId={2}", checkType, diagnosisID, styleType); morePanel.gameObject.SetActive(false); StartCoroutine(GetBodyPos(url)); } private void OnDestroy() { EventCenter.dispatcher.RemoveListener(MsgType.OnGetBodyInfo, OnGetBodyInfo); EventCenter.dispatcher.RemoveListener(MsgType.OnGetBodyPosInfo, OnGetBodyPosInfo); } private void OnGetBodyPosInfo(Message evt) { var list = DataManager.Instance.bodyPosInfos; List listData = new List(); for (int i = 0; i < list.Count; i++) { var item = list[i]; FileInfoData data = new FileInfoData(); data.type = (FileType)item.type; data.content = item.content; data.url = item.fileUrl; data.question = item.problemInfoResp; listData.Add(data); } UIBase ui = UIManager.Instance.OpenUI(UIType.UIFile); UIFile fileui = (UIFile)ui; fileui.Init(listData); //switch (item.type) //{ // case 1: // //文本 // //fileui.Init(FileType.text,FileFather.BodyInfo); // break; // case 2: // //图片 // //fileui.Init(FileType.image, FileFather.BodyInfo); // break; // case 3: // //视频 // //fileui.Init(FileType.video, FileFather.BodyInfo); // break; // case 4: // //声音 // //fileui.Init(FileType.music, FileFather.BodyInfo); // break; // case 5: // //测试 // //fileui.Init(FileType.URL, FileFather.BodyInfo); // break; //} } //展示部位按钮 private void OnGetBodyInfo(Message evt) { for (int i = 0; i < posBtns.Count; i++) { GameObject.Destroy(posBtns[i].gameObject); } var data = DataManager.Instance.bodyInfoData; foreach (var item in data) { GameObject root = GetCurrentPos(item.positionId); var newUI = GameObject.Instantiate(btn, posParent); posBtns.Add(newUI.gameObject); if (root != null) { Vector2 player2DPosition = Camera.main.WorldToScreenPoint(root.transform.position); newUI.transform.position = player2DPosition; newUI.gameObject.SetActive(true); newUI.onClick.AddListener(() => { ClearBtnsList(); morePanel.transform.position = newUI.transform.position + new Vector3(170f, 0f); morePanel.gameObject.SetActive(true); //int x = i; //currentData = data[x]; ShowMorePanel(data.IndexOf(item)); }); } } } void ClearBtnsList() { for (int i = 0; i < moreBtns.Count; i++) { GameObject.Destroy(moreBtns[i].gameObject); } for (int i = 0; i < moreBtns2.Count; i++) { GameObject.Destroy(moreBtns2[i].gameObject); } } //一级菜单 void ShowMorePanel(int index) { var data = DataManager.Instance.bodyInfoData; var list = data[index].clinicalProjectPositionRespList; foreach (var item in list) { Button newUI = GameObject.Instantiate(moreBtn, morePanel); newUI.transform.Find("txt").GetComponent().text = item.toolName; newUI.gameObject.SetActive(true); newUI.onClick.AddListener(() => { for (int i = 0; i < moreBtns2.Count; i++) { GameObject.Destroy(moreBtns2[i].gameObject); } morePanel2.transform.position = newUI.transform.position + new Vector3(320f, -20f); if (!morePanel2.gameObject.activeSelf) { morePanel2.gameObject.SetActive(true); ShowMorePane2(index, list.IndexOf(item)); } }); moreBtns.Add(newUI.gameObject); } } //二级菜单 void ShowMorePane2(int index, int index2) { var data = DataManager.Instance.bodyInfoData; var list = data[index].clinicalProjectPositionRespList[index2].clinicalProjectCheckRespList; foreach (var item in list) { Button newUI = GameObject.Instantiate(moreBtn, morePanel2); newUI.transform.Find("txt").GetComponent().text = item.checkName; newUI.gameObject.SetActive(true); newUI.onClick.AddListener(() => { morePanel2.transform.position = newUI.transform.position + new Vector3(50f, 0f); morePanel.gameObject.SetActive(false); morePanel2.gameObject.SetActive(false); ShowTwiceMenuInfo(item); //ShowMorePanel(data.IndexOf(item)); }); moreBtns2.Add(newUI.gameObject); } } void ShowTwiceMenuInfo(ClinicalProjectCheckRespListItem data) { //http://122.112.171.137:85/api/diagnosis/clinical/getClinicalInfo/{projectId} string url = "http://122.112.171.137:85/api/diagnosis/clinical/getClinicalInfo/" + data.projectId; StartCoroutine(ShowPosInfo(url)); } IEnumerator ShowPosInfo(string url) { UnityWebRequest request = UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } else { string receiveContent = request.downloadHandler.text; byte[] datas = Encoding.UTF8.GetBytes(receiveContent); receiveContent = Encoding.UTF8.GetString(datas, 0, datas.Length); //JsonInfo jsonInfo = JsonMapper.ToObject(receiveContent); DataParse.Instance.ParseBodyPosInfo(receiveContent); } } GameObject GetCurrentPos(int id) { //currentModel string name = ""; if (id == 1001 || id == 3001) { name = "甲状腺"; } else if (id == 1002 || id == 2002 || id == 3002 || id == 4001) { name = "胸部"; } else if (id == 1003 || id == 2003 || id == 3003 || id == 4002) { name = "上肢"; } else if (id == 1004 || id == 2004 || id == 3004 || id == 4003) { name = "颈部"; } else if (id == 1005 || id == 3005 || id == 4004) { name = "乳房"; } else if (id == 1006 || id == 3006) { name = "下肢"; } else if (id == 1007 || id == 3007 || id == 4006) { name = "腹部"; } else if (id == 1008 || id == 2005 || id == 3008 || id == 4007) { name = "头部"; } else if (id == 2001) { name = "后胸"; } else if (id == 4005) { name = "盆部"; } if (currentModel != null) { if (currentModel.Find(name).gameObject != null) { return currentModel.Find(name).gameObject; } return null; } else { return null; } } IEnumerator GetCheckQuesiton(string url) { UnityWebRequest request = UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } else { string receiveContent = request.downloadHandler.text; byte[] datas = Encoding.UTF8.GetBytes(receiveContent); receiveContent = Encoding.UTF8.GetString(datas, 0, datas.Length); //JsonInfo jsonInfo = JsonMapper.ToObject(receiveContent); DataParse.Instance.ParseCheckBodyQuestionToQuit(receiveContent); } } IEnumerator GetBodyPos(string url) { UnityWebRequest request = UnityWebRequest.Get(url); yield return request.SendWebRequest(); if (request.isHttpError || request.isNetworkError) { Debug.LogError(request.error); } else { string receiveContent = request.downloadHandler.text; byte[] datas = Encoding.UTF8.GetBytes(receiveContent); receiveContent = Encoding.UTF8.GetString(datas, 0, datas.Length); //JsonInfo jsonInfo = JsonMapper.ToObject(receiveContent); DataParse.Instance.ParseBodyInfo(receiveContent); } } }