Add IColorPickerManagerInfo interface

This commit is contained in:
Gustas
2023-03-12 19:53:46 +02:00
committed by Pavel Penev
parent 265f915442
commit d838d08570
10 changed files with 159 additions and 138 deletions

View File

@@ -44,19 +44,22 @@ namespace OpenRA.Mods.Common.Traits
class ColorPickerPalette : ILoadsPalettes, IProvidesAssetBrowserColorPickerPalettes, ITickRender
{
readonly ColorPickerPaletteInfo info;
readonly ColorPickerManagerInfo colorManager;
Color color;
Color preferredColor;
public ColorPickerPalette(ColorPickerPaletteInfo info)
{
// All users need to use the same TraitInfo instance, chosen as the default mod rules
colorManager = Game.ModData.DefaultRules.Actors[SystemActors.World].TraitInfo<ColorPickerManagerInfo>();
this.info = info;
// All users need to use the same TraitInfo instance, chosen as the default mod rules
var colorManager = Game.ModData.DefaultRules.Actors[SystemActors.World].TraitInfo<IColorPickerManagerInfo>();
colorManager.OnColorPickerColorUpdate += c => preferredColor = c;
preferredColor = Game.Settings.Player.Color;
}
void ILoadsPalettes.LoadPalettes(WorldRenderer wr)
{
color = colorManager.Color;
color = preferredColor;
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, color);
wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers);
}
@@ -65,10 +68,10 @@ namespace OpenRA.Mods.Common.Traits
void ITickRender.TickRender(WorldRenderer wr, Actor self)
{
if (color == colorManager.Color)
if (color == preferredColor)
return;
color = colorManager.Color;
color = preferredColor;
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, color);
wr.ReplacePalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap));
}