132 lines
4.0 KiB
C#
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);
|
|
}
|
|
}
|