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; }
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); } }
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; }
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); }; }
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; }
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; } }
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); }
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; }
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); }); }; }
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()); }; }
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; }
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); }
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; }
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(); }; }
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; }
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 }, }); }; }
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(); }
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; }
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; } }
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 }, }); }; } }
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; }
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()); }
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(); }
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; }
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 }, }); }; }
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); }; } }
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; } }
public virtual void AddChild(Widget child) { child.Parent = this; Children.Add(child); }
public static Widget LoadWidget(string id, Widget parent, WidgetArgs args) { return(Game.ModData.WidgetLoader.LoadWidget(args, parent, id)); }