Ejemplo n.º 1
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;
        }
Ejemplo n.º 2
0
        void IntializeLayerPreview(Widget widget)
        {
            layerTemplateList.RemoveChildren();
            var rules = worldRenderer.World.Map.Rules;
            var resources = rules.Actors["world"].TraitInfos<ResourceTypeInfo>();
            var tileSize = worldRenderer.World.Map.Grid.TileSize;
            foreach (var resource in resources)
            {
                var newResourcePreviewTemplate = ScrollItemWidget.Setup(layerPreviewTemplate,
                    () => { var brush = editor.CurrentBrush as EditorResourceBrush; return brush != null && brush.ResourceType == resource; },
                    () => editor.SetBrush(new EditorResourceBrush(editor, resource, worldRenderer)));

                newResourcePreviewTemplate.Bounds.X = 0;
                newResourcePreviewTemplate.Bounds.Y = 0;

                var layerPreview = newResourcePreviewTemplate.Get<SpriteWidget>("LAYER_PREVIEW");
                layerPreview.IsVisible = () => true;
                layerPreview.GetPalette = () => resource.Palette;

                var variant = resource.Variants.FirstOrDefault();
                var sequence = rules.Sequences.GetSequence("resources", variant);
                var frame = sequence.Frames != null ? sequence.Frames.Last() : resource.MaxDensity - 1;
                layerPreview.GetSprite = () => sequence.GetSprite(frame);

                layerPreview.Bounds.Width = tileSize.Width;
                layerPreview.Bounds.Height = tileSize.Height;
                newResourcePreviewTemplate.Bounds.Width = tileSize.Width + (layerPreview.Bounds.X * 2);
                newResourcePreviewTemplate.Bounds.Height = tileSize.Height + (layerPreview.Bounds.Y * 2);

                newResourcePreviewTemplate.IsVisible = () => true;
                newResourcePreviewTemplate.GetTooltipText = () => resource.Name;

                layerTemplateList.AddChild(newResourcePreviewTemplate);
            }
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
        public InstallLogic(Widget widget, Dictionary<string, string> installData, Action continueLoading)
        {
            var panel = widget.Get("INSTALL_PANEL");
            var args = new WidgetArgs()
            {
                { "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
                { "installData", installData },
                { "continueLoading", continueLoading }
            };

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

            if (installData.ContainsKey("FilesToCopy") && !string.IsNullOrEmpty(installData["FilesToCopy"]) &&
                installData.ContainsKey("FilesToExtract") && !string.IsNullOrEmpty(installData["FilesToExtract"]))
            {
                args = new WidgetArgs(args)
                {
                    { "filesToCopy", installData["FilesToCopy"].Split(',') },
                    { "filesToExtract", installData["FilesToExtract"].Split(',') },
                };
            }
            panel.Get<ButtonWidget>("INSTALL_BUTTON").OnClick = () =>
                Ui.OpenWindow("INSTALL_FROMCD_PANEL", args);

            panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
            {
                Game.Settings.Game.PreviousMod = Game.modData.Manifest.Mod.Id;
                Game.InitializeWithMod("modchooser", null);
            };
        }
Ejemplo n.º 5
0
		public SpawnSelectorTooltipLogic(Widget widget, TooltipContainerWidget tooltipContainer, MapPreviewWidget preview)
		{
			widget.IsVisible = () => preview.TooltipSpawnIndex != -1;
			var label = widget.Get<LabelWidget>("LABEL");
			var flag = widget.Get<ImageWidget>("FLAG");
			var team = widget.Get<LabelWidget>("TEAM");
			var singleHeight = widget.Get("SINGLE_HEIGHT").Bounds.Height;
			var doubleHeight = widget.Get("DOUBLE_HEIGHT").Bounds.Height;
			var ownerFont = Game.Renderer.Fonts[label.Font];
			var teamFont = Game.Renderer.Fonts[team.Font];

			// Width specified in YAML is used as the margin between flag / label and label / border
			var labelMargin = widget.Bounds.Width;

			var cachedWidth = 0;
			var labelText = "";
			string playerFaction = null;
			var playerTeam = -1;

			tooltipContainer.BeforeRender = () =>
			{
				var occupant = preview.SpawnOccupants().Values.FirstOrDefault(c => c.SpawnPoint == preview.TooltipSpawnIndex);

				var teamWidth = 0;
				if (occupant == null)
				{
					labelText = "Available spawn";
					playerFaction = null;
					playerTeam = 0;
					widget.Bounds.Height = singleHeight;
				}
				else
				{
					labelText = occupant.PlayerName;
					playerFaction = occupant.Faction;
					playerTeam = occupant.Team;
					widget.Bounds.Height = playerTeam > 0 ? doubleHeight : singleHeight;
					teamWidth = teamFont.Measure(team.GetText()).X;
				}

				label.Bounds.X = playerFaction != null ? flag.Bounds.Right + labelMargin : labelMargin;

				var textWidth = ownerFont.Measure(labelText).X;
				if (textWidth != cachedWidth)
				{
					label.Bounds.Width = textWidth;
					widget.Bounds.Width = 2 * label.Bounds.X + textWidth;
				}

				widget.Bounds.Width = Math.Max(teamWidth + 2 * labelMargin, label.Bounds.Right + labelMargin);
				team.Bounds.Width = widget.Bounds.Width;
			};

			label.GetText = () => labelText;
			flag.IsVisible = () => playerFaction != null;
			flag.GetImageCollection = () => "flags";
			flag.GetImageName = () => playerFaction;
			team.GetText = () => "Team {0}".F(playerTeam);
			team.IsVisible = () => playerTeam > 0;
		}
Ejemplo n.º 6
0
		public ReplayControlBarLogic(Widget widget, World world)
		{
			if (world.IsReplay)
			{
				var container = widget.Get("REPLAY_PLAYER");

				var background = widget.Parent.GetOrNull("OBSERVER_CONTROL_BG");
				if (background != null)
					background.Bounds.Height += container.Bounds.Height;

				container.Visible = true;

				var pauseButton = widget.Get<ButtonWidget>("BUTTON_PAUSE");
				pauseButton.IsHighlighted = () => world.Timestep == 0;
				pauseButton.OnClick = () => world.Timestep = 0;

				var slowButton = widget.Get<ButtonWidget>("BUTTON_SLOW");
				slowButton.IsHighlighted = () => world.Timestep > Game.Timestep;
				slowButton.OnClick = () => world.Timestep = Game.Timestep * 2;

				var normalSpeedButton = widget.Get<ButtonWidget>("BUTTON_NORMALSPEED");
				normalSpeedButton.IsHighlighted = () => world.Timestep == Game.Timestep;
				normalSpeedButton.OnClick = () => world.Timestep = Game.Timestep;

				var fastforwardButton = widget.Get<ButtonWidget>("BUTTON_FASTFORWARD");
				fastforwardButton.IsHighlighted = () => world.Timestep == 1;
				fastforwardButton.OnClick = () => world.Timestep = 1;
			}
		}
Ejemplo n.º 7
0
        public ColorPickerLogic(Widget widget, HSLColor initialColor, Action<HSLColor> onChange, WorldRenderer worldRenderer)
        {
            var ticker = widget.GetOrNull<LogicTickerWidget>("ANIMATE_PREVIEW");
            if (ticker != null)
            {
                var preview = widget.Get<SpriteSequenceWidget>("PREVIEW");
                var anim = preview.GetAnimation();
                anim.PlayRepeating(anim.CurrentSequence.Name);
                ticker.OnTick = anim.Tick;
            }

            var hueSlider = widget.Get<SliderWidget>("HUE");
            var mixer = widget.Get<ColorMixerWidget>("MIXER");
            var randomButton = widget.GetOrNull<ButtonWidget>("RANDOM_BUTTON");

            hueSlider.OnChange += _ => mixer.Set(hueSlider.Value);
            mixer.OnChange += () => onChange(mixer.Color);

            if (randomButton != null)
                randomButton.OnClick = () =>
                {
                    // Avoid colors with low sat or lum
                    var hue = (byte)Game.CosmeticRandom.Next(255);
                    var sat = (byte)Game.CosmeticRandom.Next(70, 255);
                    var lum = (byte)Game.CosmeticRandom.Next(70, 255);

                    mixer.Set(new HSLColor(hue, sat, lum));
                    hueSlider.Value = hue / 255f;
                };

            // Set the initial state
            mixer.Set(initialColor);
            hueSlider.Value = initialColor.H / 255f;
            onChange(mixer.Color);
        }
Ejemplo n.º 8
0
        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;
        }
Ejemplo n.º 9
0
        public InstallLogic(Widget widget, Action continueLoading)
        {
            var installData = Game.ModData.Manifest.Get<ContentInstaller>();
            var panel = widget.Get("INSTALL_PANEL");
            var widgetArgs = new WidgetArgs()
            {
                { "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
                { "continueLoading", continueLoading },
                { "mirrorListUrl", installData.PackageMirrorList },
            };

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

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

            panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
            {
                Game.RunAfterTick(() =>
                {
                    Game.Settings.Game.PreviousMod = Game.ModData.Manifest.Mod.Id;
                    Game.InitializeMod("modchooser", null);
                });
            };
        }
Ejemplo n.º 10
0
 public PreReleaseWarningPrompt(Widget widget, World world, ModData modData)
 {
     if (!promptAccepted && modData.Manifest.Metadata.Version != "{DEV_VERSION}")
         widget.Get<ButtonWidget>("CONTINUE_BUTTON").OnClick = () => ShowMainMenu(world);
     else
         ShowMainMenu(world);
 }
        public LoadIngamePlayerOrObserverUILogic(Widget widget, World world)
        {
            var ingameRoot = widget.Get("INGAME_ROOT");
            var worldRoot = ingameRoot.Get("WORLD_ROOT");
            var menuRoot = ingameRoot.Get("MENU_ROOT");
            var playerRoot = worldRoot.Get("PLAYER_ROOT");

            if (world.LocalPlayer == null)
                Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
            else
            {
                var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
                var sidebarTicker = playerWidgets.Get<LogicTickerWidget>("SIDEBAR_TICKER");

                sidebarTicker.OnTick = () =>
                {
                    // Switch to observer mode after win/loss
                    if (world.ObserveAfterWinOrLose && world.LocalPlayer.WinState != WinState.Undefined)
                        Game.RunAfterTick(() =>
                        {
                            playerRoot.RemoveChildren();
                            Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
                        });
                };
            }

            Game.LoadWidget(world, "CHAT_PANEL", worldRoot, new WidgetArgs());

            world.GameOver += () =>
            {
                worldRoot.RemoveChildren();
                menuRoot.RemoveChildren();
                Game.LoadWidget(world, "LEAVE_MAP_WIDGET", menuRoot, new WidgetArgs());
            };
        }
Ejemplo n.º 12
0
        public ModContentDiscTooltipLogic(Widget widget, Func<string> getText)
        {
            var discs = widget.Get<ContainerWidget>("DISCS");
            var template = discs.Get<LabelWidget>("DISC_TEMPLATE");
            discs.RemoveChildren();

            var desc = widget.Get<LabelWidget>("DESCRIPTION");

            var font = Game.Renderer.Fonts[template.Font];
            var discTitles = getText().Split('\n');

            var maxWidth = Game.Renderer.Fonts[desc.Font].Measure(desc.Text).X;
            var sideMargin = desc.Bounds.X;
            var bottomMargin = discs.Bounds.Height;
            foreach (var disc in discTitles)
            {
                var label = (LabelWidget)template.Clone();
                var title = disc;
                label.GetText = () => title;
                label.Bounds.Y = discs.Bounds.Height;
                label.Bounds.Width = font.Measure(disc).X;

                maxWidth = Math.Max(maxWidth, label.Bounds.Width + label.Bounds.X);
                discs.AddChild(label);
                discs.Bounds.Height += label.Bounds.Height;
            }

            widget.Bounds.Width = 2 * sideMargin + maxWidth;
            widget.Bounds.Height = discs.Bounds.Y + bottomMargin + discs.Bounds.Height;
        }
Ejemplo n.º 13
0
        public ColorPickerLogic(Widget widget, HSLColor initialColor, Action<HSLColor> onChange, WorldRenderer worldRenderer)
        {
            var hueSlider = widget.Get<SliderWidget>("HUE");
            var mixer = widget.Get<ColorMixerWidget>("MIXER");
            var randomButton = widget.GetOrNull<ButtonWidget>("RANDOM_BUTTON");

            hueSlider.OnChange += _ => mixer.Set(hueSlider.Value);
            mixer.OnChange += () =>	onChange(mixer.Color);

            if (randomButton != null)
                randomButton.OnClick = () =>
                {
                    // Avoid colors with low sat or lum
                    var hue = (byte)Game.CosmeticRandom.Next(255);
                    var sat = (byte)Game.CosmeticRandom.Next(70, 255);
                    var lum = (byte)Game.CosmeticRandom.Next(70, 255);

                    mixer.Set(new HSLColor(hue, sat, lum));
                    hueSlider.Value = hue / 255f;
                };

            // Set the initial state
            mixer.Set(initialColor);
            hueSlider.Value = initialColor.H / 255f;
            onChange(mixer.Color);
        }
Ejemplo n.º 14
0
        public Widget LoadWidget(WidgetArgs args, Widget parent, MiniYamlNode node)
        {
            if (!args.ContainsKey("modData"))
                args = new WidgetArgs(args) { { "modData", modData } };

            var widget = NewWidget(node.Key, args);

            if (parent != null)
                parent.AddChild(widget);

            if (node.Key.Contains("@"))
                FieldLoader.LoadField(widget, "Id", node.Key.Split('@')[1]);

            foreach (var child in node.Value.Nodes)
                if (child.Key != "Children")
                    FieldLoader.LoadField(widget, child.Key, child.Value.Value);

            widget.Initialize(args);

            foreach (var child in node.Value.Nodes)
                if (child.Key == "Children")
                    foreach (var c in child.Value.Nodes)
                        LoadWidget(args, widget, c);

            var logicNode = node.Value.Nodes.FirstOrDefault(n => n.Key == "Logic");
            var logic = logicNode == null ? null : logicNode.Value.ToDictionary();
            args.Add("logicArgs", logic);

            widget.PostInit(args);

            args.Remove("logicArgs");

            return widget;
        }
Ejemplo n.º 15
0
        public SettingsLogic(Widget widget, Action onExit, WorldRenderer worldRenderer)
        {
            this.worldRenderer = worldRenderer;

            panelContainer = widget.Get("SETTINGS_PANEL");
            tabContainer = widget.Get("TAB_CONTAINER");

            RegisterSettingsPanel(PanelType.Display, InitDisplayPanel, ResetDisplayPanel, "DISPLAY_PANEL", "DISPLAY_TAB");
            RegisterSettingsPanel(PanelType.Audio, InitAudioPanel, ResetAudioPanel, "AUDIO_PANEL", "AUDIO_TAB");
            RegisterSettingsPanel(PanelType.Input, InitInputPanel, ResetInputPanel, "INPUT_PANEL", "INPUT_TAB");
            RegisterSettingsPanel(PanelType.Advanced, InitAdvancedPanel, ResetAdvancedPanel, "ADVANCED_PANEL", "ADVANCED_TAB");

            panelContainer.Get<ButtonWidget>("BACK_BUTTON").OnClick = () =>
            {
                leavePanelActions[settingsPanel]();
                Game.Settings.Save();
                Ui.CloseWindow();
                onExit();
            };

            panelContainer.Get<ButtonWidget>("RESET_BUTTON").OnClick = () =>
            {
                resetPanelActions[settingsPanel]();
                Game.Settings.Save();
            };
        }
Ejemplo n.º 16
0
        public GameInfoObjectivesLogic(Widget widget, World world)
        {
            var lp = world.LocalPlayer;

            var missionStatus = widget.Get<LabelWidget>("MISSION_STATUS");
            missionStatus.GetText = () => lp.WinState == WinState.Undefined ? "In progress" :
                lp.WinState == WinState.Won ? "Accomplished" : "Failed";
            missionStatus.GetColor = () => lp.WinState == WinState.Undefined ? Color.White :
                lp.WinState == WinState.Won ? Color.LimeGreen : Color.Red;

            var mo = lp.PlayerActor.TraitOrDefault<MissionObjectives>();
            if (mo == null)
                return;

            var objectivesPanel = widget.Get<ScrollPanelWidget>("OBJECTIVES_PANEL");
            template = objectivesPanel.Get<ContainerWidget>("OBJECTIVE_TEMPLATE");

            PopulateObjectivesList(mo, objectivesPanel, template);

            Action<Player> redrawObjectives = player =>
            {
                if (player == lp)
                    PopulateObjectivesList(mo, objectivesPanel, template);
            };
            mo.ObjectiveAdded += redrawObjectives;
        }
        public ReplayBrowserLogic(Widget widget, Action onExit, Action onStart)
        {
            panel = widget;

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

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

            var template = panel.Get<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.Get<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.Get("REPLAY_INFO").IsVisible = () => currentReplay != null;
        }
Ejemplo n.º 18
0
        public RAInstallLogic(Widget widget, Dictionary<string,string> installData, Action continueLoading)
        {
            var panel = widget.Get("INSTALL_PANEL");
            var args = new WidgetArgs()
            {
                { "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
                { "installData", installData },
                { "continueLoading", continueLoading }
            };

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

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

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

            panel.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>
            {
                Ui.OpenWindow("MODS_PANEL", new WidgetArgs()
                              {
                    { "onExit", () => {} },
                    // Close this panel
                    { "onSwitch", Ui.CloseWindow },
                });
            };
        }
Ejemplo n.º 19
0
        public ServerBrowserLogic(Widget widget, Action onStart, Action onExit)
        {
            panel = widget;
            this.onStart = onStart;

            serverList = panel.Get<ScrollPanelWidget>("SERVER_LIST");
            serverTemplate = serverList.Get<ScrollItemWidget>("SERVER_TEMPLATE");

            // Menu buttons
            var refreshButton = panel.Get<ButtonWidget>("REFRESH_BUTTON");
            refreshButton.IsDisabled = () => searchStatus == SearchStatus.Fetching;
            refreshButton.GetText = () => searchStatus == SearchStatus.Fetching ? "Refreshing..." : "Refresh";
            refreshButton.OnClick = RefreshServerList;

            panel.Get<ButtonWidget>("DIRECTCONNECT_BUTTON").OnClick = OpenDirectConnectPanel;
            panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = OpenCreateServerPanel;

            var join = panel.Get<ButtonWidget>("JOIN_BUTTON");
            join.IsDisabled = () => currentServer == null || !currentServer.CanJoin();
            join.OnClick = () => Join(currentServer);

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

            // Display the progress label over the server list
            // The text is only visible when the list is empty
            var progressText = panel.Get<LabelWidget>("PROGRESS_LABEL");
            progressText.IsVisible = () => searchStatus != SearchStatus.Hidden;
            progressText.GetText = ProgressLabelText;

            var showWaitingCheckbox = panel.GetOrNull<CheckboxWidget>("WAITING_FOR_PLAYERS");
            if (showWaitingCheckbox != null)
            {
                showWaitingCheckbox.IsChecked = () => showWaiting;
                showWaitingCheckbox.OnClick = () => { showWaiting ^= true; RefreshServerList(); };
            }

            var showEmptyCheckbox = panel.GetOrNull<CheckboxWidget>("EMPTY");
            if (showEmptyCheckbox != null)
            {
                showEmptyCheckbox.IsChecked = () => showEmpty;
                showEmptyCheckbox.OnClick = () => { showEmpty ^= true; RefreshServerList(); };
            }

            var showAlreadyStartedCheckbox = panel.GetOrNull<CheckboxWidget>("ALREADY_STARTED");
            if (showAlreadyStartedCheckbox != null)
            {
                showAlreadyStartedCheckbox.IsChecked = () => showStarted;
                showAlreadyStartedCheckbox.OnClick = () => { showStarted ^= true; RefreshServerList(); };
            }

            var showIncompatibleCheckbox = panel.GetOrNull<CheckboxWidget>("INCOMPATIBLE_VERSION");
            if (showIncompatibleCheckbox != null)
            {
                showIncompatibleCheckbox.IsChecked = () => showIncompatible;
                showIncompatibleCheckbox.OnClick = () => { showIncompatible ^= true; RefreshServerList(); };
            }

            // Game.LoadWidget(null, "SERVERBROWSER_IRC", panel.Get("IRC_ROOT"), new WidgetArgs());
            RefreshServerList();
        }
Ejemplo n.º 20
0
        public IngameMenuLogic(Widget widget, World world, Action onExit)
        {
            widget.Get<ButtonWidget>("DISCONNECT").OnClick = () =>
            {
                onExit();
                LeaveGame(world);
            };
            widget.Get<ButtonWidget>("SETTINGS").OnClick = () =>
            {
                widget.Visible = false;
                Ui.OpenWindow("SETTINGS_MENU", new WidgetArgs { { "onExit", () => { widget.Visible = true; } } });
            };
            widget.Get<ButtonWidget>("MUSIC").OnClick = () =>
            {
                widget.Visible = false;
                Ui.OpenWindow("MUSIC_MENU", new WidgetArgs { { "onExit", () => { widget.Visible = true; } } });
            };
            widget.Get<ButtonWidget>("RESUME").OnClick = () => onExit();

            widget.Get<ButtonWidget>("SURRENDER").OnClick = () =>
            {
                world.IssueOrder(new Order("Surrender", world.LocalPlayer.PlayerActor, false));
                onExit();
            };
            widget.Get("SURRENDER").IsVisible = () => world.LocalPlayer != null && world.LocalPlayer.WinState == WinState.Undefined;
        }
Ejemplo n.º 21
0
        public IngameRadarDisplayLogic(Widget widget, World world)
        {
            var radarEnabled = false;
            var cachedRadarEnabled = false;
            var blockColor = Color.Transparent;
            var radar = widget.Get<RadarWidget>("RADAR_MINIMAP");
            radar.IsEnabled = () => radarEnabled;
            var devMode = world.LocalPlayer.PlayerActor.Trait<DeveloperMode>();

            var ticker = widget.Get<LogicTickerWidget>("RADAR_TICKER");
            ticker.OnTick = () =>
            {
                radarEnabled = devMode.DisableShroud || world.ActorsHavingTrait<ProvidesRadar>(r => r.IsActive)
                    .Any(a => a.Owner == world.LocalPlayer);

                if (radarEnabled != cachedRadarEnabled)
                    Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
                cachedRadarEnabled = radarEnabled;
            };

            var block = widget.GetOrNull<ColorBlockWidget>("RADAR_FADETOBLACK");
            if (block != null)
            {
                radar.Animating = x => blockColor = Color.FromArgb((int)(255 * x), Color.Black);
                block.IsVisible = () => blockColor.A != 0;
                block.GetColor = () => blockColor;
            }
        }
Ejemplo n.º 22
0
        public InstallMusicLogic(Widget widget)
        {
            var installMusicContainer = widget.Get("INSTALL_MUSIC_PANEL");

            var cancelButton = installMusicContainer.GetOrNull<ButtonWidget>("CANCEL_BUTTON");
            if (cancelButton != null)
                cancelButton.OnClick = () => Game.InitializeMod(Game.Settings.Game.Mod, null);

            var copyFromDiscButton = installMusicContainer.GetOrNull<ButtonWidget>("COPY_FROM_CD_BUTTON");
            if (copyFromDiscButton != null)
            {
                copyFromDiscButton.OnClick = () =>
                {
                    Ui.OpenWindow("INSTALL_FROMCD_PANEL", new WidgetArgs() {
                        { "continueLoading", () => Game.InitializeMod(Game.Settings.Game.Mod, null) },
                    });
                };
            }

            var downloadButton = installMusicContainer.GetOrNull<ButtonWidget>("DOWNLOAD_BUTTON");
            if (downloadButton != null)
            {
                var installData = Game.ModData.Manifest.Get<ContentInstaller>();
                downloadButton.IsVisible = () => !string.IsNullOrEmpty(installData.MusicPackageMirrorList);
                downloadButton.OnClick = () =>
                {
                    Ui.OpenWindow("INSTALL_DOWNLOAD_PANEL", new WidgetArgs() {
                        { "afterInstall", () => Game.InitializeMod(Game.Settings.Game.Mod, null) },
                        { "mirrorListUrl", installData.MusicPackageMirrorList },
                    });
                };
            }
        }
Ejemplo n.º 23
0
        public MapEditorTabsLogic(Widget widget, WorldRenderer worldRenderer)
        {
            var tabContainer = widget.Get("MAP_EDITOR_TAB_CONTAINER");

            var tilesTab = tabContainer.Get<ButtonWidget>("TILES_TAB");
            tilesTab.IsHighlighted = () => menuType == MenuType.Tiles;
            tilesTab.OnClick = () => { menuType = MenuType.Tiles; };

            var overlaysTab = tabContainer.Get<ButtonWidget>("OVERLAYS_TAB");
            overlaysTab.IsHighlighted = () => menuType == MenuType.Layers;
            overlaysTab.OnClick = () => { menuType = MenuType.Layers; };

            var actorsTab = tabContainer.Get<ButtonWidget>("ACTORS_TAB");
            actorsTab.IsHighlighted = () => menuType == MenuType.Actors;
            actorsTab.OnClick = () => { menuType = MenuType.Actors; };

            var tileContainer = widget.Parent.Get<ContainerWidget>("TILE_WIDGETS");
            tileContainer.IsVisible = () => menuType == MenuType.Tiles;

            var layerContainer = widget.Parent.Get<ContainerWidget>("LAYER_WIDGETS");
            layerContainer.IsVisible = () => menuType == MenuType.Layers;

            var actorContainer = widget.Parent.Get<ContainerWidget>("ACTOR_WIDGETS");
            actorContainer.IsVisible = () => menuType == MenuType.Actors;
        }
Ejemplo n.º 24
0
		public TileSelectorLogic(Widget widget, WorldRenderer worldRenderer, Ruleset modRules)
		{
			var tileset = modRules.TileSets[worldRenderer.World.Map.Tileset];

			editor = widget.Parent.Get<EditorViewportControllerWidget>("MAP_EDITOR");
			panel = widget.Get<ScrollPanelWidget>("TILETEMPLATE_LIST");
			itemTemplate = panel.Get<ScrollItemWidget>("TILEPREVIEW_TEMPLATE");
			panel.Layout = new GridLayout(panel);

			var tileCategorySelector = widget.Get<DropDownButtonWidget>("TILE_CATEGORY");
			var categories = tileset.EditorTemplateOrder;
			Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
			{
				var item = ScrollItemWidget.Setup(template,
					() => tileCategorySelector.Text == option,
					() => { tileCategorySelector.Text = option; IntializeTilePreview(widget, worldRenderer, tileset, option); });

				item.Get<LabelWidget>("LABEL").GetText = () => option;
				return item;
			};

			tileCategorySelector.OnClick = () =>
				tileCategorySelector.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 270, categories, setupItem);

			tileCategorySelector.Text = categories.First();
			IntializeTilePreview(widget, worldRenderer, tileset, categories.First());
		}
Ejemplo n.º 25
0
        public CncInstallMusicLogic(Widget widget, Ruleset modRules, Action onExit)
        {
            var installButton = widget.GetOrNull<ButtonWidget>("INSTALL_BUTTON");
            if (installButton != null)
            {
                Action afterInstall = () =>
                {
                    try
                    {
                        var path = new string[] { Platform.SupportDir, "Content", Game.modData.Manifest.Mod.Id }.Aggregate(Path.Combine);
                        GlobalFileSystem.Mount(Path.Combine(path, "scores.mix"));
                        GlobalFileSystem.Mount(Path.Combine(path, "transit.mix"));

                        modRules.Music.Do(m => m.Value.Reload());

                        var musicPlayerLogic = (MusicPlayerLogic)installButton.Parent.LogicObject;
                        musicPlayerLogic.BuildMusicTable();
                    }
                    catch (Exception e)
                    {
                        Log.Write("debug", "Mounting the new mixfile and rebuild of scores list failed:\n{0}", e);
                    }
                };

                installButton.OnClick = () =>
                    Ui.OpenWindow("INSTALL_MUSIC_PANEL", new WidgetArgs() {
                        { "afterInstall", afterInstall },
                        { "filesToCopy", new[] { "SCORES.MIX" } },
                        { "filesToExtract", new[] { "transit.mix" } },
                    });
                installButton.IsVisible = () => modRules.InstalledMusic.ToArray().Length < 3; // HACK around music being split between transit.mix and scores.mix
            }
        }
        public MainMenuButtonsLogic(Widget widget)
        {
            rootMenu = widget;

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

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

            widget.Get<ButtonWidget>("MAINMENU_BUTTON_REPLAY_VIEWER").OnClick = () =>
                Ui.OpenWindow("REPLAYBROWSER_BG", new WidgetArgs()
                {
                    { "onExit", () => {} },
                    { "onStart", RemoveShellmapUI }
                });
            widget.Get<ButtonWidget>("MAINMENU_BUTTON_QUIT").OnClick = () => Game.Exit();
        }
Ejemplo n.º 27
0
		public Widget LoadWidget(WidgetArgs args, Widget parent, MiniYamlNode node)
		{
			var widget = NewWidget(node.Key, args);

			if (parent != null)
				parent.AddChild( widget );

			if (node.Key.Contains("@"))
				FieldLoader.LoadField(widget, "Id", node.Key.Split('@')[1]);

			foreach (var child in node.Value.Nodes)
				if (child.Key != "Children")
					FieldLoader.LoadField(widget, child.Key, child.Value.Value);

			if (!args.ContainsKey("modRules"))
				args = new WidgetArgs(args) { { "modRules", modData.DefaultRules } };
			widget.Initialize(args);

			foreach (var child in node.Value.Nodes)
				if (child.Key == "Children")
					foreach (var c in child.Value.Nodes)
						LoadWidget( args, widget, c);

			widget.PostInit(args);
			return widget;
		}
Ejemplo n.º 28
0
        public CncInstallLogic(Widget widget, Dictionary<string, string> installData, Action continueLoading)
        {
            var panel = widget.Get("INSTALL_PANEL");
            var args = new WidgetArgs()
            {
                { "afterInstall", () => { Ui.CloseWindow(); continueLoading(); } },
                { "installData", installData }
            };

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

            panel.Get<ButtonWidget>("INSTALL_BUTTON").OnClick = () =>
                Ui.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.Get<ButtonWidget>("QUIT_BUTTON").OnClick = Game.Exit;

            panel.Get<ButtonWidget>("MODS_BUTTON").OnClick = () =>
            {
                Ui.OpenWindow("MODS_PANEL", new WidgetArgs()
                {
                    { "onExit", () => { } },
                    { "onSwitch", Ui.CloseWindow },
                });
            };
        }
Ejemplo n.º 29
0
		public GameTimerLogic(Widget widget, OrderManager orderManager, World world)
		{
			var timer = widget.GetOrNull<LabelWidget>("GAME_TIMER");
			if (timer != null)
				timer.GetText = () => WidgetUtils.FormatTime(world.WorldTick);

			var status = widget.GetOrNull<LabelWidget>("GAME_TIMER_STATUS");
			if (status != null)
			{
				var startTick = Ui.LastTickTime;
				// Blink the status line
				status.IsVisible = () => (world.Paused || world.Timestep != Game.Timestep)
					&& (Ui.LastTickTime - startTick) / 1000 % 2 == 0;

				status.GetText = () =>
				{
					if (world.Paused || world.Timestep == 0)
						return "Paused";

					if (world.Timestep == 1)
						return "Max Speed";

					return "{0:F1}x Speed".F(Game.Timestep * 1f / world.Timestep);
				};
			}
		}
Ejemplo n.º 30
0
        public FactionTooltipLogic(Widget widget, ButtonWidget button)
        {
            var lines = button.GetTooltipText().Replace("\\n", "\n").Split('\n');

            var header = widget.Get<LabelWidget>("HEADER");
            var headerLine = lines[0];
            var headerFont = Game.Renderer.Fonts[header.Font];
            var headerSize = headerFont.Measure(headerLine);
            header.Bounds.Width += headerSize.X;
            header.Bounds.Height += headerSize.Y;
            header.GetText = () => headerLine;

            if (lines.Length > 1)
            {
                var description = widget.Get<LabelWidget>("DESCRIPTION");
                var descriptionLines = lines.Skip(1).ToArray();
                var descriptionFont = Game.Renderer.Fonts[description.Font];
                description.Bounds.Y += header.Bounds.Y + header.Bounds.Height;
                description.Bounds.Width += descriptionLines.Select(l => descriptionFont.Measure(l).X).Max();
                description.Bounds.Height += descriptionFont.Measure(descriptionLines.First()).Y * descriptionLines.Length;
                description.GetText = () => string.Join("\n", descriptionLines);

                widget.Bounds.Width = Math.Max(header.Bounds.X + header.Bounds.Width, description.Bounds.X + description.Bounds.Width);
                widget.Bounds.Height = description.Bounds.Y + description.Bounds.Height;
            }
            else
            {
                widget.Bounds.Width = header.Bounds.X + header.Bounds.Width;
                widget.Bounds.Height = header.Bounds.Y + header.Bounds.Height;
            }
        }
Ejemplo n.º 31
0
 public virtual void AddChild(Widget child)
 {
     child.Parent = this;
     Children.Add(child);
 }
Ejemplo n.º 32
0
 public static Widget LoadWidget(string id, Widget parent, WidgetArgs args)
 {
     return(Game.ModData.WidgetLoader.LoadWidget(args, parent, id));
 }