TH1/Unity/Assets/Scripts/UI/SettingUI.cs
2025-07-24 16:21:26 +08:00

132 lines
4.0 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using Logic;
using RuntimeData;
using Animancer;
using Logic.Config;
using UnityEngine.UI;
using Logic.Multilingual;
public class SettingUI
{
private Main _main;
private MapData _mapData;
public GameObject ROSettingUI;
private bool _isShowing = false;
private bool _isAnimating = false;
private float _fadeDuration = 0.2f;
public bool NeedShow = false;
private Dictionary<string, GameObject> _languageButtons = new();
public SettingUI(Main main, MapData mapData)
{
_main = main;
_mapData = mapData;
ROSettingUI = UIManager.Instance.ROUIManager.transform.Find("SettingPanel").gameObject;
// 绑定按钮事件
Transform settingList = ROSettingUI.transform.Find("SettingList");
settingList.Find("ButtonRow/CloseButton").GetComponent<Button>().onClick.AddListener(() => { NeedShow = false; });
// 获取语言按钮
Transform row5 = settingList.Find("Row5");
string[] langs = { "CN", "EN", "JP", "KR" };
foreach (var lang in langs)
{
GameObject langObj = row5.Find(lang).gameObject;
_languageButtons[lang] = langObj;
langObj.GetComponent<Button>().onClick.AddListener(() => OnLanguageClicked(lang));
}
ROSettingUI.SetActive(false);
}
private void OnLanguageClicked(string langName)
{
foreach (var kv in _languageButtons)
{
Image img = kv.Value.GetComponent<Image>();
Color c = img.color;
c.a = kv.Key == langName ? 100f / 255f : 0f;
img.color = c;
}
// 触发语言切换
switch (langName)
{
case "CN":
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.ZH);
break;
case "EN":
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.EN);
break;
case "JP":
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.JP);
break;
case "KR":
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.KR);
break;
}
}
public void Update()
{
if (_isAnimating) return;
if (NeedShow && !ROSettingUI.activeSelf)
{
Show();
}
else if (!NeedShow && ROSettingUI.activeSelf)
{
Hide();
}
}
public void Show()
{
if (_isShowing || _isAnimating) return;
_isShowing = true;
_isAnimating = true;
ROSettingUI.SetActive(true);
var toggleButtonController = ROSettingUI.transform.Find("SettingList/Row3/Head1/StyledToggle")
?.GetComponent<ToggleButtonController>();
if (toggleButtonController != null)
toggleButtonController.Refresh(ConfigManager.Instance.Config.ShowReminder,
() => { ConfigManager.Instance.Config.ShowReminder = true;},
() => { ConfigManager.Instance.Config.ShowReminder = false;});
AnimancerComponent animancer = ROSettingUI.GetComponent<AnimancerComponent>();
AnimationClip fadeInClip = Resources.Load<AnimationClip>("Animations/UI/SettingPanelFadeIn");
if (fadeInClip != null)
animancer.Play(fadeInClip);
Timer.Instance.TimerRegister(ROSettingUI, () => { _isAnimating = false; }, _fadeDuration);
}
public void Hide()
{
if (!_isShowing || _isAnimating) return;
_isShowing = false;
_isAnimating = true;
AnimancerComponent animancer = ROSettingUI.GetComponent<AnimancerComponent>();
AnimationClip fadeOutClip = Resources.Load<AnimationClip>("Animations/UI/SettingPanelFadeOut");
if (fadeOutClip != null)
animancer.Play(fadeOutClip);
Timer.Instance.TimerRegister(ROSettingUI, () =>
{
ROSettingUI.SetActive(false);
_isAnimating = false;
}, _fadeDuration);
}
}