using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using TMPro; using UnityEngine; using UnityEngine.UI; using static InterfaceManager; using static WindowManager; //窗口管理器 /// /// API面板 /// public class ApiPanel : PanelBasic { /// /// 智能提示按钮 /// public Toggle intellisense_button; /// /// 全部提示按钮 /// public Toggle all_prompts_button; /// /// 搜索框 /// public TMP_InputField search_input_field; /// /// 智能提示面板 /// public RectTransform intellisense_panel; /// /// 全部提示面板 /// public RectTransform all_prompts_panel; /// /// 智能提示容器 /// public RectTransform intellisense_api_item_content; /// /// 所有提示容器 /// public RectTransform all_api_item_content; /// /// 预制体 /// public ApiItem api_item_prefab; /// /// 实例对象列表 /// public List api_items = new List(); private ApiDetailPanel api_detail_panel; protected override void Awake() { base.Awake(); } /// /// 面板初始化 /// public void Init(ApiDetailPanel api_detail_panel) { this.api_detail_panel = api_detail_panel; intellisense_button.onValueChanged.AddListener(OnIntellisense); all_prompts_button.onValueChanged.AddListener(OnAllPromps); search_input_field.onValueChanged.AddListener(OnSearch); if (api_item_prefab == null) api_item_prefab = Resources.Load("Prefabs/UIItem/ApiItem"); //智能提示所选api if (GameManager.current_main_menu_type == MainMenuType.课程任务) { CallForTest.instance.currentTaskData.task_steplist.ForEach(a => { for (int i = 0; i < a.apiDetailList.Count; i++) { //对应组件和公共类 if (a.apiDetailList[i].apiType.ToString() == ((int)GameManager.current_component_type).ToString() || a.apiDetailList[i].apiType == "4") { var _item = Instantiate(api_item_prefab, intellisense_api_item_content); _item.Init(a.apiDetailList[i], api_detail_panel); api_items.Add(_item); } } }); } } private void Start() { //全部提示配置api string url = InterfaceManager.IdAddress + ":8080/component/scene/getComponentApiListNonAuth?appId=" + CallForTest.instance.Appid; //string url = "D:\\UserFiles/Api24.1.23.json"; StartCoroutine(Get(url, true,(_data) => { var jb = JObject.Parse(_data); if (jb["code"].ToObject() == 200) { if (jb["data"].ToArray().Length > 0) { string appfileUrl = ""; if (GameManager.current_main_menu_type == MainMenuType.课程任务 || GameManager.current_main_menu_type == MainMenuType.案例中心) { var appfile = jb["data"][0]["apiFiles"].ToList().Find(type => type["type"].ToString() == CallForTest.instance.currentTaskData.programDto.programLanguage); if (appfile != null) { appfileUrl = appfile["fileUrl"].ToString(); } } else if (GameManager.current_main_menu_type == MainMenuType.自由编程) { var appfile = jb["data"][0]["apiFiles"].ToList().Find(type => type["type"].ToString() == "Python"); if (appfile != null) { appfileUrl = appfile["fileUrl"].ToString(); } } if (!string.IsNullOrEmpty(appfileUrl)) { StartCoroutine(Get(appfileUrl,false, txt => { var _api_item_data = new List(); JArray.Parse(txt).ToList().ForEach(item => { ApiDetail apiDetail = new ApiDetail(); apiDetail.apiName = item["apiName"].ToString(); apiDetail.apiFunction = item["apiFunction"].ToString(); apiDetail.apiClass = item["apiClass"].ToString(); apiDetail.apiType = item["apiType"].ToString(); apiDetail.apiUrl = item["apiUrl"].ToString(); apiDetail.apiDescription = item["apiDescription"].ToString(); apiDetail.apiParametersObj = JsonConvert.DeserializeObject>(item["apiParameters"].ToString()); apiDetail.apiReturnValuesObj = JsonConvert.DeserializeObject>(item["apiReturnValues"].ToString()); _api_item_data.Add(apiDetail); }); for (int i = 0; i < _api_item_data.Count; i++) { //对应组件和公共类 if (_api_item_data[i].apiType.ToString() == ((int)GameManager.current_component_type).ToString() || _api_item_data[i].apiType == "4") { var _item = Instantiate(api_item_prefab, all_api_item_content); _item.Init(_api_item_data[i], api_detail_panel); api_items.Add(_item); } } })); } } } else { Debug.LogError("获取api失败:" + jb["msg"].ToString()); ConsolePanel.ConsoleOutput("获取api失败:" + jb["msg"].ToString(), "error"); } })); } /// /// 智能提示 /// public void OnIntellisense(bool _active) { //主窗口和小窗使用同一个脚本,但是在不同Canvas下,所以界面切换时根据当前状态使用不同的Canvas管理器 if (max_screen) { api_detail_panel.OnNagetive(); //切换提示时,同时关闭Api详情 intellisense_panel.gameObject.SetActive(_active); } else { //小窗口 WindowManager.Instance.SwitchResolution(WindowManager.ScreenResolution.MID_SCREEN); intellisense_panel.gameObject.SetActive(_active); } } /// /// 全部提示 /// public void OnAllPromps(bool _active) { if (max_screen) { api_detail_panel.OnNagetive(); //切换提示时,同时关闭Api详情 all_prompts_panel.gameObject.SetActive(_active); } else { WindowManager.Instance.SwitchResolution(WindowManager.ScreenResolution.MID_SCREEN); all_prompts_panel.gameObject.SetActive(_active); } } public void OnSearch(string _text) { if (string.IsNullOrEmpty(_text)) { api_items.ForEach(x => x.gameObject.SetActive(true)); } else { api_items.ForEach(x => x.gameObject.SetActive(x.api_item_data.apiName.Contains(_text))); } } protected override void OnPanelClosed() { base.OnPanelClosed(); if (max_screen) { api_detail_panel.OnNagetive(); //关闭Api面板时,同时关闭Api详情 } else { } } }