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)
|
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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user