Fix PlayerColorRemap expecting colors in linear space
PlayerColorRemap expected colors in linear space yet we provided them in gamma. We fix this by instead expecting gamma space colors and then converting them into linear space ourselves.
This commit is contained in:
@@ -21,11 +21,12 @@ namespace OpenRA.Graphics
|
|||||||
readonly float hue;
|
readonly float hue;
|
||||||
readonly float saturation;
|
readonly float saturation;
|
||||||
|
|
||||||
public PlayerColorRemap(int[] remapIndices, float hue, float saturation)
|
public PlayerColorRemap(int[] remapIndices, Color color)
|
||||||
{
|
{
|
||||||
this.remapIndices = remapIndices;
|
this.remapIndices = remapIndices;
|
||||||
this.hue = hue;
|
|
||||||
this.saturation = saturation;
|
var (r, g, b) = color.ToLinear();
|
||||||
|
(hue, saturation, _) = Color.RgbToHsv(r, g, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Color GetRemappedColor(Color original, int index)
|
public Color GetRemappedColor(Color original, int index)
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
void ILoadsPalettes.LoadPalettes(WorldRenderer wr)
|
void ILoadsPalettes.LoadPalettes(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
color = colorManager.Color;
|
color = colorManager.Color;
|
||||||
var (_, h, s, _) = color.ToAhsv();
|
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, color);
|
||||||
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, h, s);
|
|
||||||
wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers);
|
wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap), info.AllowModifiers);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -70,8 +69,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
color = colorManager.Color;
|
color = colorManager.Color;
|
||||||
var (_, h, s, _) = color.ToAhsv();
|
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, color);
|
||||||
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, h, s);
|
|
||||||
wr.ReplacePalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap));
|
wr.ReplacePalette(info.Name, new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,9 +52,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public void LoadPalettes(WorldRenderer wr)
|
public void LoadPalettes(WorldRenderer wr)
|
||||||
{
|
{
|
||||||
var (_, h, s, _) = info.Color.ToAhsv();
|
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, info.Color);
|
||||||
|
|
||||||
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, h, s);
|
|
||||||
wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.Base).Palette, remap), info.AllowModifiers);
|
wr.AddPalette(info.Name, new ImmutablePalette(wr.Palette(info.Base).Palette, remap), info.AllowModifiers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,9 +49,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public void LoadPlayerPalettes(WorldRenderer wr, string playerName, Color color, bool replaceExisting)
|
public void LoadPlayerPalettes(WorldRenderer wr, string playerName, Color color, bool replaceExisting)
|
||||||
{
|
{
|
||||||
var (_, h, s, _) = color.ToAhsv();
|
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, color);
|
||||||
|
|
||||||
var remap = new PlayerColorRemap(info.RemapIndex.Length == 0 ? Enumerable.Range(0, 256).ToArray() : info.RemapIndex, h, s);
|
|
||||||
var pal = new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap);
|
var pal = new ImmutablePalette(wr.Palette(info.BasePalette).Palette, remap);
|
||||||
wr.AddPalette(info.BaseName + playerName, pal, info.AllowModifiers, replaceExisting);
|
wr.AddPalette(info.BaseName + playerName, pal, info.AllowModifiers, replaceExisting);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user