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; }
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 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 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; }; }
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; }
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(); }
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(); }
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(); }
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"); }; }
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 }, }); }; }
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; }
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; }
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); }
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"); }; }
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; }
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; }
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(); }
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); }
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(); } }
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); }
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); }
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; }
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(); }
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; }
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); }
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; }
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(); }; }
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(); }
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(); }
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(); }