Add separate chat panel for spectators and players

Forces the chat and performance panels to be re-initialized when a
player transitions to spectators. This ensures that spectators don't
get to see faction themed widgets.
This commit is contained in:
Ivaylo Draganov
2021-07-11 17:25:17 +03:00
committed by Paul Chote
parent edd3a2eb75
commit 2d0e7040db
11 changed files with 46 additions and 8 deletions

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public AddFactionSuffixLogic(Widget widget, World world) public AddFactionSuffixLogic(Widget widget, World world)
{ {
if (world.LocalPlayer == null) if (world.LocalPlayer == null || world.LocalPlayer.Spectating)
return; return;
if (!ChromeMetrics.TryGet("FactionSuffix-" + world.LocalPlayer.Faction.InternalName, out string faction)) if (!ChromeMetrics.TryGet("FactionSuffix-" + world.LocalPlayer.Faction.InternalName, out string faction))

View File

@@ -0,0 +1,25 @@
#region Copyright & License Information
/*
* Copyright 2007-2021 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, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
{
public class LoadIngameChatLogic : ChromeLogic
{
[ObjectCreator.UseCtor]
public LoadIngameChatLogic(Widget widget, World world)
{
var root = widget.Get("CHAT_ROOT");
Game.LoadWidget(world, "CHAT_PANEL", root, new WidgetArgs() { { "isMenuChat", false } });
}
}
}

View File

@@ -54,7 +54,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
} }
Game.LoadWidget(world, "DEBUG_WIDGETS", worldRoot, new WidgetArgs()); Game.LoadWidget(world, "DEBUG_WIDGETS", worldRoot, new WidgetArgs());
Game.LoadWidget(world, "CHAT_PANEL", worldRoot, new WidgetArgs() { { "isMenuChat", false } });
world.GameOver += () => world.GameOver += () =>
{ {

View File

@@ -22,7 +22,6 @@ Container@INGAME_ROOT:
CycleStatusBarsKey: CycleStatusBars CycleStatusBarsKey: CycleStatusBars
PauseKey: Pause PauseKey: Pause
Container@WORLD_ROOT: Container@WORLD_ROOT:
Logic: LoadIngamePerfLogic
Children: Children:
LogicTicker@DISCONNECT_WATCHER: LogicTicker@DISCONNECT_WATCHER:
Logic: DisconnectWatcherLogic Logic: DisconnectWatcherLogic
@@ -37,7 +36,6 @@ Container@INGAME_ROOT:
StrategicProgress@STRATEGIC_PROGRESS: StrategicProgress@STRATEGIC_PROGRESS:
X: WINDOW_RIGHT / 2 X: WINDOW_RIGHT / 2
Y: 40 Y: 40
Container@PERF_ROOT:
WorldInteractionController@INTERACTION_CONTROLLER: WorldInteractionController@INTERACTION_CONTROLLER:
Width: WINDOW_RIGHT Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM Height: WINDOW_BOTTOM
@@ -73,8 +71,10 @@ Container@PERF_WIDGETS:
Height: 200 Height: 200
Container@OBSERVER_WIDGETS: Container@OBSERVER_WIDGETS:
Logic: MenuButtonsChromeLogic Logic: MenuButtonsChromeLogic, LoadIngamePerfLogic, LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
Container@PERF_ROOT:
ViewportController: ViewportController:
Width: WINDOW_RIGHT Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM Height: WINDOW_BOTTOM
@@ -1140,7 +1140,10 @@ Container@OBSERVER_WIDGETS:
AxisFont: TinyBold AxisFont: TinyBold
Container@PLAYER_WIDGETS: Container@PLAYER_WIDGETS:
Logic: LoadIngamePerfLogic, LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
Container@PERF_ROOT:
ViewportController: ViewportController:
Width: WINDOW_RIGHT Width: WINDOW_RIGHT
Height: WINDOW_BOTTOM Height: WINDOW_BOTTOM

View File

@@ -1,6 +1,7 @@
Container@OBSERVER_WIDGETS: Container@OBSERVER_WIDGETS:
Logic: MenuButtonsChromeLogic Logic: MenuButtonsChromeLogic, LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@OBSERVER_KEY_LISTENER: LogicKeyListener@OBSERVER_KEY_LISTENER:
MenuButton@OPTIONS_BUTTON: MenuButton@OPTIONS_BUTTON:
X: 5 X: 5

View File

@@ -1,6 +1,7 @@
Container@OBSERVER_WIDGETS: Container@OBSERVER_WIDGETS:
Logic: MenuButtonsChromeLogic Logic: MenuButtonsChromeLogic, LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@OBSERVER_KEY_LISTENER: LogicKeyListener@OBSERVER_KEY_LISTENER:
Container@MUTE_INDICATOR: Container@MUTE_INDICATOR:
Logic: MuteIndicatorLogic Logic: MuteIndicatorLogic

View File

@@ -1,5 +1,7 @@
Container@PLAYER_WIDGETS: Container@PLAYER_WIDGETS:
Logic: LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@CONTROLGROUP_KEYHANDLER: LogicKeyListener@CONTROLGROUP_KEYHANDLER:
Logic: ControlGroupLogic Logic: ControlGroupLogic
LogicTicker@SIDEBAR_TICKER: LogicTicker@SIDEBAR_TICKER:

View File

@@ -1,5 +1,7 @@
Container@OBSERVER_WIDGETS: Container@OBSERVER_WIDGETS:
Logic: LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
Container@MUTE_INDICATOR: Container@MUTE_INDICATOR:
Logic: MuteIndicatorLogic Logic: MuteIndicatorLogic
X: WINDOW_RIGHT - WIDTH - 260 X: WINDOW_RIGHT - WIDTH - 260

View File

@@ -1,5 +1,7 @@
Container@PLAYER_WIDGETS: Container@PLAYER_WIDGETS:
Logic: LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@CONTROLGROUP_KEYHANDLER: LogicKeyListener@CONTROLGROUP_KEYHANDLER:
Logic: ControlGroupLogic Logic: ControlGroupLogic
LogicTicker@SIDEBAR_TICKER: LogicTicker@SIDEBAR_TICKER:

View File

@@ -1,6 +1,7 @@
Container@OBSERVER_WIDGETS: Container@OBSERVER_WIDGETS:
Logic: MenuButtonsChromeLogic Logic: MenuButtonsChromeLogic, LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@OBSERVER_KEY_LISTENER: LogicKeyListener@OBSERVER_KEY_LISTENER:
Container@MUTE_INDICATOR: Container@MUTE_INDICATOR:
Logic: MuteIndicatorLogic Logic: MuteIndicatorLogic

View File

@@ -1,5 +1,7 @@
Container@PLAYER_WIDGETS: Container@PLAYER_WIDGETS:
Logic: LoadIngameChatLogic
Children: Children:
Container@CHAT_ROOT:
LogicKeyListener@CONTROLGROUP_KEYHANDLER: LogicKeyListener@CONTROLGROUP_KEYHANDLER:
Logic: ControlGroupLogic Logic: ControlGroupLogic
LogicTicker@SIDEBAR_TICKER: LogicTicker@SIDEBAR_TICKER: