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

198 lines
6.6 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 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()
{
// 监听单页加载完成事件
PPTManager.Instance.OnSinglePageLoaded += texture => {
// 立即显示当前加载的页面
DisplaySinglePage(texture);
};
}
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);
switch (togglePath)
{
default:
if (isOn)
{
foreach (Transform child in content)//清理之前的图片
{
DestroyImmediate(child.gameObject);
}
// 启动协程异步加载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);
}
}
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);
//}
}
}