Make player stance colours universally respected

This commit is contained in:
Gustas
2023-02-25 13:42:43 +02:00
committed by Matthias Mailänder
parent 2f331548e1
commit 5fc36bd45f
38 changed files with 110 additions and 88 deletions

View File

@@ -18,13 +18,19 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
[ChromeLogicArgsHotkeys("TogglePlayerStanceColorKey")]
public class TogglePlayerStanceColorHotkeyLogic : SingleHotkeyBaseLogic
{
readonly World world;
[ObjectCreator.UseCtor]
public TogglePlayerStanceColorHotkeyLogic(Widget widget, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs) { }
public TogglePlayerStanceColorHotkeyLogic(Widget widget, World world, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs)
{
this.world = world;
}
protected override bool OnHotkeyActivated(KeyInput e)
{
Game.Settings.Game.UsePlayerStanceColors ^= true;
Player.SetupRelationshipColors(world.Players, world.LocalPlayer);
return true;
}

View File

@@ -515,8 +515,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
static void SetupPlayerColor(Player player, ScrollItemWidget template, ColorBlockWidget colorBlockWidget, GradientColorBlockWidget gradientColorBlockWidget)
{
var color = Color.FromArgb(128, player.Color.R, player.Color.G, player.Color.B);
var hoverColor = Color.FromArgb(192, player.Color.R, player.Color.G, player.Color.B);
var pColor = player.Color;
var color = Color.FromArgb(128, pColor.R, pColor.G, pColor.B);
var hoverColor = Color.FromArgb(192, pColor.R, pColor.G, pColor.B);
var isMouseOver = new CachedTransform<Widget, bool>(w => w == template || template.Children.Contains(w));

View File

@@ -69,6 +69,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
o = viewport.ActorTooltip.Owner;
showOwner = o != null && !o.NonCombatant && viewport.ActorTooltip.TooltipInfo.IsOwnerRowVisible;
if (showOwner)
ownerColor = o.Color;
var stance = o == null || world.RenderPlayer == null ? PlayerRelationship.None : o.RelationshipWith(world.RenderPlayer);
labelText = viewport.ActorTooltip.TooltipInfo.TooltipForPlayerStance(stance);
break;
@@ -79,6 +82,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
o = viewport.FrozenActorTooltip.TooltipOwner;
showOwner = o != null && !o.NonCombatant && viewport.FrozenActorTooltip.TooltipInfo.IsOwnerRowVisible;
if (showOwner)
ownerColor = o.Color;
var stance = o == null || world.RenderPlayer == null ? PlayerRelationship.None : o.RelationshipWith(world.RenderPlayer);
labelText = viewport.FrozenActorTooltip.TooltipInfo.TooltipForPlayerStance(stance);
break;
@@ -107,7 +113,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
flagFaction = o.Faction.InternalName;
ownerName = o.PlayerName;
ownerColor = o.Color;
widget.Bounds.Height = doubleHeight;
widget.Bounds.Width = Math.Max(widget.Bounds.Width,
owner.Bounds.X + ownerFont.Measure(ownerName).X + label.Bounds.X);

View File

@@ -137,6 +137,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
var ds = Game.Settings.Graphics;
var gs = Game.Settings.Game;
var world = worldRenderer.World;
var scrollPanel = panel.Get<ScrollPanelWidget>("SETTINGS_SCROLLPANEL");
SettingsUtils.BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
@@ -145,6 +146,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
SettingsUtils.BindCheckboxPref(panel, "FRAME_LIMIT_GAMESPEED_CHECKBOX", ds, "CapFramerateToGameFps");
SettingsUtils.BindIntSliderPref(panel, "FRAME_LIMIT_SLIDER", ds, "MaxFramerate");
SettingsUtils.BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors");
var cb = panel.Get<CheckboxWidget>("PLAYER_STANCE_COLORS_CHECKBOX");
cb.IsChecked = () => gs.UsePlayerStanceColors;
cb.OnClick = () =>
{
gs.UsePlayerStanceColors = cb.IsChecked() ^ true;
Player.SetupRelationshipColors(world.Players, world.LocalPlayer);
};
if (panel.GetOrNull<CheckboxWidget>("PAUSE_SHELLMAP_CHECKBOX") != null)
SettingsUtils.BindCheckboxPref(panel, "PAUSE_SHELLMAP_CHECKBOX", gs, "PauseShellmap");
@@ -208,7 +218,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var minResolution = viewportSizes.MinEffectiveResolution;
var resolution = Game.Renderer.Resolution;
var disableUIScale = worldRenderer.World.Type != WorldType.Shellmap ||
var disableUIScale = world.Type != WorldType.Shellmap ||
resolution.Width * ds.UIScale < 1.25f * minResolution.Width ||
resolution.Height * ds.UIScale < 1.25f * minResolution.Height;
@@ -240,7 +250,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var escPressed = false;
var nameTextfield = panel.Get<TextFieldWidget>("PLAYERNAME");
nameTextfield.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
nameTextfield.IsDisabled = () => world.Type != WorldType.Shellmap;
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
nameTextfield.OnLoseFocus = () =>
{
@@ -272,7 +282,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var colorManager = modData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
var colorDropdown = panel.Get<DropDownButtonWidget>("PLAYERCOLOR");
colorDropdown.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
colorDropdown.IsDisabled = () => world.Type != WorldType.Shellmap;
colorDropdown.OnMouseDown = _ => colorManager.ShowColorDropDown(colorDropdown, ps.Color, null, worldRenderer, color =>
{
ps.Color = color;

View File

@@ -61,8 +61,7 @@ namespace OpenRA.Mods.Common.Widgets
var time = WidgetUtils.FormatTime(p.RemainingTicks, false, self.World.Timestep);
var text = TranslationProvider.GetString(Format, Translation.Arguments("player", self.Owner.PlayerName, "support-power", p.Name, "time", time));
var playerColor = Game.Settings.Game.UsePlayerStanceColors ? Player.PlayerRelationshipColor(self) : self.Owner.Color;
var color = !p.Ready || Game.LocalTick % 50 < 25 ? playerColor : Color.White;
var color = !p.Ready || Game.LocalTick % 50 < 25 ? self.OwnerColor() : Color.White;
return (text, color);
}).ToArray();