public CncIngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer) { var resumeDisabled = false; menu = widget.Get("INGAME_MENU"); var mpe = world.WorldActor.Trait<MenuPaletteEffect>(); mpe.Fade(MenuPaletteEffect.EffectType.Desaturated); menu.Get<LabelWidget>("VERSION_LABEL").Text = Game.modData.Manifest.Mod.Version; var hideButtons = false; menu.Get("MENU_BUTTONS").IsVisible = () => !hideButtons; // TODO: Create a mechanism to do things like this cleaner. Also needed for scripted missions Action onQuit = () => { Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", null); resumeDisabled = true; Game.RunAfterDelay(1200, () => mpe.Fade(MenuPaletteEffect.EffectType.Black)); Game.RunAfterDelay(1200 + 40 * mpe.Info.FadeLength, () => { Game.Disconnect(); Ui.ResetAll(); Game.LoadShellMap(); }); }; Action doNothing = () => { }; menu.Get<ButtonWidget>("QUIT_BUTTON").OnClick = () => ConfirmationDialogs.PromptConfirmAction("Abort Mission", "Leave this game and return to the menu?", onQuit, doNothing); Action onSurrender = () => world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false)); var surrenderButton = menu.Get<ButtonWidget>("SURRENDER_BUTTON"); surrenderButton.IsDisabled = () => (world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined); surrenderButton.OnClick = () => ConfirmationDialogs.PromptConfirmAction("Surrender", "Are you sure you want to surrender?", onSurrender, doNothing); menu.Get<ButtonWidget>("MUSIC_BUTTON").OnClick = () => { hideButtons = true; Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs() { { "onExit", () => hideButtons = false }, }); }; menu.Get<ButtonWidget>("SETTINGS_BUTTON").OnClick = () => { hideButtons = true; Ui.OpenWindow("SETTINGS_PANEL", new WidgetArgs() { { "world", world }, { "worldRenderer", worldRenderer }, { "onExit", () => hideButtons = false }, }); }; var resumeButton = menu.Get<ButtonWidget>("RESUME_BUTTON"); resumeButton.IsDisabled = () => resumeDisabled; resumeButton.OnClick = () => { Ui.CloseWindow(); Ui.Root.RemoveChild(menu); world.WorldActor.Trait<MenuPaletteEffect>().Fade(MenuPaletteEffect.EffectType.None); onExit(); }; // Menu panels - ordered from lowest to highest priority var panelParent = Game.OpenWindow(world, "INGAME_MENU_PANEL"); var panelType = PanelType.Objectives; var visibleButtons = 0; // Debug / Cheats panel var debugButton = panelParent.Get<ButtonWidget>("DEBUG_BUTTON"); debugButton.OnClick = () => panelType = PanelType.Debug; debugButton.IsHighlighted = () => panelType == PanelType.Debug; if (world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats) { panelType = PanelType.Debug; visibleButtons++; var debugPanel = Game.LoadWidget(world, "CHEATS_PANEL", panelParent, new WidgetArgs() { { "onExit", doNothing } }); debugPanel.IsVisible = () => panelType == PanelType.Debug; debugButton.IsVisible = () => visibleButtons > 1; } // Mission objectives var iop = world.WorldActor.TraitsImplementing<IObjectivesPanel>().FirstOrDefault(); var objectivesButton = panelParent.Get<ButtonWidget>("OBJECTIVES_BUTTON"); objectivesButton.OnClick = () => panelType = PanelType.Objectives; objectivesButton.IsHighlighted = () => panelType == PanelType.Objectives; if (iop != null && iop.ObjectivesPanel != null) { panelType = PanelType.Objectives; visibleButtons++; var objectivesPanel = Game.LoadWidget(world, iop.ObjectivesPanel, panelParent, new WidgetArgs()); objectivesPanel.IsVisible = () => panelType == PanelType.Objectives; objectivesButton.IsVisible = () => visibleButtons > 1; } }
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer, IngameInfoPanel activePanel) { var resumeDisabled = false; menu = widget.Get("INGAME_MENU"); var mpe = world.WorldActor.TraitOrDefault <MenuPaletteEffect>(); if (mpe != null) { mpe.Fade(mpe.Info.MenuEffect); } menu.Get <LabelWidget>("VERSION_LABEL").Text = Game.ModData.Manifest.Mod.Version; var hideMenu = false; menu.Get("MENU_BUTTONS").IsVisible = () => !hideMenu; // TODO: Create a mechanism to do things like this cleaner. Also needed for scripted missions Action onQuit = () => { if (world.Type == WorldType.Regular) { Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Country.Race); } resumeDisabled = true; var exitDelay = 1200; if (mpe != null) { Game.RunAfterDelay(exitDelay, () => mpe.Fade(MenuPaletteEffect.EffectType.Black)); exitDelay += 40 * mpe.Info.FadeLength; } Game.RunAfterDelay(exitDelay, () => { Game.Disconnect(); Ui.ResetAll(); Game.LoadShellMap(); }); }; Action closeMenu = () => { Ui.CloseWindow(); if (mpe != null) { mpe.Fade(MenuPaletteEffect.EffectType.None); } onExit(); }; Action showMenu = () => hideMenu = false; var abortMissionButton = menu.Get <ButtonWidget>("ABORT_MISSION"); abortMissionButton.IsVisible = () => world.Type == WorldType.Regular; abortMissionButton.OnClick = () => { hideMenu = true; ConfirmationDialogs.PromptConfirmAction("Abort Mission", "Leave this game and return to the menu?", onQuit, showMenu); }; var exitEditorButton = menu.Get <ButtonWidget>("EXIT_EDITOR"); exitEditorButton.IsVisible = () => world.Type == WorldType.Editor; exitEditorButton.OnClick = () => { hideMenu = true; ConfirmationDialogs.PromptConfirmAction("Exit Map Editor", "Exit and lose all unsaved changes?", onQuit, showMenu); }; Action onSurrender = () => { world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false)); closeMenu(); }; var surrenderButton = menu.Get <ButtonWidget>("SURRENDER"); surrenderButton.IsVisible = () => world.Type == WorldType.Regular; surrenderButton.IsDisabled = () => (world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined); surrenderButton.OnClick = () => { hideMenu = true; ConfirmationDialogs.PromptConfirmAction("Surrender", "Are you sure you want to surrender?", onSurrender, showMenu); }; surrenderButton.IsDisabled = () => world.LocalPlayer == null || world.LocalPlayer.WinState != WinState.Undefined; var saveMapButton = menu.Get <ButtonWidget>("SAVE_MAP"); saveMapButton.IsVisible = () => world.Type == WorldType.Editor; saveMapButton.OnClick = () => { hideMenu = true; Ui.OpenWindow("SAVE_MAP_PANEL", new WidgetArgs() { { "onExit", () => hideMenu = false }, { "map", world.Map }, { "editorActorLayer", world.WorldActor.Trait <EditorActorLayer>() } }); }; menu.Get <ButtonWidget>("MUSIC").OnClick = () => { hideMenu = true; Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs() { { "onExit", () => hideMenu = false }, { "world", world } }); }; var settingsButton = widget.Get <ButtonWidget>("SETTINGS"); settingsButton.OnClick = () => { hideMenu = true; Ui.OpenWindow("SETTINGS_PANEL", new WidgetArgs() { { "world", world }, { "worldRenderer", worldRenderer }, { "onExit", () => hideMenu = false }, }); }; var resumeButton = menu.Get <ButtonWidget>("RESUME"); resumeButton.IsDisabled = () => resumeDisabled; resumeButton.OnClick = closeMenu; var panelRoot = widget.GetOrNull("PANEL_ROOT"); if (panelRoot != null && world.Type != WorldType.Editor) { var gameInfoPanel = Game.LoadWidget(world, "GAME_INFO_PANEL", panelRoot, new WidgetArgs() { { "activePanel", activePanel } }); gameInfoPanel.IsVisible = () => !hideMenu; } }
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer) { var resumeDisabled = false; var mpe = world.WorldActor.TraitOrDefault <MenuPaletteEffect>(); Action onQuit = () => { Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Country.Race); resumeDisabled = true; var exitDelay = 1200; if (mpe != null) { Game.RunAfterDelay(exitDelay, () => mpe.Fade(MenuPaletteEffect.EffectType.Black)); exitDelay += 40 * mpe.Info.FadeLength; } Game.RunAfterDelay(exitDelay, () => { Game.Disconnect(); Ui.ResetAll(); Game.LoadShellMap(); }); }; Action onSurrender = () => { world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false)); onExit(); }; widget.Get <ButtonWidget>("DISCONNECT").OnClick = () => { widget.Visible = false; ConfirmationDialogs.PromptConfirmAction("Abort Mission", "Leave this game and return to the menu?", onQuit, () => widget.Visible = true); }; widget.Get <ButtonWidget>("SETTINGS").OnClick = () => { widget.Visible = false; Ui.OpenWindow("SETTINGS_PANEL", new WidgetArgs() { { "onExit", () => widget.Visible = true }, { "worldRenderer", worldRenderer }, }); }; widget.Get <ButtonWidget>("MUSIC").OnClick = () => { widget.Visible = false; Ui.OpenWindow("MUSIC_PANEL", new WidgetArgs { { "onExit", () => { widget.Visible = true; } } }); }; var resumeButton = widget.Get <ButtonWidget>("RESUME"); resumeButton.OnClick = () => onExit(); resumeButton.IsDisabled = () => resumeDisabled; widget.Get <ButtonWidget>("SURRENDER").OnClick = () => { widget.Visible = false; ConfirmationDialogs.PromptConfirmAction( "Surrender", "Are you sure you want to surrender?", onSurrender, () => widget.Visible = true, "Surrender"); }; widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined; }