From f4987f72580473be221e0e3c285ac19650c32271 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 22 Feb 2015 15:22:55 +0000 Subject: [PATCH 1/3] Add support for multiple logic objects on a widget. --- OpenRA.Game/Widgets/Widget.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/OpenRA.Game/Widgets/Widget.cs b/OpenRA.Game/Widgets/Widget.cs index 8723bae336..39bd0e3415 100644 --- a/OpenRA.Game/Widgets/Widget.cs +++ b/OpenRA.Game/Widgets/Widget.cs @@ -143,8 +143,8 @@ namespace OpenRA.Widgets public string Y = "0"; public string Width = "0"; public string Height = "0"; - public string Logic = null; - public object LogicObject { get; private set; } + public string[] Logic = { }; + public object[] LogicObjects { get; private set; } public bool Visible = true; public bool IgnoreMouseOver; public bool IgnoreChildMouseOver; @@ -232,12 +232,13 @@ namespace OpenRA.Widgets public void PostInit(WidgetArgs args) { - if (Logic == null) + if (!Logic.Any()) return; args["widget"] = this; - LogicObject = Game.ModData.ObjectCreator.CreateObject(Logic, args); + LogicObjects = Logic.Select(l => Game.ModData.ObjectCreator.CreateObject(l, args)) + .ToArray(); args.Remove("widget"); } From da70683c03ff77e38e3c5b17132d0e045cf7418b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 26 Apr 2015 19:17:05 +1200 Subject: [PATCH 2/3] Split OrderButtonsChromeLogic into smaller classes. --- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + .../Logic/Ingame/MenuButtonsChromeLogic.cs | 125 +++++++++++++++ .../Logic/Ingame/OrderButtonsChromeLogic.cs | 148 +++++------------- mods/cnc/chrome/ingame.yaml | 7 +- mods/d2k/chrome/ingame-observer.yaml | 5 +- mods/d2k/chrome/ingame-player.yaml | 6 +- mods/ra/chrome/ingame-observer.yaml | 2 +- mods/ra/chrome/ingame-player.yaml | 10 +- mods/ts/chrome/ingame-player.yaml | 10 +- 9 files changed, 184 insertions(+), 130 deletions(-) create mode 100644 OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 5887e79d16..b9bd9b17e9 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -624,6 +624,7 @@ + diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs new file mode 100644 index 0000000000..f6972aceae --- /dev/null +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs @@ -0,0 +1,125 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using System; +using System.Linq; +using OpenRA.Mods.Common.Orders; +using OpenRA.Mods.Common.Traits; +using OpenRA.Mods.Common.Widgets; +using OpenRA.Widgets; + +namespace OpenRA.Mods.Common.Widgets.Logic +{ + public class MenuButtonsChromeLogic + { + readonly World world; + readonly Widget worldRoot; + readonly Widget menuRoot; + bool disableSystemButtons; + Widget currentWidget; + + [ObjectCreator.UseCtor] + public MenuButtonsChromeLogic(Widget widget, World world) + { + this.world = world; + + worldRoot = Ui.Root.Get("WORLD_ROOT"); + menuRoot = Ui.Root.Get("MENU_ROOT"); + + Action removeCurrentWidget = () => menuRoot.RemoveChild(currentWidget); + world.GameOver += removeCurrentWidget; + + // System buttons + var options = widget.GetOrNull("OPTIONS_BUTTON"); + if (options != null) + { + var blinking = false; + var lp = world.LocalPlayer; + options.IsDisabled = () => disableSystemButtons; + options.OnClick = () => + { + blinking = false; + OpenMenuPanel(options, new WidgetArgs() + { + { "activePanel", IngameInfoPanel.AutoSelect } + }); + }; + options.IsHighlighted = () => blinking && Game.LocalTick % 50 < 25; + + if (lp != null) + { + Action startBlinking = player => + { + if (player == world.LocalPlayer) + blinking = true; + }; + + var mo = lp.PlayerActor.TraitOrDefault(); + + if (mo != null) + mo.ObjectiveAdded += startBlinking; + } + } + + var diplomacy = widget.GetOrNull("DIPLOMACY_BUTTON"); + if (diplomacy != null) + { + diplomacy.Visible = !world.Map.Visibility.HasFlag(MapVisibility.MissionSelector) && world.Players.Any(a => a != world.LocalPlayer && !a.NonCombatant); + diplomacy.IsDisabled = () => disableSystemButtons; + diplomacy.OnClick = () => OpenMenuPanel(diplomacy); + } + + var debug = widget.GetOrNull("DEBUG_BUTTON"); + if (debug != null) + { + debug.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats; + debug.IsDisabled = () => disableSystemButtons; + debug.OnClick = () => OpenMenuPanel(debug, new WidgetArgs() + { + { "activePanel", IngameInfoPanel.Debug } + }); + } + + var stats = widget.GetOrNull("OBSERVER_STATS_BUTTON"); + if (stats != null) + { + stats.IsDisabled = () => disableSystemButtons; + stats.OnClick = () => OpenMenuPanel(stats); + } + } + + void OpenMenuPanel(MenuButtonWidget button, WidgetArgs widgetArgs = null) + { + disableSystemButtons = true; + var cachedPause = world.PredictedPaused; + + if (button.HideIngameUI) + worldRoot.IsVisible = () => false; + + if (button.Pause && world.LobbyInfo.IsSinglePlayer) + world.SetPauseState(true); + + widgetArgs = widgetArgs ?? new WidgetArgs(); + widgetArgs.Add("onExit", () => + { + if (button.HideIngameUI) + worldRoot.IsVisible = () => true; + + if (button.Pause && world.LobbyInfo.IsSinglePlayer) + world.SetPauseState(cachedPause); + + menuRoot.RemoveChild(currentWidget); + disableSystemButtons = false; + }); + + currentWidget = Game.LoadWidget(world, button.MenuContainer, menuRoot, widgetArgs); + } + } +} diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/OrderButtonsChromeLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/OrderButtonsChromeLogic.cs index e0ac35b121..0c1ee36baf 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/OrderButtonsChromeLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/OrderButtonsChromeLogic.cs @@ -17,141 +17,65 @@ using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets.Logic { - public class OrderButtonsChromeLogic + public class SellOrderButtonLogic { - readonly World world; - readonly Widget worldRoot; - readonly Widget menuRoot; - bool disableSystemButtons; - Widget currentWidget; - [ObjectCreator.UseCtor] - public OrderButtonsChromeLogic(Widget widget, World world) + public SellOrderButtonLogic(Widget widget, World world) { - this.world = world; - var ingameRoot = Ui.Root.Get("INGAME_ROOT"); - worldRoot = ingameRoot.Get("WORLD_ROOT"); - menuRoot = ingameRoot.Get("MENU_ROOT"); - - Action removeCurrentWidget = () => menuRoot.RemoveChild(currentWidget); - world.GameOver += removeCurrentWidget; - - // Order Buttons - var sell = widget.GetOrNull("SELL_BUTTON"); + var sell = widget as ButtonWidget; if (sell != null) { sell.GetKey = _ => Game.Settings.Keys.SellKey; - BindOrderButton(world, sell, "sell"); + OrderButtonsChromeUtils.BindOrderButton(world, sell, "sell"); } + } + } - var repair = widget.GetOrNull("REPAIR_BUTTON"); + public class RepairOrderButtonLogic + { + [ObjectCreator.UseCtor] + public RepairOrderButtonLogic(Widget widget, World world) + { + var repair = widget as ButtonWidget; if (repair != null) { repair.GetKey = _ => Game.Settings.Keys.RepairKey; - BindOrderButton(world, repair, "repair"); + OrderButtonsChromeUtils.BindOrderButton(world, repair, "repair"); } + } + } - var beacon = widget.GetOrNull("BEACON_BUTTON"); - if (beacon != null) - { - beacon.GetKey = _ => Game.Settings.Keys.PlaceBeaconKey; - BindOrderButton(world, beacon, "beacon"); - } - - var power = widget.GetOrNull("POWER_BUTTON"); + public class PowerdownOrderButtonLogic + { + [ObjectCreator.UseCtor] + public PowerdownOrderButtonLogic(Widget widget, World world) + { + var power = widget as ButtonWidget; if (power != null) { power.GetKey = _ => Game.Settings.Keys.PowerDownKey; - BindOrderButton(world, power, "power"); - } - - // System buttons - var options = widget.GetOrNull("OPTIONS_BUTTON"); - if (options != null) - { - var blinking = false; - var lp = world.LocalPlayer; - options.IsDisabled = () => disableSystemButtons; - options.OnClick = () => - { - blinking = false; - OpenMenuPanel(options, new WidgetArgs() - { - { "activePanel", IngameInfoPanel.AutoSelect } - }); - }; - options.IsHighlighted = () => blinking && Game.LocalTick % 50 < 25; - - if (lp != null) - { - Action startBlinking = player => - { - if (player == world.LocalPlayer) - blinking = true; - }; - - var mo = lp.PlayerActor.TraitOrDefault(); - - if (mo != null) - mo.ObjectiveAdded += startBlinking; - } - } - - var diplomacy = widget.GetOrNull("DIPLOMACY_BUTTON"); - if (diplomacy != null) - { - diplomacy.Visible = !world.Map.Visibility.HasFlag(MapVisibility.MissionSelector) && world.Players.Any(a => a != world.LocalPlayer && !a.NonCombatant); - diplomacy.IsDisabled = () => disableSystemButtons; - diplomacy.OnClick = () => OpenMenuPanel(diplomacy); - } - - var debug = widget.GetOrNull("DEBUG_BUTTON"); - if (debug != null) - { - debug.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats; - debug.IsDisabled = () => disableSystemButtons; - debug.OnClick = () => OpenMenuPanel(debug, new WidgetArgs() - { - { "activePanel", IngameInfoPanel.Debug } - }); - } - - var stats = widget.GetOrNull("OBSERVER_STATS_BUTTON"); - if (stats != null) - { - stats.IsDisabled = () => disableSystemButtons; - stats.OnClick = () => OpenMenuPanel(stats); + OrderButtonsChromeUtils.BindOrderButton(world, power, "power"); } } + } - void OpenMenuPanel(MenuButtonWidget button, WidgetArgs widgetArgs = null) + public class BeaconOrderButtonLogic + { + [ObjectCreator.UseCtor] + public BeaconOrderButtonLogic(Widget widget, World world) { - disableSystemButtons = true; - var cachedPause = world.PredictedPaused; - - if (button.HideIngameUI) - worldRoot.IsVisible = () => false; - - if (button.Pause && world.LobbyInfo.IsSinglePlayer) - world.SetPauseState(true); - - widgetArgs = widgetArgs ?? new WidgetArgs(); - widgetArgs.Add("onExit", () => + var beacon = widget as ButtonWidget; + if (beacon != null) { - if (button.HideIngameUI) - worldRoot.IsVisible = () => true; - - if (button.Pause && world.LobbyInfo.IsSinglePlayer) - world.SetPauseState(cachedPause); - - menuRoot.RemoveChild(currentWidget); - disableSystemButtons = false; - }); - - currentWidget = Game.LoadWidget(world, button.MenuContainer, menuRoot, widgetArgs); + beacon.GetKey = _ => Game.Settings.Keys.PlaceBeaconKey; + OrderButtonsChromeUtils.BindOrderButton(world, beacon, "beacon"); + } } + } - static void BindOrderButton(World world, ButtonWidget w, string icon) + public class OrderButtonsChromeUtils + { + public static void BindOrderButton(World world, ButtonWidget w, string icon) where T : IOrderGenerator, new() { w.OnClick = () => world.ToggleInputMode(); diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 01cb2840f3..50e5d7591e 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -61,7 +61,7 @@ Container@INGAME_ROOT: TooltipContainer@TOOLTIP_CONTAINER: Container@OBSERVER_WIDGETS: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic Children: MenuButton@OPTIONS_BUTTON: Key: escape @@ -237,7 +237,7 @@ Container@PLAYER_WIDGETS: ReadyText: Ready HoldText: On Hold Background@SIDEBAR_BACKGROUND: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic X: WINDOW_RIGHT - 204 Y: 30 Width: 194 @@ -260,6 +260,7 @@ Container@PLAYER_WIDGETS: ImageCollection: order-icons ImageName: options Button@BEACON_BUTTON: + Logic: BeaconOrderButtonLogic X: 62 Y: 0-24 Width: 30 @@ -273,6 +274,7 @@ Container@PLAYER_WIDGETS: Y: 5 ImageCollection: order-icons Button@SELL_BUTTON: + Logic: SellOrderButtonLogic X: 102 Y: 0-24 Width: 30 @@ -286,6 +288,7 @@ Container@PLAYER_WIDGETS: Y: 5 ImageCollection: order-icons Button@REPAIR_BUTTON: + Logic: RepairOrderButtonLogic X: 142 Y: 0-24 Width: 30 diff --git a/mods/d2k/chrome/ingame-observer.yaml b/mods/d2k/chrome/ingame-observer.yaml index 5e4ff4dfab..6f16621021 100644 --- a/mods/d2k/chrome/ingame-observer.yaml +++ b/mods/d2k/chrome/ingame-observer.yaml @@ -1,16 +1,13 @@ Container@OBSERVER_WIDGETS: + Logic: MenuButtonsChromeLogic Children: MenuButton@OPTIONS_BUTTON: - Logic: OrderButtonsChromeLogic - X: 0 - Y: 0 Width: 160 Height: 25 Text: Options (Esc) Font: Bold Key: escape MenuButton@OBSERVER_STATS_BUTTON: - Logic: OrderButtonsChromeLogic MenuContainer: INGAME_OBSERVERSTATS_BG HideIngameUI: False Pause: False diff --git a/mods/d2k/chrome/ingame-player.yaml b/mods/d2k/chrome/ingame-player.yaml index 8609ab63f1..bc351a325d 100644 --- a/mods/d2k/chrome/ingame-player.yaml +++ b/mods/d2k/chrome/ingame-player.yaml @@ -34,7 +34,7 @@ Container@PLAYER_WIDGETS: ClickThrough: false Children: Container@TOP_BUTTONS: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic X: 16 Y: 236 Children: @@ -54,6 +54,7 @@ Container@PLAYER_WIDGETS: ImageCollection: order-icons ImageName: debug Button@REPAIR_BUTTON: + Logic: RepairOrderButtonLogic X: 29 Width: 34 Height: 35 @@ -67,6 +68,7 @@ Container@PLAYER_WIDGETS: Y: 0 ImageCollection: order-icons Button@SELL_BUTTON: + Logic: SellOrderButtonLogic X: 54 Width: 34 Height: 35 @@ -80,6 +82,7 @@ Container@PLAYER_WIDGETS: Y: 0 ImageCollection: order-icons Button@BEACON_BUTTON: + Logic: BeaconOrderButtonLogic X: 108 Width: 36 Height: 35 @@ -94,6 +97,7 @@ Container@PLAYER_WIDGETS: ImageCollection: order-icons Button@POWER_BUTTON: + Logic: PowerdownOrderButtonLogic X: 133 Width: 36 Height: 35 diff --git a/mods/ra/chrome/ingame-observer.yaml b/mods/ra/chrome/ingame-observer.yaml index eb90d6e311..ce8959b869 100644 --- a/mods/ra/chrome/ingame-observer.yaml +++ b/mods/ra/chrome/ingame-observer.yaml @@ -31,7 +31,7 @@ Container@OBSERVER_WIDGETS: Align: Right Font: TinyBold Container@TOP_BUTTONS: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic X: 9 Y: 7 Children: diff --git a/mods/ra/chrome/ingame-player.yaml b/mods/ra/chrome/ingame-player.yaml index 53556edf87..a317560c81 100644 --- a/mods/ra/chrome/ingame-player.yaml +++ b/mods/ra/chrome/ingame-player.yaml @@ -36,12 +36,12 @@ Container@PLAYER_WIDGETS: ClickThrough: false Children: Container@TOP_BUTTONS: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic X: 9 Y: 7 Children: Button@BEACON_BUTTON: - Logic: AddRaceSuffixLogic + Logic: BeaconOrderButtonLogic, AddRaceSuffixLogic Width: 28 Height: 28 Background: sidebar-button @@ -54,7 +54,7 @@ Container@PLAYER_WIDGETS: Y: 6 ImageCollection: order-icons Button@SELL_BUTTON: - Logic: AddRaceSuffixLogic + Logic: SellOrderButtonLogic, AddRaceSuffixLogic X: 32 Width: 28 Height: 28 @@ -68,7 +68,7 @@ Container@PLAYER_WIDGETS: Y: 6 ImageCollection: order-icons Button@POWER_BUTTON: - Logic: AddRaceSuffixLogic + Logic: PowerdownOrderButtonLogic, AddRaceSuffixLogic X: 64 Width: 28 Height: 28 @@ -82,7 +82,7 @@ Container@PLAYER_WIDGETS: Y: 6 ImageCollection: order-icons Button@REPAIR_BUTTON: - Logic: AddRaceSuffixLogic + Logic: RepairOrderButtonLogic, AddRaceSuffixLogic X: 96 Width: 28 Height: 28 diff --git a/mods/ts/chrome/ingame-player.yaml b/mods/ts/chrome/ingame-player.yaml index 72eed29d42..b9a9ec4dc6 100644 --- a/mods/ts/chrome/ingame-player.yaml +++ b/mods/ts/chrome/ingame-player.yaml @@ -36,7 +36,7 @@ Container@PLAYER_WIDGETS: ClickThrough: false Children: Container@TOP_BUTTONS: - Logic: OrderButtonsChromeLogic + Logic: MenuButtonsChromeLogic X: 0 Y: 21 Children: @@ -58,7 +58,7 @@ Container@PLAYER_WIDGETS: ImageCollection: order-icons ImageName: debug Button@REPAIR_BUTTON: - Logic: AddRaceSuffixLogic + Logic: RepairOrderButtonLogic, AddRaceSuffixLogic X: 43 Width: 30 Height: 31 @@ -73,7 +73,7 @@ Container@PLAYER_WIDGETS: Y: 0 ImageCollection: order-icons Button@SELL_BUTTON: - Logic: AddRaceSuffixLogic + Logic: SellOrderButtonLogic, AddRaceSuffixLogic X: 73 Width: 30 Height: 31 @@ -88,7 +88,7 @@ Container@PLAYER_WIDGETS: Y: 0 ImageCollection: order-icons Button@BEACON_BUTTON: - Logic: AddRaceSuffixLogic + Logic: BeaconOrderButtonLogic, AddRaceSuffixLogic X: 103 Width: 30 Height: 31 @@ -103,7 +103,7 @@ Container@PLAYER_WIDGETS: Y: 0 ImageCollection: order-icons Button@POWER_BUTTON: - Logic: AddRaceSuffixLogic + Logic: PowerdownOrderButtonLogic, AddRaceSuffixLogic X: 133 Width: 30 Height: 31 From e0ac3df373ed792761f6e3b43c0bc23d68604afa Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 26 Apr 2015 19:51:07 +1200 Subject: [PATCH 3/3] Split perf widgets into their own file. --- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + .../Logic/Ingame/LoadIngamePerfLogic.cs | 24 ++++++++++ mods/cnc/chrome/ingame.yaml | 47 ++++++++++--------- mods/d2k/chrome/ingame.yaml | 30 +----------- mods/d2k/mod.yaml | 1 + mods/ra/chrome/ingame-perf.yaml | 22 +++++++++ mods/ra/chrome/ingame.yaml | 30 +----------- mods/ra/mod.yaml | 1 + mods/ts/mod.yaml | 1 + 9 files changed, 79 insertions(+), 78 deletions(-) create mode 100644 OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePerfLogic.cs create mode 100644 mods/ra/chrome/ingame-perf.yaml diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index b9bd9b17e9..2ea74f4762 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -625,6 +625,7 @@ + diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePerfLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePerfLogic.cs new file mode 100644 index 0000000000..107c3ff6cb --- /dev/null +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePerfLogic.cs @@ -0,0 +1,24 @@ +#region Copyright & License Information +/* + * Copyright 2007-2015 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.Widgets; + +namespace OpenRA.Mods.Common.Widgets.Logic +{ + public class LoadIngamePerfLogic + { + [ObjectCreator.UseCtor] + public LoadIngamePerfLogic(Widget widget, World world) + { + var perfRoot = widget.Get("PERF_ROOT"); + Game.LoadWidget(world, "PERF_WIDGETS", perfRoot, new WidgetArgs()); + } + } +} diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 50e5d7591e..4c9d25a42b 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -2,6 +2,7 @@ Container@INGAME_ROOT: Logic: LoadIngamePlayerOrObserverUILogic Children: Container@WORLD_ROOT: + Logic: LoadIngamePerfLogic Children: LogicTicker@DISCONNECT_WATCHER: Logic: DisconnectWatcherLogic @@ -27,28 +28,7 @@ Container@INGAME_ROOT: StrategicProgress@STRATEGIC_PROGRESS: X: WINDOW_RIGHT/2 Y: 40 - Container@PERFORMANCE_INFO: - Logic: PerfDebugLogic - Children: - Label@PERF_TEXT: - X: WINDOW_RIGHT - 200 - Y: WINDOW_BOTTOM - 70 - Width: 170 - Height: 40 - Contrast: true - VAlign: Top - Background@GRAPH_BG: - X: 10 - Y: WINDOW_BOTTOM-HEIGHT-10 - Width: 220 - Height: 220 - Background: panel-black - Children: - PerfGraph@GRAPH: - X: 10 - Y: 10 - Width: 200 - Height: 200 + Container@PERF_ROOT: WorldInteractionController@INTERACTION_CONTROLLER: Width: WINDOW_RIGHT Height: WINDOW_BOTTOM @@ -60,6 +40,29 @@ Container@INGAME_ROOT: Container@MENU_ROOT: TooltipContainer@TOOLTIP_CONTAINER: +Container@PERF_WIDGETS: + Logic: PerfDebugLogic + Children: + Label@PERF_TEXT: + X: WINDOW_RIGHT - 200 + Y: WINDOW_BOTTOM - 70 + Width: 170 + Height: 40 + Contrast: true + VAlign: Top + Background@GRAPH_BG: + X: 10 + Y: WINDOW_BOTTOM-HEIGHT-10 + Width: 220 + Height: 220 + Background: panel-black + Children: + PerfGraph@GRAPH: + X: 10 + Y: 10 + Width: 200 + Height: 200 + Container@OBSERVER_WIDGETS: Logic: MenuButtonsChromeLogic Children: diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml index 92823c536f..e8e2bc69bd 100644 --- a/mods/d2k/chrome/ingame.yaml +++ b/mods/d2k/chrome/ingame.yaml @@ -2,23 +2,18 @@ Container@INGAME_ROOT: Logic: LoadIngamePlayerOrObserverUILogic Children: Container@WORLD_ROOT: + Logic: LoadIngamePerfLogic Children: LogicTicker@DISCONNECT_WATCHER: Logic: DisconnectWatcherLogic WorldInteractionController@INTERACTION_CONTROLLER: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM ViewportController: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM TooltipContainer: TOOLTIP_CONTAINER WorldCommand: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM StrategicProgress@STRATEGIC_PROGRESS: @@ -29,28 +24,7 @@ Container@INGAME_ROOT: Y: 34 Order: Descending Container@PLAYER_ROOT: - Container@PERFORMANCE_INFO: - Logic: PerfDebugLogic - Children: - Label@PERF_TEXT: - X: WINDOW_RIGHT - 200 - Y: WINDOW_BOTTOM - 70 - Width: 170 - Height: 40 - Contrast: true - Background@GRAPH_BG: - ClickThrough: true - Background: dialog4 - X: 30 - Y: WINDOW_BOTTOM - 240 - Width: 210 - Height: 210 - Children: - PerfGraph@GRAPH: - X: 5 - Y: 5 - Width: 200 - Height: 200 + Container@PERF_ROOT: Container@GAME_TIMER_BLOCK: Logic: GameTimerLogic X: WINDOW_RIGHT/2 - WIDTH diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index be486022c6..eb5a59201c 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -76,6 +76,7 @@ ChromeLayout: ./mods/d2k/chrome/ingame-observer.yaml ./mods/ra/chrome/ingame-observerstats.yaml ./mods/d2k/chrome/ingame-player.yaml + ./mods/ra/chrome/ingame-perf.yaml ./mods/ra/chrome/ingame-debug.yaml ./mods/d2k/chrome/ingame-leavemap.yaml ./mods/d2k/chrome/mainmenu.yaml diff --git a/mods/ra/chrome/ingame-perf.yaml b/mods/ra/chrome/ingame-perf.yaml new file mode 100644 index 0000000000..15b6cdc12c --- /dev/null +++ b/mods/ra/chrome/ingame-perf.yaml @@ -0,0 +1,22 @@ +Container@PERF_WIDGETS: + Logic: PerfDebugLogic + Children: + Label@PERF_TEXT: + X: WINDOW_RIGHT - 200 + Y: WINDOW_BOTTOM - 70 + Width: 170 + Height: 40 + Contrast: true + Background@GRAPH_BG: + ClickThrough: true + Background: dialog4 + X: 30 + Y: WINDOW_BOTTOM - 240 + Width: 210 + Height: 210 + Children: + PerfGraph@GRAPH: + X: 5 + Y: 5 + Width: 200 + Height: 200 diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index 5aca23ea24..89cc43c27f 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -2,23 +2,18 @@ Container@INGAME_ROOT: Logic: LoadIngamePlayerOrObserverUILogic Children: Container@WORLD_ROOT: + Logic: LoadIngamePerfLogic Children: LogicTicker@DISCONNECT_WATCHER: Logic: DisconnectWatcherLogic WorldInteractionController@INTERACTION_CONTROLLER: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM ViewportController: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM TooltipContainer: TOOLTIP_CONTAINER WorldCommand: - X: 0 - Y: 0 Width: WINDOW_RIGHT Height: WINDOW_BOTTOM StrategicProgress@STRATEGIC_PROGRESS: @@ -29,27 +24,6 @@ Container@INGAME_ROOT: Y: 10 Order: Descending Container@PLAYER_ROOT: - Container@PERFORMANCE_INFO: - Logic: PerfDebugLogic - Children: - Label@PERF_TEXT: - X: WINDOW_RIGHT - 200 - Y: WINDOW_BOTTOM - 70 - Width: 170 - Height: 40 - Contrast: true - Background@GRAPH_BG: - ClickThrough: true - Background: dialog4 - X: 30 - Y: WINDOW_BOTTOM - 240 - Width: 210 - Height: 210 - Children: - PerfGraph@GRAPH: - X: 5 - Y: 5 - Width: 200 - Height: 200 + Container@PERF_ROOT: Container@MENU_ROOT: TooltipContainer@TOOLTIP_CONTAINER: diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 35a05c416a..f61817c410 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -91,6 +91,7 @@ ChromeLayout: ./mods/ra/chrome/ingame-observer.yaml ./mods/ra/chrome/ingame-observerstats.yaml ./mods/ra/chrome/ingame-player.yaml + ./mods/ra/chrome/ingame-perf.yaml ./mods/ra/chrome/ingame-debug.yaml ./mods/ra/chrome/mainmenu.yaml ./mods/ra/chrome/settings.yaml diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index fabc9a2f40..74a911e410 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -144,6 +144,7 @@ ChromeLayout: ./mods/d2k/chrome/ingame-observer.yaml ./mods/ra/chrome/ingame-observerstats.yaml ./mods/ts/chrome/ingame-player.yaml + ./mods/ra/chrome/ingame-perf.yaml ./mods/ra/chrome/ingame-debug.yaml ./mods/ra/chrome/ingame-leavemap.yaml ./mods/ra/chrome/mainmenu.yaml