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
{
}
}
}