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]
public AddFactionSuffixLogic(Widget widget, World world)
{
if (world.LocalPlayer == null)
if (world.LocalPlayer == null || world.LocalPlayer.Spectating)
return;
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, "CHAT_PANEL", worldRoot, new WidgetArgs() { { "isMenuChat", false } });
world.GameOver += () =>
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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