211 lines
6.9 KiB
C#
211 lines
6.9 KiB
C#
using Cysharp.Threading.Tasks;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
|
||
public class UI_PPTForPracticePanel : BasePanel
|
||
{
|
||
public GameObject pptImagePrefab;
|
||
public RectTransform content;
|
||
public ScrollRect scrollRect;
|
||
|
||
//public ScrollRect leftscrollRect;
|
||
|
||
public UI_TipsForPracticePanelPPTNameItem pptNameItem;
|
||
public RectTransform Left_content;
|
||
|
||
public CanvasGroup canvasGroup;
|
||
|
||
public string pptFolderName;
|
||
|
||
public UI_SelectDevicePanel UI_SelectDevice;
|
||
|
||
protected bool isPPTLoading = false;
|
||
|
||
protected override void Awake()
|
||
{
|
||
canvasGroup.alpha = 1f;
|
||
|
||
pptFolderName = Application.streamingAssetsPath + "/PPT";
|
||
PPTManager.Instance.PPTFiles(pptFolderName);
|
||
|
||
string[] ppts = PPTManager.Instance.PPTName();
|
||
// 1. 提取文件名并解析数字前缀
|
||
var sortedItems = ppts
|
||
.Select(path => new
|
||
{
|
||
Path = path,
|
||
Name = PPTManager.Instance.PathName(path),
|
||
Order = PPTManager.Instance.ExtractLeadingNumber(PPTManager.Instance.PathName(path)) // 提取数字
|
||
})
|
||
.OrderBy(item => item.Order) // 按数字排序
|
||
.ToList();
|
||
// 2. 生成排序后的按钮
|
||
foreach (var item in sortedItems)
|
||
{
|
||
var buttonItem = Instantiate(pptNameItem, Left_content);
|
||
buttonItem.Init(item.Name);
|
||
buttonItem.PPTName_Tog.gameObject.name = item.Name;
|
||
Debug.Log($"已创建按钮: {item.Name} (排序键: {item.Order})");
|
||
}
|
||
base.Awake();
|
||
|
||
//pptConfig = JsonManager.LoadData<PPTConfig>("pptConfig");
|
||
if (ppts == null || ppts.Length == 0)
|
||
{
|
||
Debug.LogError("PPT路径数组未初始化或为空");
|
||
return;
|
||
}
|
||
}
|
||
|
||
void Start()
|
||
{
|
||
StartCoroutine(AsyncInitPPT());
|
||
}
|
||
|
||
IEnumerator AsyncInitPPT()
|
||
{
|
||
|
||
if (Left_content.transform.childCount > 0)
|
||
{
|
||
Left_content.GetChild(0).GetComponentInChildren<Toggle>().isOn = true;
|
||
}
|
||
yield return null;
|
||
}
|
||
|
||
public override void ShowMe()
|
||
{
|
||
base.ShowMe();
|
||
string pptBtnName = Left_content.GetChild(0).GetComponent<UI_TipsForPracticePanelPPTNameItem>().PPTName_Tog.gameObject.name;
|
||
OnClick(pptBtnName);
|
||
//await ToolManager.CanvasFadeIn(canvasGroup, 0.5f);
|
||
}
|
||
public override void HideMe()
|
||
{
|
||
base.HideMe();
|
||
//await ToolManager.CanvasFadeOut(canvasGroup, 0.5f);
|
||
}
|
||
|
||
protected override void OnClick(string btnName)
|
||
{
|
||
Debug.Log(btnName);
|
||
switch (btnName)
|
||
{
|
||
case "retrun_Btn":
|
||
if (GameManager.RunModelMgr.SceneType != E_SceneType.Site)
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_SelectModePanel>(E_UI_Layer.System, (panel) =>
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_BGPanel>(E_UI_Layer.Bot, (panel) =>
|
||
{
|
||
Debug.Log("退出UI_PPTForPracticePanel");
|
||
GameManager.UIMgr.HidePanel<UI_PPTForPracticePanel>();
|
||
//GameManager.UIMgr.HidePanel<UI_MainTitlePanel>();
|
||
});
|
||
});
|
||
}
|
||
else
|
||
{
|
||
GameManager.UIMgr.HidePanel<UI_PPTForPracticePanel>();
|
||
if (GameManager.UIMgr.GetPanel<UI_BGPanel>() != null)
|
||
{
|
||
GameManager.UIMgr.HidePanel<UI_BGPanel>();
|
||
}
|
||
}
|
||
//Bootstrap.Instance.uiManager.HidePanel<UI_TipsForPracticePanel>();
|
||
break;
|
||
case "EnterPracticalTrainingBtn":
|
||
|
||
//UI_SelectDevice.Init();
|
||
GameManager.RunModelMgr.schemeID = 2002;
|
||
GameManager.ProcessMgr.Init(GameManager.RunModelMgr.schemeID);
|
||
GameManager.UIMgr.ShowPanel<UI_LoadingPanel>(E_UI_Layer.System, (panel) =>
|
||
{
|
||
panel.Init();
|
||
GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.1f);
|
||
GameManager.ScenesMgr.LoadSceneAsyn($"{GameManager.Instance.systemId}_2002_{GameManager.Instance.startSceneName}", () =>
|
||
{
|
||
GameManager.UIMgr.HidePanel<UI_SelectDevicePanel>();
|
||
GameManager.UIMgr.HidePanel<UI_BGPanel>();
|
||
GameManager.UIMgr.HidePanel<UI_PPTForPracticePanel>();
|
||
GameManager.EventMgr.EventTrigger<float>(Enum_EventType.UpdateProgress, 0.9f);
|
||
|
||
});
|
||
});
|
||
Debug.Log("进入实训");
|
||
|
||
break;
|
||
|
||
}
|
||
//await ToolManager.RefreshScrollView(content, scrollRect);
|
||
}
|
||
protected override void OnChangeToggle(string togglePath, bool isOn)
|
||
{
|
||
|
||
base.OnChangeToggle(togglePath, isOn);
|
||
if (isPPTLoading) return;//PPT正在加载中,不处理其他切换
|
||
switch (togglePath)
|
||
{
|
||
default:
|
||
if (isOn)
|
||
{
|
||
foreach (Transform child in content)//清理之前的图片
|
||
{
|
||
DestroyImmediate(child.gameObject);
|
||
}
|
||
isPPTLoading = true;
|
||
// 启动协程异步加载PPT
|
||
StartCoroutine(LoadPPTAsync(togglePath, textures =>
|
||
{
|
||
if (textures != null)
|
||
{
|
||
DisplayPPT(textures);
|
||
}
|
||
}));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
// 添加异步加载方法
|
||
private IEnumerator LoadPPTAsync(string pptName, Action<List<Texture2D>> callback)
|
||
{
|
||
// 调用PPTManager的异步加载方法
|
||
yield return PPTManager.Instance.LoadPPTAsync(pptName, callback);
|
||
}
|
||
|
||
|
||
private void DisplayPPT(List<Texture2D> textures)
|
||
{
|
||
foreach (Transform child in content)
|
||
{
|
||
Destroy(child.gameObject);
|
||
}
|
||
Debug.LogError("texturesCount:" + textures.Count);
|
||
foreach (var texture in textures)
|
||
{
|
||
RawImage rawImage = pptImagePrefab.GetComponent<RawImage>();
|
||
RawImage image = Instantiate(rawImage, content);
|
||
image.texture = texture;
|
||
image.rectTransform.sizeDelta = new Vector2(1608, 940);
|
||
}
|
||
isPPTLoading = false;//完成加载
|
||
}
|
||
|
||
private void DisplaySinglePage(Texture2D texture)
|
||
{
|
||
RawImage rawImage = pptImagePrefab.GetComponent<RawImage>();
|
||
RawImage image = Instantiate(rawImage, content);
|
||
image.texture = texture;
|
||
image.rectTransform.sizeDelta = new Vector2(1608, 940);
|
||
//foreach (Transform child in content)
|
||
//{
|
||
// DestroyImmediate(child.gameObject);
|
||
//}
|
||
}
|
||
}
|