Make sure palettes are updated if colors are toggled in game runtime
And fix MutablePalette's not getting updated
This commit is contained in:
committed by
Matthias Mailänder
parent
5fc36bd45f
commit
239891070d
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Lint;
|
||||
using OpenRA.Widgets;
|
||||
|
||||
@@ -19,18 +20,20 @@ namespace OpenRA.Mods.Common.Widgets.Logic.Ingame
|
||||
public class TogglePlayerStanceColorHotkeyLogic : SingleHotkeyBaseLogic
|
||||
{
|
||||
readonly World world;
|
||||
readonly WorldRenderer worldRenderer;
|
||||
|
||||
[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)
|
||||
{
|
||||
this.world = world;
|
||||
this.worldRenderer = worldRenderer;
|
||||
}
|
||||
|
||||
protected override bool OnHotkeyActivated(KeyInput e)
|
||||
{
|
||||
Game.Settings.Game.UsePlayerStanceColors ^= true;
|
||||
Player.SetupRelationshipColors(world.Players, world.LocalPlayer);
|
||||
Player.SetupRelationshipColors(world.Players, world.LocalPlayer, worldRenderer, false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
cb.OnClick = () =>
|
||||
{
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user