236 lines
8.1 KiB
C#
236 lines
8.1 KiB
C#
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; //窗口管理器
|
||
|
||
/// <summary>
|
||
/// API面板
|
||
/// </summary>
|
||
public class ApiPanel : PanelBasic
|
||
{
|
||
/// <summary>
|
||
/// 智能提示按钮
|
||
/// </summary>
|
||
public Toggle intellisense_button;
|
||
/// <summary>
|
||
/// 全部提示按钮
|
||
/// </summary>
|
||
public Toggle all_prompts_button;
|
||
/// <summary>
|
||
/// 搜索框
|
||
/// </summary>
|
||
public TMP_InputField search_input_field;
|
||
|
||
/// <summary>
|
||
/// 智能提示面板
|
||
/// </summary>
|
||
public RectTransform intellisense_panel;
|
||
/// <summary>
|
||
/// 全部提示面板
|
||
/// </summary>
|
||
public RectTransform all_prompts_panel;
|
||
|
||
/// <summary>
|
||
/// 智能提示容器
|
||
/// </summary>
|
||
public RectTransform intellisense_api_item_content;
|
||
/// <summary>
|
||
/// 所有提示容器
|
||
/// </summary>
|
||
public RectTransform all_api_item_content;
|
||
/// <summary>
|
||
/// 预制体
|
||
/// </summary>
|
||
public ApiItem api_item_prefab;
|
||
/// <summary>
|
||
/// 实例对象列表
|
||
/// </summary>
|
||
public List<ApiItem> api_items = new List<ApiItem>();
|
||
|
||
|
||
|
||
private ApiDetailPanel api_detail_panel;
|
||
protected override void Awake()
|
||
{
|
||
base.Awake();
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 面板初始化
|
||
/// </summary>
|
||
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<ApiItem>("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<int>() == 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<ApiDetail>();
|
||
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<List<ApiParameters>>(item["apiParameters"].ToString());
|
||
apiDetail.apiReturnValuesObj = JsonConvert.DeserializeObject<List<ApiReturnValues>>(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");
|
||
}
|
||
}));
|
||
}
|
||
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 智能提示
|
||
/// </summary>
|
||
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);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 全部提示
|
||
/// </summary>
|
||
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
|
||
{
|
||
|
||
}
|
||
}
|
||
}
|