public CncIngameMenuLogic(Widget widget, World world, Action onExit) { var resumeDisabled = false; menu = widget.Get("INGAME_MENU"); var mpe = world.WorldActor.Trait <CncMenuPaletteEffect>(); mpe.Fade(CncMenuPaletteEffect.EffectType.Desaturated); menu.Get <LabelWidget>("VERSION_LABEL").GetText = WidgetUtils.ActiveModVersion; bool 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.Play("batlcon1.aud"); resumeDisabled = true; Game.RunAfterDelay(1200, () => mpe.Fade(CncMenuPaletteEffect.EffectType.Black)); Game.RunAfterDelay(1200 + 40 * mpe.Info.FadeLength, () => { Game.Disconnect(); Ui.ResetAll(); Game.LoadShellMap(); }); }; Action doNothing = () => {}; menu.Get <ButtonWidget>("QUIT_BUTTON").OnClick = () => CncWidgetUtils.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 = () => CncWidgetUtils.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 }, { "onExit", () => hideButtons = false }, }); }; var resumeButton = menu.Get <ButtonWidget>("RESUME_BUTTON"); resumeButton.IsDisabled = () => resumeDisabled; resumeButton.OnClick = () => { Ui.CloseWindow(); Ui.Root.RemoveChild(menu); world.WorldActor.Trait <CncMenuPaletteEffect>().Fade(CncMenuPaletteEffect.EffectType.None); onExit(); }; // Mission objectives panel var iop = world.WorldActor.TraitsImplementing <IObjectivesPanel>().FirstOrDefault(); if (iop != null && iop.ObjectivesPanel != null) { Game.OpenWindow(world, iop.ObjectivesPanel); } }
public CncIngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer) { var resumeDisabled = false; menu = widget.Get("INGAME_MENU"); var mpe = world.WorldActor.Trait <CncMenuPaletteEffect>(); mpe.Fade(CncMenuPaletteEffect.EffectType.Desaturated); menu.Get <LabelWidget>("VERSION_LABEL").GetText = WidgetUtils.ActiveModVersion; bool 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(null, "Speech", "Leave", null); resumeDisabled = true; Game.RunAfterDelay(1200, () => mpe.Fade(CncMenuPaletteEffect.EffectType.Black)); Game.RunAfterDelay(1200 + 40 * mpe.Info.FadeLength, () => { Game.Disconnect(); Ui.ResetAll(); Game.LoadShellMap(); }); }; Action doNothing = () => {}; menu.Get <ButtonWidget>("QUIT_BUTTON").OnClick = () => CncWidgetUtils.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 = () => CncWidgetUtils.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 <CncMenuPaletteEffect>().Fade(CncMenuPaletteEffect.EffectType.None); onExit(); }; // Menu panels - ordered from lowest to highest priority var panelParent = Game.OpenWindow(world, "INGAME_MENU_PANEL"); PanelType Panel = PanelType.Objectives; var visibleButtons = 0; // Debug / Cheats panel var debugButton = panelParent.Get <ButtonWidget>("DEBUG_BUTTON"); debugButton.OnClick = () => Panel = PanelType.Debug; debugButton.IsHighlighted = () => Panel == PanelType.Debug; if (world.LocalPlayer != null && world.LobbyInfo.GlobalSettings.AllowCheats) { Panel = PanelType.Debug; visibleButtons++; var debugPanel = Game.LoadWidget(world, "CHEATS_PANEL", panelParent, new WidgetArgs() { { "onExit", doNothing } }); debugPanel.IsVisible = () => Panel == PanelType.Debug; debugButton.IsVisible = () => visibleButtons > 1; } // Mission objectives var iop = world.WorldActor.TraitsImplementing <IObjectivesPanel>().FirstOrDefault(); var objectivesButton = panelParent.Get <ButtonWidget>("OBJECTIVES_BUTTON"); objectivesButton.OnClick = () => Panel = PanelType.Objectives; objectivesButton.IsHighlighted = () => Panel == PanelType.Objectives; if (iop != null && iop.ObjectivesPanel != null) { Panel = PanelType.Objectives; visibleButtons++; var objectivesPanel = Game.LoadWidget(world, iop.ObjectivesPanel, panelParent, new WidgetArgs()); objectivesPanel.IsVisible = () => Panel == PanelType.Objectives; objectivesButton.IsVisible = () => visibleButtons > 1; } }