diff --git a/Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs b/Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs new file mode 100644 index 0000000..8424f67 --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs @@ -0,0 +1,17 @@ +namespace SepCore.Definition +{ + /// + /// 主菜单按钮标识,用于区分 MenuForm 上各按钮触发的统一点击事件。 + /// + public enum MenuButtonId : byte + { + Undefined = 0, + + StartGame = 1, + File = 2, + Guide = 3, + Setting = 4, + Quit = 5, + About = 6, + } +} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs.meta similarity index 60% rename from Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs.meta rename to Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs.meta index 5c6d94c..9cee87b 100644 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs.meta +++ b/Assets/GameMain/Scripts/Base/Definition/Enum/MenuButtonId.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: b39712010e7085f428e9ef9727bda043 +guid: db87a0c5c5774d2885e249bef29a5a24 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs deleted file mode 100644 index 3f5416c..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuAboutButtonClickEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuAboutButtonClickEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuAboutButtonClickEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs new file mode 100644 index 0000000..17d14ea --- /dev/null +++ b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs @@ -0,0 +1,31 @@ +using GameFramework; +using GameFramework.Event; +using SepCore.Definition; + +namespace SepCore.Event +{ + /// + /// MenuForm 上所有按钮共用的点击事件,按 区分来源。 + /// 每新增按钮请同步扩展 ,并在 MenuController 中处理。 + /// + public class MenuButtonClickEventArgs : GameEventArgs + { + public static readonly int EventId = typeof(MenuButtonClickEventArgs).GetHashCode(); + + public override int Id => EventId; + + public MenuButtonId Button { get; private set; } + + public static MenuButtonClickEventArgs Create(MenuButtonId button) + { + var args = ReferencePool.Acquire(); + args.Button = button; + return args; + } + + public override void Clear() + { + Button = MenuButtonId.Undefined; + } + } +} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs.meta similarity index 60% rename from Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs.meta rename to Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs.meta index 898a9f2..39d9bea 100644 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuAboutButtonClickEventArgs.cs.meta +++ b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuButtonClickEventArgs.cs.meta @@ -1,11 +1,11 @@ fileFormatVersion: 2 -guid: f58e49962f2db9140aaf209ca65dd2f9 +guid: dcf5c02eecc14c87afc97eb949b7c705 MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs deleted file mode 100644 index e750dfb..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuFileButtonClickEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuFileButtonClickEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuFileButtonClickEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs.meta deleted file mode 100644 index cac6ac6..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuFileButtonClickEventArgs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: e093cff04ac83fc47ae21bd659b338ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs deleted file mode 100644 index ce13c46..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuGuideButtonClickEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuGuideButtonClickEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuGuideButtonClickEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuGuideButtonClickEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs deleted file mode 100644 index 64520ed..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuQuitButtonClickEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuQuitButtonClickEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuQuitButtonClickEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs.meta deleted file mode 100644 index 433bb0f..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuQuitButtonClickEventArgs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c008a5618fa012842992de55bef3791c -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs deleted file mode 100644 index 06f1f30..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuSettingButtonClickEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuSettingButtonClickEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuSettingButtonClickEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs.meta deleted file mode 100644 index f1d56f4..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuSettingButtonClickEventArgs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: d5de2367f2bc83642bbbdc02081ae804 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs deleted file mode 100644 index 2ebfbc7..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs +++ /dev/null @@ -1,21 +0,0 @@ -using GameFramework; -using GameFramework.Event; - -namespace SepCore.Event -{ - public class MenuStartGameEventArgs : GameEventArgs - { - public static readonly int EventId = typeof(MenuStartGameEventArgs).GetHashCode(); - - public override int Id => EventId; - - public static MenuStartGameEventArgs Create() - { - return ReferencePool.Acquire(); - } - - public override void Clear() - { - } - } -} diff --git a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs.meta b/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs.meta deleted file mode 100644 index 9b54b72..0000000 --- a/Assets/GameMain/Scripts/Base/Event/MenuForm/MenuStartGameEventArgs.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 217b0022ddd4a4545a8d8e3d8158a967 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuController.cs b/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuController.cs index ce09e17..165daf6 100644 --- a/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuController.cs +++ b/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuController.cs @@ -17,22 +17,12 @@ namespace SepCore.UI protected override void SubscribeCustomEvents() { - GameEntry.Event.Subscribe(MenuStartGameEventArgs.EventId, OnMenuStartGameButtonClick); - GameEntry.Event.Subscribe(MenuFileButtonClickEventArgs.EventId, OnMenuFileButtonClick); - GameEntry.Event.Subscribe(MenuGuideButtonClickEventArgs.EventId, OnMenuGuideButtonClick); - GameEntry.Event.Subscribe(MenuSettingButtonClickEventArgs.EventId, OnMenuSettingButtonClick); - GameEntry.Event.Subscribe(MenuQuitButtonClickEventArgs.EventId, OnMenuQuitButtonClick); - GameEntry.Event.Subscribe(MenuAboutButtonClickEventArgs.EventId, OnMenuAboutButtonClick); + GameEntry.Event.Subscribe(MenuButtonClickEventArgs.EventId, OnMenuButtonClick); } protected override void UnsubscribeCustomEvents() { - GameEntry.Event.Unsubscribe(MenuStartGameEventArgs.EventId, OnMenuStartGameButtonClick); - GameEntry.Event.Unsubscribe(MenuFileButtonClickEventArgs.EventId, OnMenuFileButtonClick); - GameEntry.Event.Unsubscribe(MenuGuideButtonClickEventArgs.EventId, OnMenuGuideButtonClick); - GameEntry.Event.Unsubscribe(MenuSettingButtonClickEventArgs.EventId, OnMenuSettingButtonClick); - GameEntry.Event.Unsubscribe(MenuQuitButtonClickEventArgs.EventId, OnMenuQuitButtonClick); - GameEntry.Event.Unsubscribe(MenuAboutButtonClickEventArgs.EventId, OnMenuAboutButtonClick); + GameEntry.Event.Unsubscribe(MenuButtonClickEventArgs.EventId, OnMenuButtonClick); } private static MenuContext BuildMenuContext() @@ -56,73 +46,46 @@ namespace SepCore.UI Log.Info("MenuForm doesn't need UseCase"); } - private void OnMenuStartGameButtonClick(object sender, GameEventArgs e) + private void OnMenuButtonClick(object sender, GameEventArgs e) { - if (sender is not MenuForm || e is not MenuStartGameEventArgs) + if (sender is not MenuForm || e is not MenuButtonClickEventArgs args) { return; } - GameEntry.UIRouter.OpenUIAsync(UIFormType.SelectRoleForm).Forget(); - } - - private void OnMenuFileButtonClick(object sender, GameEventArgs e) - { - if (sender is not MenuForm || e is not MenuFileButtonClickEventArgs) + switch (args.Button) { - return; + case MenuButtonId.StartGame: + GameEntry.UIRouter.OpenUIAsync(UIFormType.SelectRoleForm).Forget(); + break; + case MenuButtonId.Setting: + GameEntry.UIRouter.OpenUIAsync(UIFormType.SettingForm).Forget(); + break; + case MenuButtonId.Quit: + GameEntry.UIRouter.OpenUIAsync(UIFormType.DialogForm, new DialogRawData + { + Mode = 2, + Title = GameEntry.Localization.GetString("AskQuitGame.Title"), + Message = GameEntry.Localization.GetString("AskQuitGame.Message"), + OnClickConfirm = delegate(object userData) + { + UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit); + } + }).Forget(); + break; + case MenuButtonId.File: + Log.Warning("Menu file button click is not implemented."); + break; + case MenuButtonId.Guide: + Log.Warning("Menu guide button click is not implemented."); + break; + case MenuButtonId.About: + Log.Warning("Menu about button click is not implemented."); + break; + default: + Log.Warning("MenuController received unknown MenuButtonId: {0}", args.Button); + break; } - - Log.Warning("Menu file button click is not implemented."); - } - - private void OnMenuGuideButtonClick(object sender, GameEventArgs e) - { - if (sender is not MenuForm || e is not MenuGuideButtonClickEventArgs) - { - return; - } - - Log.Warning("Menu guide button click is not implemented."); - } - - private void OnMenuSettingButtonClick(object sender, GameEventArgs e) - { - if (sender is not MenuForm || e is not MenuSettingButtonClickEventArgs) - { - return; - } - - GameEntry.UIRouter.OpenUIAsync(UIFormType.SettingForm).Forget(); - } - - private void OnMenuQuitButtonClick(object sender, GameEventArgs e) - { - if (sender is not MenuForm || e is not MenuQuitButtonClickEventArgs) - { - return; - } - - GameEntry.UIRouter.OpenUIAsync(UIFormType.DialogForm, new DialogRawData - { - Mode = 2, - Title = GameEntry.Localization.GetString("AskQuitGame.Title"), - Message = GameEntry.Localization.GetString("AskQuitGame.Message"), - OnClickConfirm = delegate(object userData) - { - UnityGameFramework.Runtime.GameEntry.Shutdown(ShutdownType.Quit); - } - }).Forget(); - } - - private void OnMenuAboutButtonClick(object sender, GameEventArgs e) - { - if (sender is not MenuForm || e is not MenuAboutButtonClickEventArgs) - { - return; - } - - Log.Warning("Menu about button click is not implemented."); } } } diff --git a/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuForm.cs b/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuForm.cs index d73210c..842df2d 100644 --- a/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuForm.cs +++ b/Assets/GameMain/Scripts/Presentation/Menu/Menu/MenuForm.cs @@ -1,3 +1,4 @@ +using SepCore.Definition; using SepCore.Event; using UnityEngine; using UnityEngine.EventSystems; @@ -39,34 +40,41 @@ namespace SepCore.UI #endregion + // 以下方法被 MenuForm.prefab 中的 Button.onClick 通过名称反射绑定。 + // 重命名前需同步修改 prefab 中的 m_MethodName 引用。 public void OnStartButtonClick() { - GameEntry.Event.Fire(this, MenuStartGameEventArgs.Create()); + FireButtonClick(MenuButtonId.StartGame); } public void OnFileButtonClick() { - GameEntry.Event.Fire(this, MenuFileButtonClickEventArgs.Create()); + FireButtonClick(MenuButtonId.File); } public void OnGuideButtonClick() { - GameEntry.Event.Fire(this, MenuGuideButtonClickEventArgs.Create()); + FireButtonClick(MenuButtonId.Guide); } public void OnSettingButtonClick() { - GameEntry.Event.Fire(this, MenuSettingButtonClickEventArgs.Create()); + FireButtonClick(MenuButtonId.Setting); } public void OnQuitButtonClick() { - GameEntry.Event.Fire(this, MenuQuitButtonClickEventArgs.Create()); + FireButtonClick(MenuButtonId.Quit); } public void OnAboutButtonClick() { - GameEntry.Event.Fire(this, MenuAboutButtonClickEventArgs.Create()); + FireButtonClick(MenuButtonId.About); + } + + private void FireButtonClick(MenuButtonId button) + { + GameEntry.Event.Fire(this, MenuButtonClickEventArgs.Create(button)); } } }