diff --git a/Assets/Resources/Fgui/Common/Common_fui.bytes b/Assets/Resources/Fgui/Common/Common_fui.bytes index 5f4bf53b3..eedfbb134 100644 Binary files a/Assets/Resources/Fgui/Common/Common_fui.bytes and b/Assets/Resources/Fgui/Common/Common_fui.bytes differ diff --git a/Assets/Resources/Fgui/Main/Main_fui.bytes b/Assets/Resources/Fgui/Main/Main_fui.bytes index 0f0d1709e..3cef4e3ca 100644 Binary files a/Assets/Resources/Fgui/Main/Main_fui.bytes and b/Assets/Resources/Fgui/Main/Main_fui.bytes differ diff --git a/Assets/Scripts/Common/Services/Settings/Base/OptionBase.cs b/Assets/Scripts/Common/Services/Settings/Base/OptionBase.cs index 629ff44fc..909ce01e8 100644 --- a/Assets/Scripts/Common/Services/Settings/Base/OptionBase.cs +++ b/Assets/Scripts/Common/Services/Settings/Base/OptionBase.cs @@ -53,12 +53,11 @@ namespace NBF.Setting public ISettings Root { get; private set; } - public void Initialize(ISettings root) { Root = root; - OnInitialize(); Load(); + OnInitialize(); Apply(); } diff --git a/Assets/Scripts/Common/Services/Settings/Options/Language/LanguageSetting.cs b/Assets/Scripts/Common/Services/Settings/Options/Language/LanguageSetting.cs index 7e1ba6615..f8b783ed5 100644 --- a/Assets/Scripts/Common/Services/Settings/Options/Language/LanguageSetting.cs +++ b/Assets/Scripts/Common/Services/Settings/Options/Language/LanguageSetting.cs @@ -3,21 +3,10 @@ using UnityEngine; namespace NBF.Setting { - public enum SettingLanguage - { - English = 10, - French = 14, - Japanese = 22, - Korean = 23, - Russian = 30, - ChineseSimplified = 40, - ChineseTraditional = 41, - } - [Sort(100)] - public class LanguageSetting : MultiOption + public class LanguageSetting : MultiOption { - private SettingLanguage _defaultLanguage; + private int _defaultLanguage; public override string Name => "Language"; public override string Group => SettingsDef.Group.Language; @@ -27,11 +16,38 @@ namespace NBF.Setting protected override void OnInitialize() { - _defaultLanguage = (SettingLanguage)Application.systemLanguage; + var list = LanguageConst.LanguageList; + var systemLanguage = Application.systemLanguage; + var systemIndex = list.FindIndex(t => t.Language == systemLanguage); + if (systemIndex < 0) + { + systemIndex = 0; + } + + _defaultLanguage = (int)Lan.Inst.GetCurrentLanguage(); + for (int i = 0; i < list.Count; i++) + { + var lang = list[i]; + AddOption(lang.Name, i); + } + + _defaultLanguage = systemIndex; + var current = GetValue(); + if (current < 0 || current >= LanguageConst.LanguageList.Count) + { + SetValue(_defaultLanguage); + } } protected override void OnApply() { + var lang = LanguageConst.LanguageList[GetValue()]; + Lan.Inst.UseLanguage(lang.Language); } + + // public override string GetDisplayString() + // { + // return ((SystemLanguage)GetValue()).ToString(); + // } } } \ No newline at end of file diff --git a/Assets/Scripts/NBC/Language/Runtime/Const/LanguageConst.cs b/Assets/Scripts/NBC/Language/Runtime/Const/LanguageConst.cs index cb541aa78..d10611217 100644 --- a/Assets/Scripts/NBC/Language/Runtime/Const/LanguageConst.cs +++ b/Assets/Scripts/NBC/Language/Runtime/Const/LanguageConst.cs @@ -16,83 +16,42 @@ namespace NBC //简体中文、繁体中文、英语、日语、韩语、泰语、越南语、法语、德语、葡萄牙与、西班牙语、俄语、波兰语、荷兰语、 - //土耳其语、意大利语、印度尼西亚语 + public static readonly List LanguageList = new List() + { + new LanguageInfo() { Language = SystemLanguage.English, Name = "English", Code = "en" }, + new LanguageInfo() { Language = SystemLanguage.ChineseSimplified, Name = "简体中文", Code = "zh-CN" }, + // new LanguageInfo() { Language = SystemLanguage.ChineseTraditional, Name = "繁體中文", Code = "zh-TW" }, + // new LanguageInfo() { Language = SystemLanguage.Japanese, Name = "日本語", Code = "ja" }, + // new LanguageInfo() { Language = SystemLanguage.Korean, Name = "한국어", Code = "ko" }, + // new LanguageInfo() { Language = SystemLanguage.Thai, Name = "ไทย", Code = "th" }, + // new LanguageInfo() { Language = SystemLanguage.Vietnamese, Name = "Tiếng Việt", Code = "vi" }, + // new LanguageInfo() { Language = SystemLanguage.German, Name = "Deutsch", Code = "de" }, + // new LanguageInfo() { Language = SystemLanguage.French, Name = "Français", Code = "fr" }, + // new LanguageInfo() { Language = SystemLanguage.Russian, Name = "Русский", Code = "ru" }, + // new LanguageInfo() { Language = SystemLanguage.Spanish, Name = "Español", Code = "es" }, + // new LanguageInfo() { Language = SystemLanguage.Portuguese, Name = "Português", Code = "pt" }, + // new LanguageInfo() { Language = SystemLanguage.Polish, Name = "Polski", Code = "pl" }, + // new LanguageInfo() { Language = SystemLanguage.Dutch, Name = "Nederlands", Code = "nl" }, + // new LanguageInfo() { Language = SystemLanguage.Turkish, Name = "Türkçe", Code = "tr" }, + // new LanguageInfo() { Language = SystemLanguage.Indonesian, Name = "Bahasa Indonesia", Code = "id" }, + // new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" } + }; + /// /// 自定义语言和名字映射关系 /// public static readonly Dictionary languageMap = - new Dictionary() + new Dictionary(); + + static LanguageConst() + { + languageMap.Clear(); + foreach (var languageInfo in LanguageList) { - { - SystemLanguage.English, - new LanguageInfo() { Language = SystemLanguage.English, Name = "English", Code = "en" } - }, - { - SystemLanguage.ChineseSimplified, - new LanguageInfo() { Language = SystemLanguage.ChineseSimplified, Name = "简体中文", Code = "zh-CN" } - }, - // { - // SystemLanguage.ChineseTraditional, - // new LanguageInfo() { Language = SystemLanguage.ChineseTraditional, Name = "繁體中文", Code = "zh-TW" } - // }, - // { - // SystemLanguage.Japanese, - // new LanguageInfo() { Language = SystemLanguage.Japanese, Name = "日本語", Code = "ja" } - // }, - // { - // SystemLanguage.Korean, - // new LanguageInfo() { Language = SystemLanguage.Korean, Name = "한국어", Code = "ko" } - // }, - // { - // SystemLanguage.Thai, - // new LanguageInfo() { Language = SystemLanguage.Thai, Name = "ไทย", Code = "th" } - // }, - // { - // SystemLanguage.Vietnamese, - // new LanguageInfo() { Language = SystemLanguage.Vietnamese, Name = "Tiếng Việt", Code = "vi" } - // }, - // { - // SystemLanguage.German, - // new LanguageInfo() { Language = SystemLanguage.German, Name = "Deutsch", Code = "de" } - // }, - // { - // SystemLanguage.French, - // new LanguageInfo() { Language = SystemLanguage.French, Name = "Français", Code = "fr" } - // }, - // { - // SystemLanguage.Russian, - // new LanguageInfo() { Language = SystemLanguage.Russian, Name = "Русский", Code = "ru" } - // }, - // { - // SystemLanguage.Spanish, - // new LanguageInfo() { Language = SystemLanguage.Spanish, Name = "Español", Code = "es" } - // }, - // { - // SystemLanguage.Portuguese, - // new LanguageInfo() { Language = SystemLanguage.Portuguese, Name = "Português", Code = "pt" } - // }, - // { - // SystemLanguage.Polish, - // new LanguageInfo() { Language = SystemLanguage.Polish, Name = "Polski", Code = "pl" } - // }, - // { - // SystemLanguage.Dutch, - // new LanguageInfo() { Language = SystemLanguage.Dutch, Name = "Nederlands", Code = "nl" } - // }, - // { - // SystemLanguage.Turkish, - // new LanguageInfo() { Language = SystemLanguage.Turkish, Name = "Türkçe", Code = "tr" } - // }, - // { - // SystemLanguage.Indonesian, - // new LanguageInfo() { Language = SystemLanguage.Indonesian, Name = "Bahasa Indonesia", Code = "id" } - // }, - // { - // SystemLanguage.Italian, - // new LanguageInfo() { Language = SystemLanguage.Italian, Name = "Italiano", Code = "it" } - // }, - }; + languageMap.Add(languageInfo.Language, languageInfo); + } + } } } \ No newline at end of file diff --git a/Assets/Scripts/Startup/App.cs b/Assets/Scripts/Startup/App.cs index 48bb87416..1558f98d5 100644 --- a/Assets/Scripts/Startup/App.cs +++ b/Assets/Scripts/Startup/App.cs @@ -61,8 +61,8 @@ namespace NBF private void Init() { - InitService(); InitLanguage(); + InitService(); InitUI(); } @@ -70,6 +70,7 @@ namespace NBF private void InitLanguage() { + // var map = LanguageConst.languageMap; Lan.Inst.AddLanguageModule((int)LanguageModuleType.Text, new LanguageText()); Lan.Inst.AddLanguageModule((int)LanguageModuleType.Image, new LanguageImage()); Lan.Inst.AddLanguageModule((int)LanguageModuleType.Font, new LanguageFont()); @@ -80,7 +81,7 @@ namespace NBF } UI.Inst.SetUILanguage(); - Lan.Inst.AutoUseLanguage(); + // Lan.Inst.AutoUseLanguage(); } #endregion diff --git a/Assets/Scripts/UI/Binders/CommonBinder.cs b/Assets/Scripts/UI/Binders/CommonBinder.cs index d03266723..4283d11e1 100644 --- a/Assets/Scripts/UI/Binders/CommonBinder.cs +++ b/Assets/Scripts/UI/Binders/CommonBinder.cs @@ -8,6 +8,7 @@ namespace NBF { public static void BindAll() { + UIObjectFactory.SetPackageItemExtension(SelectPages.URL, typeof(SelectPages)); UIObjectFactory.SetPackageItemExtension(BottomMenu.URL, typeof(BottomMenu)); UIObjectFactory.SetPackageItemExtension(ClassifyList.URL, typeof(ClassifyList)); UIObjectFactory.SetPackageItemExtension(CommonMenu.URL, typeof(CommonMenu)); diff --git a/Assets/Scripts/UI/Common/SelectPages.Designer.cs b/Assets/Scripts/UI/Common/SelectPages.Designer.cs new file mode 100644 index 000000000..082d84cae --- /dev/null +++ b/Assets/Scripts/UI/Common/SelectPages.Designer.cs @@ -0,0 +1,25 @@ +/**本脚本为自动生成,每次生成会覆盖!请勿手动修改,生成插件文档及项目地址:https://git.whoot.com/whoot-games/whoot.fguieditorplugin**/ + + +using FairyGUI; +using FairyGUI.Utils; +using NBC; + +namespace NBF +{ + public partial class SelectPages + { + public const string URL = "ui://6hgkvlau5dtx1a"; + + public GList List; + + public override void ConstructFromXML(XML xml) + { + base.ConstructFromXML(xml); + + List = (GList)GetChild("List"); + OnInited(); + UILanguage.TrySetComponentLanguage(this); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/SelectPages.Designer.cs.meta b/Assets/Scripts/UI/Common/SelectPages.Designer.cs.meta new file mode 100644 index 000000000..c7356c085 --- /dev/null +++ b/Assets/Scripts/UI/Common/SelectPages.Designer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8e05d47a4fe9d174db57d8e523b1d53b \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/SelectPages.cs b/Assets/Scripts/UI/Common/SelectPages.cs new file mode 100644 index 000000000..9040952f9 --- /dev/null +++ b/Assets/Scripts/UI/Common/SelectPages.cs @@ -0,0 +1,36 @@ +// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 + +using UnityEngine; +using FairyGUI; +using NBC; + +namespace NBF +{ + public partial class SelectPages : GComponent + { + public int TotalPages { get; private set; } + + public int CurrentPage { get; private set; } + + private void OnInited() + { + } + + public void SetTotal(int totalPage) + { + TotalPages = totalPage; + List.RemoveChildrenToPool(); + for (var i = 0; i < totalPage; i++) + { + List.AddItemFromPool(); + } + } + + public void SetCurrent(int currentPage) + { + if (currentPage < 0 || currentPage >= TotalPages) return; + CurrentPage = currentPage; + List.selectedIndex = CurrentPage; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/Common/SelectPages.cs.meta b/Assets/Scripts/UI/Common/SelectPages.cs.meta new file mode 100644 index 000000000..25a1e0ae4 --- /dev/null +++ b/Assets/Scripts/UI/Common/SelectPages.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 405973384bfed8e409a629849e3cef2e \ No newline at end of file diff --git a/Assets/Scripts/UI/Settings/SettingItem.Designer.cs b/Assets/Scripts/UI/Settings/SettingItem.Designer.cs index 27912a385..f16bb95e7 100644 --- a/Assets/Scripts/UI/Settings/SettingItem.Designer.cs +++ b/Assets/Scripts/UI/Settings/SettingItem.Designer.cs @@ -19,6 +19,7 @@ namespace NBF public BtnInputControl BtnPrev; public BtnInputControl BtnNext; public GTextField TextSliderValue; + public SelectPages Pages; public override void ConstructFromXML(XML xml) { @@ -32,6 +33,7 @@ namespace NBF BtnPrev = (BtnInputControl)GetChild("BtnPrev"); BtnNext = (BtnInputControl)GetChild("BtnNext"); TextSliderValue = (GTextField)GetChild("TextSliderValue"); + Pages = (SelectPages)GetChild("Pages"); OnInited(); UILanguage.TrySetComponentLanguage(this); } diff --git a/Assets/Scripts/UI/Settings/SettingItem.cs b/Assets/Scripts/UI/Settings/SettingItem.cs index 404ad7f8e..041355010 100644 --- a/Assets/Scripts/UI/Settings/SettingItem.cs +++ b/Assets/Scripts/UI/Settings/SettingItem.cs @@ -135,6 +135,7 @@ namespace NBF private void UpdateValueText() { + Pages.visible = false; if (Option is RangeOption range) { Slider.value = range.GetValue(); @@ -143,6 +144,14 @@ namespace NBF else if (Option is IMultiOption multiOption) { TextInfo.text = multiOption.GetDisplayString(); + Pages.visible = true; + var count = multiOption.GetOptionNames().Count; + if (Pages.TotalPages != count) + { + Pages.SetTotal(count); + } + + Pages.SetCurrent(multiOption.GetValue()); } } } diff --git a/Assets/Scripts/UI/Settings/SettingPanel.cs b/Assets/Scripts/UI/Settings/SettingPanel.cs index 3df7fa553..41e412241 100644 --- a/Assets/Scripts/UI/Settings/SettingPanel.cs +++ b/Assets/Scripts/UI/Settings/SettingPanel.cs @@ -17,6 +17,8 @@ namespace NBF private readonly List tabList = new List(); private string _currentTab = ""; + private List _canSelectIndex = new List(); + private int _nowSelectIndex = -1; protected override void OnInit() { @@ -60,7 +62,7 @@ namespace NBF private void ResetSettingList() { // TextTitle.text = Lan.Get(_currentGroup); - + _nowSelectIndex = -1; List.RemoveChildrenToPool(); if (string.IsNullOrEmpty(_currentTab)) return; var options = Settings.Instance.GetOptionsByTab(_currentTab); @@ -76,6 +78,7 @@ namespace NBF list.Add(option); } + _canSelectIndex.Clear(); var url = UIPackage.GetItemURL(UIPackName, "SettingSubTitleItem"); foreach (var key in groupOptions.Keys) { @@ -90,6 +93,8 @@ namespace NBF if (List.AddItemFromPool() is SettingItem item) { item.SetData(option); + var index = List.GetChildIndex(item); + _canSelectIndex.Add(index); } } } @@ -138,18 +143,11 @@ namespace NBF } else if (action == InputDef.UI.Up) { - SetListSelected(List.selectedIndex - 1); + ChangeListSelected(); } else if (action == InputDef.UI.Down) { - if (List.selectedIndex < 0) - { - SetListSelected(0); - } - else - { - SetListSelected(List.selectedIndex + 1); - } + ChangeListSelected(false); } else if (action == InputDef.UI.Back) { @@ -161,6 +159,24 @@ namespace NBF } } + + private void ChangeListSelected(bool up = true) + { + if (!up) + { + _nowSelectIndex++; + } + else + { + _nowSelectIndex--; + } + + if (_nowSelectIndex < 0) _nowSelectIndex = 0; + else if (_nowSelectIndex >= _canSelectIndex.Count) _nowSelectIndex = _canSelectIndex.Count - 1; + var targetIndex = _canSelectIndex[_nowSelectIndex]; + SetListSelected(targetIndex); + } + private void SetListSelected(int selectedIndex) { if (selectedIndex >= 0 && selectedIndex < List.numItems) diff --git a/FGUIProject/assets/Common/Com/SelectPageItem.xml b/FGUIProject/assets/Common/Com/SelectPageItem.xml new file mode 100644 index 000000000..aede7fd61 --- /dev/null +++ b/FGUIProject/assets/Common/Com/SelectPageItem.xml @@ -0,0 +1,10 @@ + + + + + + + + +