コード例 #1
0
ファイル: ReplayBrowserLogic.cs プロジェクト: kekekeks/OpenRA
        public ReplayBrowserLogic(Widget widget, Action onExit, Action onStart)
        {
            panel = widget;

            panel.GetWidget<ButtonWidget>("CANCEL_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };

            var rl = panel.GetWidget<ScrollPanelWidget>("REPLAY_LIST");
            var replayDir = Path.Combine(Platform.SupportDir, "Replays");

            var template = panel.GetWidget<ScrollItemWidget>("REPLAY_TEMPLATE");

            rl.RemoveChildren();
            if (Directory.Exists(replayDir))
            {
                var files = Directory.GetFiles(replayDir, "*.rep").Reverse();
                foreach (var replayFile in files)
                    AddReplay(rl, replayFile, template);

                SelectReplay(files.FirstOrDefault());
            }

            var watch = panel.GetWidget<ButtonWidget>("WATCH_BUTTON");
            watch.IsDisabled = () => currentReplay == null || currentMap == null || currentReplay.Duration == 0;
            watch.OnClick = () =>
            {
                if (currentReplay != null)
                {
                    Game.JoinReplay(currentReplay.Filename);
                    Ui.CloseWindow();
                    onStart();
                }
            };

            panel.GetWidget("REPLAY_INFO").IsVisible = () => currentReplay != null;
        }
コード例 #2
0
ファイル: ReplayBrowserDelegate.cs プロジェクト: FMode/OpenRA
        public ReplayBrowserDelegate( [ObjectCreator.Param] Widget widget )
        {
            this.widget = widget;

            widget.GetWidget("CANCEL_BUTTON").OnMouseUp = mi =>
                {
                    Widget.CloseWindow();
                    return true;
                };

            /* find some replays? */
            var rl = widget.GetWidget<ScrollPanelWidget>("REPLAY_LIST");
            var replayDir = Path.Combine(Game.SupportDir, "Replays");

            var template = widget.GetWidget<LabelWidget>("REPLAY_TEMPLATE");
            CurrentReplay = null;

            rl.RemoveChildren();
            foreach (var replayFile in Directory.GetFiles(replayDir, "*.rep").Reverse())
                AddReplay(rl, replayFile, template);

            widget.GetWidget("WATCH_BUTTON").OnMouseUp = mi =>
                {
                    if (currentReplay != null)
                    {
                        Widget.CloseWindow();
                        Game.JoinReplay(CurrentReplay);
                    }
                    return true;
                };

            widget.GetWidget("REPLAY_INFO").IsVisible = () => currentReplay != null;
        }
コード例 #3
0
ファイル: ReplayBrowserLogic.cs プロジェクト: hoxworth/OpenRA
        public ReplayBrowserLogic( [ObjectCreator.Param] Widget widget )
        {
            this.widget = widget;

            widget.GetWidget<ButtonWidget>("CANCEL_BUTTON").OnClick = () => Widget.CloseWindow();

            /* find some replays? */
            var rl = widget.GetWidget<ScrollPanelWidget>("REPLAY_LIST");
            var replayDir = Path.Combine(Platform.SupportDir, "Replays");

            var template = widget.GetWidget<ScrollItemWidget>("REPLAY_TEMPLATE");
            CurrentReplay = null;

            rl.RemoveChildren();
            if (Directory.Exists(replayDir))
                foreach (var replayFile in Directory.GetFiles(replayDir, "*.rep").Reverse())
                    AddReplay(rl, replayFile, template);

            widget.GetWidget<ButtonWidget>("WATCH_BUTTON").OnClick = () =>
            {
                if (currentReplay != null)
                {
                    Widget.CloseWindow();
                    Game.JoinReplay(CurrentReplay);
                }
            };

            widget.GetWidget("REPLAY_INFO").IsVisible = () => currentReplay != null;
        }
コード例 #4
0
        public ProductionTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, ProductionPaletteWidget palette)
        {
            var pm = palette.world.LocalPlayer.PlayerActor.Trait<PowerManager>();
            var pr = palette.world.LocalPlayer.PlayerActor.Trait<PlayerResources>();

            widget.IsVisible = () => palette.TooltipActor != null;
            var nameLabel = widget.GetWidget<LabelWidget>("NAME");
            var requiresLabel = widget.GetWidget<LabelWidget>("REQUIRES");
            var powerLabel = widget.GetWidget<LabelWidget>("POWER");
            var timeLabel = widget.GetWidget<LabelWidget>("TIME");
            var costLabel = widget.GetWidget<LabelWidget>("COST");

            var font = Game.Renderer.Fonts[nameLabel.Font];
            var requiresFont = Game.Renderer.Fonts[requiresLabel.Font];
            string lastActor = null;

            tooltipContainer.BeforeRender = () =>
            {
                var actor = palette.TooltipActor;
                if (actor == null || actor == lastActor)
                    return;

                var info = Rules.Info[actor];
                var tooltip = info.Traits.Get<TooltipInfo>();
                var buildable = info.Traits.Get<BuildableInfo>();
                var cost = info.Traits.Get<ValuedInfo>().Cost;
                var bi = info.Traits.GetOrDefault<BuildingInfo>();

                nameLabel.GetText = () => tooltip.Name;

                var prereqs = buildable.Prerequisites.Select(a => ActorName(a));
                var requiresString = prereqs.Any() ? "Requires {0}".F(prereqs.JoinWith(", ")) : "";
                requiresLabel.GetText = () => requiresString;

                var power = bi != null ? bi.Power : 0;
                var powerString = "P: {0}".F(power);
                powerLabel.GetText = () => powerString;
                powerLabel.GetColor = () => ((pm.PowerProvided - pm.PowerDrained) >= -power || power > 0)
                    ? Color.White : Color.Red;
                powerLabel.IsVisible = () => power != 0;

                var timeString = "T: {0}".F(WidgetUtils.FormatTime(palette.CurrentQueue.GetBuildTime(actor)));
                timeLabel.GetText = () => timeString;

                var costString = "$: {0}".F(cost);
                costLabel.GetText = () => costString;
                costLabel.GetColor = () => pr.DisplayCash + pr.DisplayOre >= cost
                    ? Color.White : Color.Red;

                var leftWidth = Math.Max(font.Measure(tooltip.Name).X, requiresFont.Measure(requiresString).X);
                var rightWidth = new [] {font.Measure(powerString).X, font.Measure(timeString).X, font.Measure(costString).X}.Aggregate(Math.Max);
                timeLabel.Bounds.X = powerLabel.Bounds.X = costLabel.Bounds.X = leftWidth + 2*nameLabel.Bounds.X;
                widget.Bounds.Width = leftWidth + rightWidth + 3*nameLabel.Bounds.X;

                widget.Bounds.Height = power != 0 ? 65 : 45;
                lastActor = actor;
            };
        }
コード例 #5
0
ファイル: WorldTooltipLogic.cs プロジェクト: alzeih/OpenRA
        public WorldTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, CncWorldInteractionControllerWidget wic)
        {
            widget.IsVisible = () => wic.TooltipType != WorldTooltipType.None;
            var label = widget.GetWidget<LabelWidget>("LABEL");
            var flag = widget.GetWidget<ImageWidget>("FLAG");
            var owner = widget.GetWidget<LabelWidget>("OWNER");

            var font = Game.Renderer.Fonts[label.Font];
            var ownerFont = Game.Renderer.Fonts[owner.Font];
            var cachedWidth = 0;
            var labelText = "";
            var showOwner = false;
            var flagRace = "";
            var ownerName = "";
            var ownerColor = Color.White;
            var doubleHeight = 45;
            var singleHeight = 25;

            tooltipContainer.BeforeRender = () =>
            {
                if (wic == null || wic.TooltipType == WorldTooltipType.None)
                    return;

                labelText = wic.TooltipType == WorldTooltipType.Unexplored ? "Unexplored Terrain" :
                    wic.ActorTooltip.Name();
                var textWidth = font.Measure(labelText).X;
                if (textWidth != cachedWidth)
                {
                    label.Bounds.Width = textWidth;
                    widget.Bounds.Width = 2*label.Bounds.X + textWidth;
                }
                var o = wic.ActorTooltip != null ? wic.ActorTooltip.Owner() : null;
                showOwner = wic.TooltipType == WorldTooltipType.Actor && o != null && !o.NonCombatant;

                if (showOwner)
                {
                    flagRace = o.Country.Race;
                    ownerName = o.PlayerName;
                    ownerColor = o.ColorRamp.GetColor(0);
                    widget.Bounds.Height = doubleHeight;
                    widget.Bounds.Width = Math.Max(widget.Bounds.Width,
                        owner.Bounds.X + ownerFont.Measure(ownerName).X + 5);
                }
                else
                    widget.Bounds.Height = singleHeight;
            };

            label.GetText = () => labelText;
            flag.IsVisible = () => showOwner;
            flag.GetImageCollection = () => "flags";
            flag.GetImageName = () => flagRace;
            owner.IsVisible = () => showOwner;
            owner.GetText = () => ownerName;
            owner.GetColor = () => ownerColor;
        }
コード例 #6
0
        public DownloadPackagesLogic(Widget widget, Dictionary<string,string> installData, Action afterInstall)
        {
            this.installData = installData;
            this.afterInstall = afterInstall;

            panel = widget.GetWidget("INSTALL_DOWNLOAD_PANEL");
            progressBar = panel.GetWidget<ProgressBarWidget>("PROGRESS_BAR");
            statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");

            ShowDownloadDialog();
        }
コード例 #7
0
        public CncDownloadPackagesLogic([ObjectCreator.Param] Widget widget,
		                                [ObjectCreator.Param] Dictionary<string,string> installData,
		                                [ObjectCreator.Param] Action continueLoading)
        {
            this.installData = installData;
            this.continueLoading = continueLoading;

            panel = widget.GetWidget("INSTALL_DOWNLOAD_PANEL");
            progressBar = panel.GetWidget<ProgressBarWidget>("PROGRESS_BAR");
            statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");

            ShowDownloadDialog();
        }
コード例 #8
0
        public MainMenuButtonsLogic(Widget widget)
        {
            rootMenu = widget;

            Game.modData.WidgetLoader.LoadWidget( new WidgetArgs(), Ui.Root, "PERF_BG" );
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_JOIN").OnClick = () => OpenGamePanel("JOINSERVER_BG");
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_CREATE").OnClick = () => OpenGamePanel("CREATESERVER_BG");
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_DIRECTCONNECT").OnClick = () => OpenGamePanel("DIRECTCONNECT_BG");
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU");
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU");

            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_MODS").OnClick = () =>
                Ui.OpenWindow("MODS_PANEL", new WidgetArgs()
                {
                    { "onExit", () => {} },
                    { "onSwitch", RemoveShellmapUI }
                });

            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_REPLAY_VIEWER").OnClick = () =>
                Ui.OpenWindow("REPLAYBROWSER_BG", new WidgetArgs()
                {
                    { "onExit", () => {} },
                    { "onStart", RemoveShellmapUI }
                });
            widget.GetWidget<ButtonWidget>("MAINMENU_BUTTON_QUIT").OnClick = () => Game.Exit();
        }
コード例 #9
0
ファイル: IngameChromeLogic.cs プロジェクト: kekekeks/OpenRA
        public IngameChromeLogic(World world)
        {
            Game.AddChatLine += AddChatLine;
            Game.BeforeGameStart += UnregisterEvents;

            var r = Ui.Root;
            gameRoot = r.GetWidget("INGAME_ROOT");
            var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");

            r.GetWidget<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
                optionsBG.Visible = !optionsBG.Visible;

            optionsBG.GetWidget<ButtonWidget>("DISCONNECT").OnClick = () => LeaveGame(optionsBG);

            optionsBG.GetWidget<ButtonWidget>("SETTINGS").OnClick = () => Ui.OpenWindow("SETTINGS_MENU");
            optionsBG.GetWidget<ButtonWidget>("MUSIC").OnClick = () => Ui.OpenWindow("MUSIC_MENU");
            optionsBG.GetWidget<ButtonWidget>("RESUME").OnClick = () => optionsBG.Visible = false;

            optionsBG.GetWidget<ButtonWidget>("SURRENDER").OnClick = () =>
            {
                optionsBG.Visible = false;
                world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
            };

            optionsBG.GetWidget("SURRENDER").IsVisible = () => (world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined);

            var postgameBG = gameRoot.GetWidget("POSTGAME_BG");
            var postgameText = postgameBG.GetWidget<LabelWidget>("TEXT");
            var postGameObserve = postgameBG.GetWidget<ButtonWidget>("POSTGAME_OBSERVE");

            var postgameQuit = postgameBG.GetWidget<ButtonWidget>("POSTGAME_QUIT");
            postgameQuit.OnClick = () => LeaveGame(postgameQuit);

            postGameObserve.OnClick = () => postgameQuit.Visible = false;
            postGameObserve.IsVisible = () => world.LocalPlayer.WinState != WinState.Won;

            postgameBG.IsVisible = () =>
            {
                return postgameQuit.Visible && world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined;
            };

            postgameText.GetText = () =>
            {
                var state = world.LocalPlayer.WinState;
                return state == WinState.Undefined ? "" :
                                (state == WinState.Lost ? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS");
            };
        }
コード例 #10
0
ファイル: CncInstallLogic.cs プロジェクト: alzeih/OpenRA
        public CncInstallLogic(Widget widget, Dictionary<string,string> installData, Action continueLoading)
        {
            var panel = widget.GetWidget("INSTALL_PANEL");
            var args = new WidgetArgs()
            {
                { "afterInstall", () => { Widget.CloseWindow(); continueLoading(); } },
                { "installData", installData }
            };

            panel.GetWidget<ButtonWidget>("DOWNLOAD_BUTTON").OnClick = () =>
                Widget.OpenWindow("INSTALL_DOWNLOAD_PANEL", args);

            panel.GetWidget<ButtonWidget>("INSTALL_BUTTON").OnClick = () =>
                Widget.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs(args)
                {
                    { "filesToCopy", new[] { "CONQUER.MIX", "DESERT.MIX", "SCORES.MIX",
                                             "SOUNDS.MIX", "TEMPERAT.MIX", "WINTER.MIX" } },
                    { "filesToExtract", new[] { "speech.mix", "tempicnh.mix", "transit.mix" } },
                });

            panel.GetWidget<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;

            panel.GetWidget<ButtonWidget>("MODS_BUTTON").OnClick = () =>
            {
                Widget.OpenWindow("MODS_PANEL", new WidgetArgs()
                {
                    { "onExit", () => {} },
                    // Close this panel
                    { "onSwitch", Widget.CloseWindow },
                });
            };
        }
コード例 #11
0
        public IngameObserverChromeLogic([ObjectCreator.Param] World world)
        {
            Game.AddChatLine += AddChatLine;
            Game.BeforeGameStart += UnregisterEvents;

            var r = Widget.RootWidget;
            gameRoot = r.GetWidget("OBSERVER_ROOT");
            var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");

            r.GetWidget<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
                optionsBG.Visible = !optionsBG.Visible;

            optionsBG.GetWidget<ButtonWidget>("DISCONNECT").OnClick = () =>
            {
                optionsBG.Visible = false;
                Game.Disconnect();
                Game.LoadShellMap();
                Widget.CloseWindow();
                Widget.OpenWindow("MAINMENU_BG");
            };

            optionsBG.GetWidget<ButtonWidget>("SETTINGS").OnClick = () => Widget.OpenWindow("SETTINGS_MENU");
            optionsBG.GetWidget<ButtonWidget>("MUSIC").OnClick = () => Widget.OpenWindow("MUSIC_MENU");
            optionsBG.GetWidget<ButtonWidget>("RESUME").OnClick = () => optionsBG.Visible = false;
            optionsBG.GetWidget<ButtonWidget>("SURRENDER").IsVisible = () => false;
        }
コード例 #12
0
ファイル: ButtonTooltipLogic.cs プロジェクト: alzeih/OpenRA
        public ButtonTooltipLogic(Widget widget, ToggleButtonWidget button)
        {
            var label = widget.GetWidget<LabelWidget>("LABEL");
            var hotkey = widget.GetWidget<LabelWidget>("HOTKEY");

            label.GetText = () => button.TooltipText;
            var labelWidth = Game.Renderer.Fonts[label.Font].Measure(button.TooltipText).X;
            label.Bounds.Width = labelWidth;

            var hotkeyLabel = "({0})".F(button.Key.ToUpperInvariant());
            hotkey.GetText = () => hotkeyLabel;
            hotkey.Bounds.X = labelWidth + 2*label.Bounds.X;

            var panelWidth = hotkey.Bounds.X + label.Bounds.X
                + Game.Renderer.Fonts[label.Font].Measure(hotkeyLabel).X;
            widget.Bounds.Width = panelWidth;
        }
コード例 #13
0
ファイル: ConnectionLogic.cs プロジェクト: alzeih/OpenRA
        public ConnectionFailedLogic(Widget widget, string host, int port, Action onRetry, Action onAbort)
        {
            var panel = widget;
            panel.GetWidget<ButtonWidget>("ABORT_BUTTON").OnClick = () => { Widget.CloseWindow(); onAbort(); };
            panel.GetWidget<ButtonWidget>("RETRY_BUTTON").OnClick = () => { Widget.CloseWindow(); onRetry(); };

            widget.GetWidget<LabelWidget>("CONNECTING_DESC").GetText = () =>
                "Could not connect to {0}:{1}".F(host, port);
        }
コード例 #14
0
        public IngameChromeLogic( [ObjectCreator.Param] World world )
        {
            Game.AddChatLine += AddChatLine;
            Game.BeforeGameStart += UnregisterEvents;

            var r = Widget.RootWidget;
            gameRoot = r.GetWidget("INGAME_ROOT");
            var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");

            r.GetWidget<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
                optionsBG.Visible = !optionsBG.Visible;

            optionsBG.GetWidget<ButtonWidget>("DISCONNECT").OnClick = () =>
            {
                optionsBG.Visible = false;
                Game.Disconnect();
                Game.LoadShellMap();
                Widget.CloseWindow();
                Widget.OpenWindow("MAINMENU_BG");
            };

            optionsBG.GetWidget<ButtonWidget>("SETTINGS").OnClick = () => Widget.OpenWindow("SETTINGS_MENU");
            optionsBG.GetWidget<ButtonWidget>("MUSIC").OnClick = () => Widget.OpenWindow("MUSIC_MENU");
            optionsBG.GetWidget<ButtonWidget>("RESUME").OnClick = () => optionsBG.Visible = false;

            optionsBG.GetWidget<ButtonWidget>("SURRENDER").OnClick = () =>
                world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
            optionsBG.GetWidget("SURRENDER").IsVisible = () => (world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined);

            var postgameBG = gameRoot.GetWidget("POSTGAME_BG");
            var postgameText = postgameBG.GetWidget<LabelWidget>("TEXT");
            postgameBG.IsVisible = () =>
            {
                return world.LocalPlayer != null && world.LocalPlayer.WinState != WinState.Undefined;
            };

            postgameText.GetText = () =>
            {
                var state = world.LocalPlayer.WinState;
                return state == WinState.Undefined ? "" :
                                (state == WinState.Lost ? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS");
            };
        }
コード例 #15
0
        public SupportPowerTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, SupportPowersWidget palette)
        {
            widget.IsVisible = () => palette.TooltipPower != null;
            var nameLabel = widget.GetWidget<LabelWidget>("NAME");
            var timeLabel = widget.GetWidget<LabelWidget>("TIME");
            var descLabel = widget.GetWidget<LabelWidget>("DESC");
            var nameFont = Game.Renderer.Fonts[nameLabel.Font];
            var timeFont = Game.Renderer.Fonts[timeLabel.Font];
            var descFont = Game.Renderer.Fonts[descLabel.Font];
            var name = "";
            var time = "";
            var desc = "";
            var baseHeight = widget.Bounds.Height;
            var timeOffset = timeLabel.Bounds.X;

            SupportPowerManager.SupportPowerInstance lastPower = null;
            tooltipContainer.BeforeRender = () =>
            {
                var sp = palette.TooltipPower;
                if (sp == null)
                    return;

                time = "{0} / {1}".F(WidgetUtils.FormatTime(sp.RemainingTime),
                                     WidgetUtils.FormatTime(sp.Info.ChargeTime*25));

                if (sp == lastPower)
                    return;

                name = sp.Info.Description;
                desc = sp.Info.LongDesc.Replace("\\n", "\n");
                var timeWidth = timeFont.Measure(time).X;
                var topWidth = nameFont.Measure(name).X + timeWidth + timeOffset;
                var descSize = descFont.Measure(desc);
                widget.Bounds.Width = 2*nameLabel.Bounds.X + Math.Max(topWidth, descSize.X);
                widget.Bounds.Height = baseHeight + descSize.Y;
                timeLabel.Bounds.X = widget.Bounds.Width - nameLabel.Bounds.X - timeWidth;
                lastPower = sp;
            };

            nameLabel.GetText = () => name;
            timeLabel.GetText = () => time;
            descLabel.GetText = () => desc;
        }
コード例 #16
0
        public ServerCreationLogic(Widget widget, Action onExit, Action openLobby)
        {
            panel = widget;
            onCreate = openLobby;
            this.onExit = onExit;

            var settings = Game.Settings;
            panel.GetWidget<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
            panel.GetWidget<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin;

            map = Game.modData.AvailableMaps[ WidgetUtils.ChooseInitialMap(Game.Settings.Server.Map) ];

            var mapButton = panel.GetWidget<ButtonWidget>("MAP_BUTTON");
            if (mapButton != null)
            {
                panel.GetWidget<ButtonWidget>("MAP_BUTTON").OnClick = () =>
                {
                    Ui.OpenWindow("MAPCHOOSER_PANEL", new WidgetArgs()
                    {
                        { "initialMap", map.Uid },
                        { "onExit", () => {} },
                        { "onSelect", (Action<Map>)(m => map = m) }
                    });
                };

                panel.GetWidget<MapPreviewWidget>("MAP_PREVIEW").Map = () => map;
                panel.GetWidget<LabelWidget>("MAP_NAME").GetText = () => map.Title;
            }

            panel.GetWidget<TextFieldWidget>("SERVER_NAME").Text = settings.Server.Name ?? "";
            panel.GetWidget<TextFieldWidget>("LISTEN_PORT").Text = settings.Server.ListenPort.ToString();
            advertiseOnline = Game.Settings.Server.AdvertiseOnline;

            var externalPort = panel.GetWidget<TextFieldWidget>("EXTERNAL_PORT");
            externalPort.Text = settings.Server.ExternalPort.ToString();
            externalPort.IsDisabled = () => !advertiseOnline;

            var advertiseCheckbox = panel.GetWidget<CheckboxWidget>("ADVERTISE_CHECKBOX");
            advertiseCheckbox.IsChecked = () => advertiseOnline;
            advertiseCheckbox.OnClick = () => advertiseOnline ^= true;
        }
コード例 #17
0
ファイル: MapChooserLogic.cs プロジェクト: kekekeks/OpenRA
        internal MapChooserLogic(Widget widget, string initialMap, Action onExit, Action<Map> onSelect)
        {
            map = Game.modData.AvailableMaps[WidgetUtils.ChooseInitialMap(initialMap)];

            widget.GetWidget<ButtonWidget>("BUTTON_OK").OnClick = () => { Ui.CloseWindow(); onSelect(map); };
            widget.GetWidget<ButtonWidget>("BUTTON_CANCEL").OnClick = () => { Ui.CloseWindow(); onExit(); };

            scrollpanel = widget.GetWidget<ScrollPanelWidget>("MAP_LIST");
            itemTemplate = scrollpanel.GetWidget<ScrollItemWidget>("MAP_TEMPLATE");

            var gameModeDropdown = widget.GetWidget<DropDownButtonWidget>("GAMEMODE_FILTER");
            if (gameModeDropdown != null)
            {
                var selectableMaps = Game.modData.AvailableMaps.Where(m => m.Value.Selectable);
                var gameModes = selectableMaps
                    .GroupBy(m => m.Value.Type)
                    .Select(g => Pair.New(g.Key, g.Count())).ToList();

                // 'all game types' extra item
                gameModes.Insert( 0, Pair.New( null as string, selectableMaps.Count() ) );

                Func<Pair<string,int>, string> showItem =
                    x => "{0} ({1})".F( x.First ?? "All Game Types", x.Second );

                Func<Pair<string,int>, ScrollItemWidget, ScrollItemWidget> setupItem = (ii, template) =>
                {
                    var item = ScrollItemWidget.Setup(template,
                        () => gameMode == ii.First,
                        () => { gameMode = ii.First; EnumerateMaps(); });
                    item.GetWidget<LabelWidget>("LABEL").GetText = () => showItem(ii);
                    return item;
                };

                gameModeDropdown.OnClick = () =>
                    gameModeDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 210, gameModes, setupItem);

                gameModeDropdown.GetText = () => showItem(gameModes.First(m => m.First == gameMode));
            }

            EnumerateMaps();
        }
コード例 #18
0
ファイル: CncPerfDebugLogic.cs プロジェクト: alzeih/OpenRA
 public CncPerfDebugLogic(Widget widget)
 {
     // Performance info
     var perfRoot = widget.GetWidget("PERFORMANCE_INFO");
     perfRoot.GetWidget("PERF_GRAPH").IsVisible = () => Game.Settings.Debug.PerfGraph;
     var text = perfRoot.GetWidget<LabelWidget>("PERF_TEXT");
     text.IsVisible = () => Game.Settings.Debug.PerfText;
     text.GetText = () =>
         "Tick {0} @ {1:F1} ms\nRender {2} @ {3:F1} ms\nBatches: {4}".F(
         Game.LocalTick, PerfHistory.items["tick_time"].Average(Game.Settings.Debug.Samples),
         Game.RenderFrame, PerfHistory.items["render"].Average(Game.Settings.Debug.Samples),
         PerfHistory.items["batches"].LastValue);
 }
コード例 #19
0
        public CncConquestObjectivesLogic(Widget widget, World world)
        {
            var panel = widget.GetWidget("CONQUEST_OBJECTIVES");
            panel.GetWidget<LabelWidget>("TITLE").GetText = () => "Conquest: " + world.Map.Title;

            var objectiveCheckbox = panel.GetWidget<CheckboxWidget>("OBJECTIVE_CHECKBOX");
            objectiveCheckbox.IsDisabled = () => true;

            var statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");
            statusLabel.IsVisible = () => world.LocalPlayer != null;

            if (world.LocalPlayer != null)
            {
                var lp = world.LocalPlayer;
                objectiveCheckbox.IsChecked = () => lp.WinState != WinState.Undefined;
                objectiveCheckbox.GetCheckType = () => lp.WinState == WinState.Won ?
                    "checked" : "crossed";

                statusLabel.GetText = () => lp.WinState == WinState.Won ? "Complete" :
                    lp.WinState == WinState.Lost ? "Failed" : "Incomplete";
                statusLabel.GetColor = () => lp.WinState == WinState.Won ? Color.Green :
                    lp.WinState == WinState.Lost ? Color.Red : Color.White;
            }

            var scrollpanel = panel.GetWidget<ScrollPanelWidget>("PLAYER_LIST");
            var itemTemplate = scrollpanel.GetWidget("PLAYER_TEMPLATE");
            scrollpanel.RemoveChildren();

            foreach (var p in world.Players.Where(a => !a.NonCombatant))
            {
                Player pp = p;
                var c = world.LobbyInfo.ClientWithIndex(pp.ClientIndex);
                var item = itemTemplate.Clone();
                var nameLabel = item.GetWidget<LabelWidget>("NAME");
                nameLabel.GetText = () => pp.WinState == WinState.Lost ? pp.PlayerName + " (Dead)" : pp.PlayerName;
                nameLabel.GetColor = () => pp.ColorRamp.GetColor(0);

                var flag = item.GetWidget<ImageWidget>("FACTIONFLAG");
                flag.GetImageName = () => pp.Country.Race;
                flag.GetImageCollection = () => "flags";
                item.GetWidget<LabelWidget>("FACTION").GetText = () => pp.Country.Name;

                var team = item.GetWidget<LabelWidget>("TEAM");
                team.GetText = () => (c.Team == 0) ? "-" : c.Team.ToString();
                scrollpanel.AddChild(item);

                item.GetWidget<LabelWidget>("KILLS").GetText = () => pp.Kills.ToString();
                item.GetWidget<LabelWidget>("DEATHS").GetText = () => pp.Deaths.ToString();
            }
        }
コード例 #20
0
ファイル: ColorPickerLogic.cs プロジェクト: alzeih/OpenRA
        public ColorPickerLogic(Widget widget, ColorRamp initialRamp, Action<ColorRamp> onChange,
			Action<ColorRamp> onSelect, WorldRenderer worldRenderer)
        {
            var panel = widget.GetWidget("COLOR_CHOOSER");
            ramp = initialRamp;
            var hueSlider = panel.GetWidget<SliderWidget>("HUE_SLIDER");
            var satSlider = panel.GetWidget<SliderWidget>("SAT_SLIDER");
            var lumSlider = panel.GetWidget<SliderWidget>("LUM_SLIDER");

            Action sliderChanged = () =>
            {
                ramp = new ColorRamp((byte)(255*hueSlider.Value),
                                     (byte)(255*satSlider.Value),
                                     (byte)(255*lumSlider.Value),
                                     10);
                onChange(ramp);
            };

            hueSlider.OnChange += _ => sliderChanged();
            satSlider.OnChange += _ => sliderChanged();
            lumSlider.OnChange += _ => sliderChanged();

            Action updateSliders = () =>
            {
                hueSlider.Value = ramp.H / 255f;
                satSlider.Value = ramp.S / 255f;
                lumSlider.Value = ramp.L / 255f;
            };

            panel.GetWidget<ButtonWidget>("SAVE_BUTTON").OnClick = () => onSelect(ramp);

            var randomButton = panel.GetWidget<ButtonWidget>("RANDOM_BUTTON");
            if (randomButton != null)
                randomButton.OnClick = () =>
                {
                    var hue = (byte)Game.CosmeticRandom.Next(255);
                    var sat = (byte)Game.CosmeticRandom.Next(255);
                    var lum = (byte)Game.CosmeticRandom.Next(51,255);

                    ramp = new ColorRamp(hue, sat, lum, 10);
                    updateSliders();
                    sliderChanged();
                };

            // Set the initial state
            updateSliders();
            onChange(ramp);
        }
コード例 #21
0
ファイル: ConnectionLogic.cs プロジェクト: alzeih/OpenRA
        public ConnectionLogic(Widget widget, string host, int port, Action onConnect, Action onRetry, Action onAbort)
        {
            this.host = host;
            this.port = port;
            this.onConnect = onConnect;
            this.onRetry = onRetry;
            this.onAbort = onAbort;

            Game.ConnectionStateChanged += ConnectionStateChanged;

            var panel = widget;
            panel.GetWidget<ButtonWidget>("ABORT_BUTTON").OnClick = () => { CloseWindow(); onAbort(); };

            widget.GetWidget<LabelWidget>("CONNECTING_DESC").GetText = () =>
                "Connecting to {0}:{1}...".F(host, port);
        }
コード例 #22
0
ファイル: RAInstallLogic.cs プロジェクト: kekekeks/OpenRA
        public RAInstallLogic(Widget widget, Dictionary<string,string> installData, Action continueLoading)
        {
            var panel = widget.GetWidget("INSTALL_PANEL");
            var args = new WidgetArgs()
            {
                { "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
                { "installData", installData }
            };

            panel.GetWidget<ButtonWidget>("DOWNLOAD_BUTTON").OnClick = () =>
                Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", args);

            panel.GetWidget<ButtonWidget>("INSTALL_BUTTON").OnClick = () =>
                Ui.OpenWindow("INSTALL_FROMCD_PANEL", args);

            panel.GetWidget<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;
        }
コード例 #23
0
        public RAInstallFromCDLogic(Widget widget, Action continueLoading)
        {
            this.continueLoading = continueLoading;
            panel = widget.GetWidget("INSTALL_FROMCD_PANEL");
            progressBar = panel.GetWidget<ProgressBarWidget>("PROGRESS_BAR");
            statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");

            backButton = panel.GetWidget<ButtonWidget>("BACK_BUTTON");
            backButton.OnClick = Ui.CloseWindow;

            retryButton = panel.GetWidget<ButtonWidget>("RETRY_BUTTON");
            retryButton.OnClick = CheckForDisk;

            installingContainer = panel.GetWidget("INSTALLING");
            insertDiskContainer = panel.GetWidget("INSERT_DISK");
            CheckForDisk();
        }
コード例 #24
0
ファイル: GameInitDelegate.cs プロジェクト: katzsmile/OpenRA
        bool CopyFiles(Widget window, string srcPath, string[] files, string destPath)
        {
            var status = window.GetWidget<LabelWidget>("STATUS");

            foreach (var file in files)
            {
                var fromPath = Path.Combine(srcPath, file);
                if (!File.Exists(fromPath))
                {
                    ShowError(window, "Cannot find "+file);
                    return false;
                }
                status.GetText = () => "Extracting "+file.ToLowerInvariant();
                File.Copy(fromPath,	Path.Combine(destPath, Path.GetFileName(file).ToLowerInvariant()), true);
            }
            return true;
        }
コード例 #25
0
        public CncIngameChromeLogic([ObjectCreator.Param] Widget widget,
		                            [ObjectCreator.Param] World world )
        {
            this.world = world;
            world.WorldActor.Trait<CncMenuPaletteEffect>()
                .Fade(CncMenuPaletteEffect.EffectType.None);

            Game.AddChatLine += AddChatLine;
            Game.BeforeGameStart += UnregisterEvents;

            ingameRoot = widget.GetWidget("INGAME_ROOT");
            var playerRoot = ingameRoot.GetWidget("PLAYER_ROOT");

            // Observer
            if (world.LocalPlayer == null)
                InitObserverWidgets(world, playerRoot);
            else
                InitPlayerWidgets(world, playerRoot);
        }
コード例 #26
0
ファイル: SimpleTooltipLogic.cs プロジェクト: alzeih/OpenRA
        public SimpleTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, Func<string> getText)
        {
            var label = widget.GetWidget<LabelWidget>("LABEL");

            var font = Game.Renderer.Fonts[label.Font];
            var cachedWidth = 0;
            var labelText = "";
            tooltipContainer.BeforeRender = () =>
            {
                labelText = getText();
                var textWidth = font.Measure(labelText).X;
                if (textWidth != cachedWidth)
                {
                    label.Bounds.Width = textWidth;
                    widget.Bounds.Width = 2*label.Bounds.X + textWidth;
                }
            };

            label.GetText = () => labelText;
        }
コード例 #27
0
ファイル: CncCheatsLogic.cs プロジェクト: alzeih/OpenRA
        public CncCheatsLogic(Widget widget, Action onExit, World world)
        {
            var panel = widget.GetWidget("CHEATS_PANEL");

            var devTrait = world.LocalPlayer.PlayerActor.Trait<DeveloperMode>();
            var shroudCheckbox = panel.GetWidget<CheckboxWidget>("SHROUD_CHECKBOX");
            shroudCheckbox.IsChecked = () => devTrait.DisableShroud;
            shroudCheckbox.OnClick = () => Order(world, "DevShroud");

            var pathCheckbox = panel.GetWidget<CheckboxWidget>("PATHDEBUG_CHECKBOX");
            pathCheckbox.IsChecked = () => devTrait.PathDebug;
            pathCheckbox.OnClick = () => Order(world, "DevPathDebug");

            panel.GetWidget<ButtonWidget>("GIVE_CASH_BUTTON").OnClick = () =>
                world.IssueOrder(new Order("DevGiveCash", world.LocalPlayer.PlayerActor, false));

            var fastBuildCheckbox = panel.GetWidget<CheckboxWidget>("INSTANT_BUILD_CHECKBOX");
            fastBuildCheckbox.IsChecked = () => devTrait.FastBuild;
            fastBuildCheckbox.OnClick = () => Order(world, "DevFastBuild");

            var fastChargeCheckbox = panel.GetWidget<CheckboxWidget>("INSTANT_CHARGE_CHECKBOX");
            fastChargeCheckbox.IsChecked = () => devTrait.FastCharge;
            fastChargeCheckbox.OnClick = () => Order(world, "DevFastCharge");

            var allTechCheckbox = panel.GetWidget<CheckboxWidget>("ENABLE_TECH_CHECKBOX");
            allTechCheckbox.IsChecked = () => devTrait.AllTech;
            allTechCheckbox.OnClick = () => Order(world, "DevEnableTech");

            var powerCheckbox = panel.GetWidget<CheckboxWidget>("UNLIMITED_POWER_CHECKBOX");
            powerCheckbox.IsChecked = () => devTrait.UnlimitedPower;
            powerCheckbox.OnClick = () => Order(world, "DevUnlimitedPower");

            var buildAnywhereCheckbox = panel.GetWidget<CheckboxWidget>("BUILD_ANYWHERE_CHECKBOX");
            buildAnywhereCheckbox.IsChecked = () => devTrait.BuildAnywhere;
            buildAnywhereCheckbox.OnClick = () => Order(world, "DevBuildAnywhere");

            panel.GetWidget<ButtonWidget>("GIVE_EXPLORATION_BUTTON").OnClick = () =>
                world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false));

            panel.GetWidget<ButtonWidget>("CLOSE_BUTTON").OnClick = () => { Widget.CloseWindow(); onExit(); };
        }
コード例 #28
0
        internal MapChooserDelegate(
			[ObjectCreator.Param( "widget" )] Widget bg,
			[ObjectCreator.Param] OrderManager orderManager,
			[ObjectCreator.Param] string mapName )
        {
            if (mapName != null)
                Map = Game.modData.AvailableMaps[mapName];
            else
                Map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;

            bg.GetWidget<MapPreviewWidget>("MAPCHOOSER_MAP_PREVIEW").Map = () => Map;
            bg.GetWidget<LabelWidget>("CURMAP_TITLE").GetText = () => Map.Title;
            bg.GetWidget<LabelWidget>("CURMAP_AUTHOR").GetText = () => Map.Author;
            bg.GetWidget<LabelWidget>("CURMAP_DESC").GetText = () => Map.Description;
            bg.GetWidget<LabelWidget>("CURMAP_DESC_LABEL").IsVisible = () => Map.Description != null;
            bg.GetWidget<LabelWidget>("CURMAP_SIZE").GetText = () => "{0}x{1}".F(Map.Bounds.Width, Map.Bounds.Height);
            bg.GetWidget<LabelWidget>("CURMAP_THEATER").GetText = () => Rules.TileSets[Map.Tileset].Name;
            bg.GetWidget<LabelWidget>("CURMAP_PLAYERS").GetText = () => Map.PlayerCount.ToString();

            bg.GetWidget<ButtonWidget>("BUTTON_OK").OnMouseUp = mi =>
            {
                orderManager.IssueOrder(Order.Command("map " + Map.Uid));
                Widget.CloseWindow();
                return true;
            };

            bg.GetWidget<ButtonWidget>("BUTTON_CANCEL").OnMouseUp = mi =>
            {
                Widget.CloseWindow();
                return true;
            };

            bg.GetWidget("BUTTON_INSTALL").IsVisible = () => false;
            //bg.GetWidget<ButtonWidget>("BUTTON_INSTALL").OnMouseUp = mi => InstallMap();
            scrollpanel = bg.GetWidget<ScrollPanelWidget>("MAP_LIST");
            itemTemplate = scrollpanel.GetWidget<ContainerWidget>("MAP_TEMPLATE");
            EnumerateMaps();
        }
コード例 #29
0
        public CncInstallMusicLogic([ObjectCreator.Param] Widget widget,
		                       [ObjectCreator.Param] Action afterInstall)
        {
            this.afterInstall = afterInstall;
            panel = widget.GetWidget("INSTALL_MUSIC_PANEL");
            progressBar = panel.GetWidget<ProgressBarWidget>("PROGRESS_BAR");
            statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");

            backButton = panel.GetWidget<ButtonWidget>("BACK_BUTTON");
            backButton.OnClick = Widget.CloseWindow;

            retryButton = panel.GetWidget<ButtonWidget>("RETRY_BUTTON");
            retryButton.OnClick = CheckForDisk;

            installingContainer = panel.GetWidget("INSTALLING");
            insertDiskContainer = panel.GetWidget("INSERT_DISK");
            CheckForDisk();
        }
コード例 #30
0
        public CncInstallFromCDLogic(Widget widget, Action afterInstall, string[] filesToCopy, string[] filesToExtract)
        {
            this.afterInstall = afterInstall;
            this.filesToCopy = filesToCopy;
            this.filesToExtract = filesToExtract;

            panel = widget;
            progressBar = panel.GetWidget<ProgressBarWidget>("PROGRESS_BAR");
            statusLabel = panel.GetWidget<LabelWidget>("STATUS_LABEL");

            backButton = panel.GetWidget<ButtonWidget>("BACK_BUTTON");
            backButton.OnClick = Ui.CloseWindow;

            retryButton = panel.GetWidget<ButtonWidget>("RETRY_BUTTON");
            retryButton.OnClick = CheckForDisk;

            installingContainer = panel.GetWidget("INSTALLING");
            insertDiskContainer = panel.GetWidget("INSERT_DISK");

            CheckForDisk();
        }