Make sure palettes are updated if colors are toggled in game runtime

And fix MutablePalette's not getting updated
This commit is contained in:
Gustas
2023-08-11 11:29:31 +03:00
committed by Matthias Mailänder
parent 5fc36bd45f
commit 239891070d
5 changed files with 15 additions and 8 deletions

View File

@@ -85,7 +85,10 @@ namespace OpenRA.Graphics
public void ReplacePalette(string name, IPalette p) public void ReplacePalette(string name, IPalette p)
{ {
if (mutablePalettes.ContainsKey(name)) if (mutablePalettes.ContainsKey(name))
{
palettes[name] = new ImmutablePalette(p);
CopyPaletteToBuffer(indices[name], mutablePalettes[name] = new MutablePalette(p)); CopyPaletteToBuffer(indices[name], mutablePalettes[name] = new MutablePalette(p));
}
else if (palettes.ContainsKey(name)) else if (palettes.ContainsKey(name))
CopyPaletteToBuffer(indices[name], palettes[name] = new ImmutablePalette(p)); CopyPaletteToBuffer(indices[name], palettes[name] = new ImmutablePalette(p));
else else

View File

@@ -62,10 +62,7 @@ namespace OpenRA.Graphics
foreach (var pal in world.TraitDict.ActorsWithTrait<ILoadsPalettes>()) foreach (var pal in world.TraitDict.ActorsWithTrait<ILoadsPalettes>())
pal.Trait.LoadPalettes(this); pal.Trait.LoadPalettes(this);
foreach (var p in world.Players) Player.SetupRelationshipColors(world.Players, world.LocalPlayer, this, true);
UpdatePalettesForPlayer(p.InternalName, p.Color, false);
Player.SetupRelationshipColors(world.Players, world.LocalPlayer);
palette.Initialize(); palette.Initialize();

View File

@@ -14,6 +14,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Eluant; using Eluant;
using Eluant.ObjectBinding; using Eluant.ObjectBinding;
using OpenRA.Graphics;
using OpenRA.Network; using OpenRA.Network;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Scripting; using OpenRA.Scripting;
@@ -252,10 +253,13 @@ namespace OpenRA
/// <summary>Returns <see cref="color"/>, ignoring player relationship colors.</summary> /// <summary>Returns <see cref="color"/>, ignoring player relationship colors.</summary>
public static Color GetColor(Player p) => p.color; public static Color GetColor(Player p) => p.color;
public static void SetupRelationshipColors(Player[] players, Player viewer) public static void SetupRelationshipColors(Player[] players, Player viewer, WorldRenderer worldRenderer, bool firstRun)
{ {
foreach (var p in players) foreach (var p in players)
{
p.Color = PlayerRelationshipColor(p, viewer); p.Color = PlayerRelationshipColor(p, viewer);
worldRenderer.UpdatePalettesForPlayer(p.InternalName, p.Color, !firstRun);
}
} }
public static Color PlayerRelationshipColor(Player player, Player viewer) public static Color PlayerRelationshipColor(Player player, Player viewer)

View File

@@ -10,6 +10,7 @@
#endregion #endregion
using System.Collections.Generic; using System.Collections.Generic;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Lint; using OpenRA.Mods.Common.Lint;
using OpenRA.Widgets; using OpenRA.Widgets;
@@ -19,18 +20,20 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
public class TogglePlayerStanceColorHotkeyLogic : SingleHotkeyBaseLogic public class TogglePlayerStanceColorHotkeyLogic : SingleHotkeyBaseLogic
{ {
readonly World world; readonly World world;
readonly WorldRenderer worldRenderer;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public TogglePlayerStanceColorHotkeyLogic(Widget widget, World world, ModData modData, Dictionary<string, MiniYaml> logicArgs) public TogglePlayerStanceColorHotkeyLogic(Widget widget, World world, WorldRenderer worldRenderer, ModData modData, Dictionary<string, MiniYaml> logicArgs)
: base(widget, modData, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs) : base(widget, modData, "TogglePlayerStanceColorKey", "WORLD_KEYHANDLER", logicArgs)
{ {
this.world = world; this.world = world;
this.worldRenderer = worldRenderer;
} }
protected override bool OnHotkeyActivated(KeyInput e) protected override bool OnHotkeyActivated(KeyInput e)
{ {
Game.Settings.Game.UsePlayerStanceColors ^= true; Game.Settings.Game.UsePlayerStanceColors ^= true;
Player.SetupRelationshipColors(world.Players, world.LocalPlayer); Player.SetupRelationshipColors(world.Players, world.LocalPlayer, worldRenderer, false);
return true; return true;
} }

View File

@@ -152,7 +152,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
cb.OnClick = () => cb.OnClick = () =>
{ {
gs.UsePlayerStanceColors = cb.IsChecked() ^ true; gs.UsePlayerStanceColors = cb.IsChecked() ^ true;
Player.SetupRelationshipColors(world.Players, world.LocalPlayer); Player.SetupRelationshipColors(world.Players, world.LocalPlayer, worldRenderer, false);
}; };
if (panel.GetOrNull<CheckboxWidget>("PAUSE_SHELLMAP_CHECKBOX") != null) if (panel.GetOrNull<CheckboxWidget>("PAUSE_SHELLMAP_CHECKBOX") != null)