TH1/Unity/Assets/Scripts/TH1_UI/View/Outside/UIOutsideTutorView.cs
2026-05-01 22:35:04 +08:00

143 lines
3.8 KiB
C#

using System;
using System.Collections.Generic;
using Animancer;
using Logic;
using Logic.Action;
using Logic.AI;
using Logic.Audio;
using Logic.Multilingual;
using ParadoxNotion;
using RuntimeData;
using Steamworks;
using TH1_Core.Events;
using TH1_Core.Managers;
using TH1_Logic.Action;
using TH1_Logic.Core;
using TH1_Logic.Net;
using TH1_Logic.Steam;
using TH1_UI.View.Announce;
using TH1Resource;
using TMPro;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
namespace TH1_UI.View.Outside
{
public class UIOutsideTutorView : Base.View
{
[Header("按钮")]
public Button CloseButton;
public Button CheckButton;
public Button WikiButton;
[Header("关卡详情")]
public Image LevelBG;
public TextMeshProUGUI TutorName;
public TextMeshProUGUI TutorDesc;
public RectTransform TutorChat1Bubble;
public RectTransform TutorChat2Bubble;
public TextMeshProUGUI TutorChat1;
public TextMeshProUGUI TutorChat2;
public Image Chat1Avatar;
public Image Chat2Avatar;
//关闭时执行的委托
public ViDelegateAssisstant.Dele OnBtnCloseClick;
public Action<ScenarioPack> OnBtnStartClick;
public ViDelegateAssisstant.Dele OnBtnWikiClick;
public GameObject TutorListRowPrefab;
public GameObject TutorListFather;
private List<UIOutsideTutorListRowMono> tutorListRows = new List<UIOutsideTutorListRowMono>();
private ScenarioPack _selectScenario;
protected override void OnInit()
{
base.OnInit();
//清空List下的内容
CheckButton.onClick.RemoveAllListeners();
CheckButton.onClick.AddListener(StartTutor);
CloseButton.onClick.RemoveAllListeners();
CloseButton.onClick.AddListener(()=>{OnBtnCloseClick.Invoke();});
if (WikiButton != null)
{
WikiButton.onClick.RemoveAllListeners();
WikiButton.onClick.AddListener(() => ViDelegateAssisstant.Invoke(OnBtnWikiClick));
}
}
public void Update()
{
}
public void SetContent(ShowUIOutsideTutor evt)
{
SetTutorList();
SetTutorSheet(tutorListRows[0]?.ScenarioData);
UpdateTutorList(tutorListRows[0]);
}
public void SetTutorList()
{
int count = 0;
var data = Table.Instance.ScenarioDataAssets;
foreach(var pack in data.ScenarioList)
if (pack.ScenarioType == ScenarioType.Tutor)
{
count++;
if(count > tutorListRows.Count)
{
var obj = GameObject.Instantiate(TutorListRowPrefab, TutorListFather.transform);
var mono = obj.GetComponent<UIOutsideTutorListRowMono>();
tutorListRows.Add(mono);
}
tutorListRows[count - 1]?.gameObject.SetActive(true);
tutorListRows[count - 1]?.SetContent(pack,SetTutorSheet,UpdateTutorList);
}
for(int i = count;i < tutorListRows.Count;i++)
tutorListRows[i].gameObject.SetActive(false);
}
public void UpdateTutorList(UIOutsideTutorListRowMono selectRow)
{
foreach(var row in tutorListRows)
row.SetColor(row == selectRow);
}
private void SetTutorSheet(ScenarioPack pack)
{
_selectScenario = pack;
if (pack == null) return;
LevelBG.sprite = pack.BGImage;
MultilingualManager.Instance.SetUIText(TutorName,pack.Name);
MultilingualManager.Instance.SetUIText(TutorDesc,pack.Desc);
MultilingualManager.Instance.SetUIText(TutorChat1,pack.DiagList[0]?.Diag);
MultilingualManager.Instance.SetUIText(TutorChat2,pack.DiagList[1]?.Diag);
LayoutRebuilder.ForceRebuildLayoutImmediate(TutorChat1Bubble);
LayoutRebuilder.ForceRebuildLayoutImmediate(TutorChat2Bubble);
Chat1Avatar.sprite = Table.Instance.StoryDataAssets.GetCharSprite(pack.DiagList[0]?.CharName ??StoryCharEnum.None);
Chat2Avatar.sprite = Table.Instance.StoryDataAssets.GetCharSprite(pack.DiagList[1]?.CharName ??StoryCharEnum.None);
}
public void StartTutor()
{
OnBtnStartClick.Invoke(_selectScenario);
}
}
}