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)
{
if (mutablePalettes.ContainsKey(name))
{
palettes[name] = new ImmutablePalette(p);
CopyPaletteToBuffer(indices[name], mutablePalettes[name] = new MutablePalette(p));
}
else if (palettes.ContainsKey(name))
CopyPaletteToBuffer(indices[name], palettes[name] = new ImmutablePalette(p));
else

View File

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

View File

@@ -14,6 +14,7 @@ using System.Collections.Generic;
using System.Linq;
using Eluant;
using Eluant.ObjectBinding;
using OpenRA.Graphics;
using OpenRA.Network;
using OpenRA.Primitives;
using OpenRA.Scripting;
@@ -252,10 +253,13 @@ namespace OpenRA
/// <summary>Returns <see cref="color"/>, ignoring player relationship colors.</summary>
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)
{
p.Color = PlayerRelationshipColor(p, viewer);
worldRenderer.UpdatePalettesForPlayer(p.InternalName, p.Color, !firstRun);
}
}
public static Color PlayerRelationshipColor(Player player, Player viewer)