Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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;
            }
        }