244 lines
7.5 KiB
C#
244 lines
7.5 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using Animancer;
|
||
using Logic;
|
||
using Logic.Action;
|
||
using Logic.AI;
|
||
using Logic.Audio;
|
||
using Logic.Config;
|
||
using Logic.Multilingual;
|
||
using ParadoxNotion;
|
||
using RuntimeData;
|
||
using Steamworks;
|
||
using TH1_Core.Events;
|
||
using TH1_Core.Managers;
|
||
using TH1_Logic.Action;
|
||
using TH1_Logic.Config;
|
||
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;
|
||
using ConfigManager = TH1_Logic.Config.ConfigManager;
|
||
|
||
namespace TH1_UI.View.Outside
|
||
{
|
||
|
||
|
||
public class UIOutsideMenuSettingPanelMono : MonoBehaviour
|
||
{
|
||
|
||
public AnimancerComponent Animancer;
|
||
public Button CloseButton;
|
||
public Button BlockButton;
|
||
|
||
public UIOutsideSelectOptionGroupMono LanguageOptionGroup;
|
||
|
||
// MoreLanguage 模块:仅在 LanguageOptionGroup 选中索引 5 (moreLanguage) 时显示
|
||
// 本面板不需要 ManageHint,ManageButton 直接关闭本 Setting 并打开 UIOutsideMod
|
||
public GameObject MoreLanguageModule;
|
||
public TMP_Text NowUsingLanguageText;
|
||
public Button ManageButton;
|
||
|
||
//关闭时执行的委托
|
||
public ViDelegateAssisstant.Dele OnBtnCloseClick;
|
||
|
||
//开始游戏时执行的委托(目前委托内容就是执行controller的Close())
|
||
public ViDelegateAssisstant.Dele OnStartGame;
|
||
|
||
public void OnInit()
|
||
{
|
||
CloseButton.onClick.RemoveAllListeners();
|
||
CloseButton.onClick.AddListener(OnClose);
|
||
BlockButton.onClick.RemoveAllListeners();
|
||
BlockButton.onClick.AddListener(OnClose);
|
||
|
||
if (ManageButton != null)
|
||
{
|
||
ManageButton.onClick.RemoveAllListeners();
|
||
ManageButton.onClick.AddListener(OnManageButtonClicked);
|
||
}
|
||
|
||
gameObject.SetActive(false);
|
||
}
|
||
|
||
public void RefreshLanguageOption()
|
||
{
|
||
var lan = MultilingualManager.Instance.GetCurLanguage();
|
||
|
||
// 当前语言只要不是 5 主语言之一,就停在 moreLanguage (索引 5),并展开 MoreLanguageModule。
|
||
// SecondaryLanguage 仅作为"点击 moreLanguage 时切到哪个语言"的预设值使用,不参与此判定。
|
||
uint idx;
|
||
bool useMore = !IsPrimaryLanguage(lan);
|
||
if (useMore)
|
||
{
|
||
idx = 5;
|
||
// 同步 SecondaryLanguage = 当前语言
|
||
if (ConfigManager.Instance.Config.SecondaryLanguage != lan)
|
||
{
|
||
ConfigManager.Instance.Config.SecondaryLanguage = lan;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
idx = lan switch
|
||
{
|
||
MultilingualType.ZH => 0,
|
||
MultilingualType.TDZH => 1,
|
||
MultilingualType.JP => 2,
|
||
MultilingualType.EN => 3,
|
||
MultilingualType.KR => 4,
|
||
_ => 3 //默认英文
|
||
};
|
||
}
|
||
LanguageOptionGroup.Init(idx);
|
||
|
||
LanguageOptionGroup.OnOptionClicked = OnLanguageClicked;
|
||
|
||
RefreshMoreLanguageModule(useMore);
|
||
}
|
||
|
||
// 主语言区即 OptionGroup 索引 0~4 直接对应的 5 种语言
|
||
private bool IsPrimaryLanguage(MultilingualType type)
|
||
{
|
||
return type == MultilingualType.ZH
|
||
|| type == MultilingualType.TDZH
|
||
|| type == MultilingualType.JP
|
||
|| type == MultilingualType.EN
|
||
|| type == MultilingualType.KR;
|
||
}
|
||
|
||
private void RefreshMoreLanguageModule(bool show)
|
||
{
|
||
if (MoreLanguageModule != null)
|
||
{
|
||
MoreLanguageModule.SetActive(show);
|
||
}
|
||
if (NowUsingLanguageText != null)
|
||
{
|
||
// 显示当前正在用的语言(与高亮的 MoreLanguage 选项对应),而不是 SecondaryLanguage —— 两者已经同步
|
||
NowUsingLanguageText.text = GetLanguageDisplayName(MultilingualManager.Instance.GetCurLanguage());
|
||
}
|
||
}
|
||
|
||
// 第二语言显示名(与 UITopSettingView 一致)
|
||
private string GetLanguageDisplayName(MultilingualType type)
|
||
{
|
||
return type switch
|
||
{
|
||
MultilingualType.ZH => "简体中文",
|
||
MultilingualType.TDZH => "繁體中文",
|
||
MultilingualType.EN => "English",
|
||
MultilingualType.JP => "日本語",
|
||
MultilingualType.KR => "한국어",
|
||
MultilingualType.RU => "Русский",
|
||
MultilingualType.ES => "Español",
|
||
MultilingualType.PT => "Português",
|
||
MultilingualType.FR => "Français",
|
||
MultilingualType.DE => "Deutsch",
|
||
MultilingualType.ID => "Bahasa Indonesia",
|
||
MultilingualType.TH => "ภาษาไทย", //这个没字体
|
||
MultilingualType.PL => "Polski",
|
||
MultilingualType.VI => "Tiếng Việt",
|
||
MultilingualType.MS => "Bahasa Melayu",
|
||
MultilingualType.UK => "Українська",
|
||
MultilingualType.KZ => "Қазақша",
|
||
MultilingualType.TR => "Türkçe",
|
||
MultilingualType.IT => "Italiano",
|
||
MultilingualType.NL => "Nederlands",
|
||
MultilingualType.FI => "Suomi",
|
||
MultilingualType.SV => "Svenska",
|
||
MultilingualType.NO => "Norsk",
|
||
MultilingualType.CS => "Čeština",
|
||
MultilingualType.HU => "Magyar",
|
||
MultilingualType.EL => "Ελληνικά",
|
||
MultilingualType.RO => "Română",
|
||
MultilingualType.ET => "Eesti",
|
||
MultilingualType.LT => "Lietuvių",
|
||
MultilingualType.HR => "Hrvatski",
|
||
MultilingualType.SR => "Српски",
|
||
MultilingualType.SL => "Slovenščina",
|
||
MultilingualType.SK => "Slovenčina",
|
||
MultilingualType.BE => "Беларуская",
|
||
MultilingualType.HE => "עברית",//没字体
|
||
MultilingualType.BG => "Български",//没字体
|
||
MultilingualType.UZ => "Oʻzbekcha",//没字体
|
||
MultilingualType.KY => "Кыргызча",
|
||
MultilingualType.MN => "Монгол",
|
||
MultilingualType.AR => "العربية",
|
||
MultilingualType.DA => "Dansk",
|
||
MultilingualType.TL => "Filipino",
|
||
MultilingualType.Custom => "Custom",
|
||
_ => type.ToString()
|
||
};
|
||
}
|
||
|
||
// ManageButton 点击:先关掉本 Setting 面板,再发事件打开 UIOutsideMod
|
||
// 注意:跳到外层 OutsideManager 切换 Task 时,整个 MenuView 会被 SetActive(false),
|
||
// 中断 OnClose 的 fadeOut 动画,导致 OnEnd 回调残留 + gameObject 仍保持 active=true。
|
||
// 等玩家从 Mod 回来再次点 Setting 时,新 fadeIn 触发会结算上一次残留的 OnEnd 把面板瞬间关掉。
|
||
// 所以这里不走带回调的 OnClose(),直接同步隐藏。
|
||
private void OnManageButtonClicked()
|
||
{
|
||
gameObject.SetActive(false);
|
||
EventManager.Publish(new ShowUIOutsideMod());
|
||
}
|
||
|
||
public void Open()
|
||
{
|
||
gameObject.SetActive(true);
|
||
RefreshLanguageOption();
|
||
Animancer.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeIn);
|
||
}
|
||
|
||
public void OnClose()
|
||
{
|
||
AnimancerState state = Animancer.Play(ResourceCache.Instance.AnimCache.UICommonPanelFadeOut);
|
||
state.Events.OnEnd += () => { gameObject.SetActive(false); };
|
||
}
|
||
|
||
private void OnLanguageClicked(uint idx)
|
||
{
|
||
// 触发语言切换 0=CN 1=TC 2=JP 3=EN 4=KR 5=moreLanguage
|
||
if (idx == 5)
|
||
{
|
||
// 切到玩家配置的第二语言,并展开 MoreLanguageModule
|
||
var secondary = ConfigManager.Instance.Config.SecondaryLanguage;
|
||
if (secondary == MultilingualType.None) secondary = MultilingualType.EN;
|
||
MultilingualManager.Instance.ChangedMultilingual(secondary);
|
||
RefreshMoreLanguageModule(true);
|
||
return;
|
||
}
|
||
|
||
// 切回主语言时收起 MoreLanguageModule
|
||
RefreshMoreLanguageModule(false);
|
||
|
||
switch (idx)
|
||
{
|
||
case 0:
|
||
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.ZH);
|
||
break;
|
||
case 1:
|
||
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.TDZH);
|
||
break;
|
||
case 2:
|
||
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.JP);
|
||
break;
|
||
case 3:
|
||
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.EN);
|
||
break;
|
||
case 4:
|
||
MultilingualManager.Instance.ChangedMultilingual(MultilingualType.KR);
|
||
break;
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
}
|