CultivationOfBrewing-2/Assets/Scripts/Project/UI/UI_Panel/UI_PPTForPracticePanel.cs

211 lines
6.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
//}
}
}