Wrap palette references with a PaletteRef object.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Effects
|
||||
@@ -39,7 +40,7 @@ namespace OpenRA.Effects
|
||||
|
||||
if (remainingTicks % 2 == 0)
|
||||
foreach (var r in target.Render())
|
||||
yield return r.WithPalette("highlight");
|
||||
yield return r.WithPalette(PaletteReference.FromName("highlight"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ namespace OpenRA.Graphics
|
||||
this.DisableFunc = d;
|
||||
}
|
||||
|
||||
public Renderable Image(Actor self, string pal)
|
||||
public Renderable Image(Actor self, PaletteReference pal)
|
||||
{
|
||||
var p = self.CenterLocation;
|
||||
var loc = p.ToFloat2() - 0.5f * Animation.Image.size
|
||||
|
||||
@@ -17,6 +17,33 @@ using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
{
|
||||
public class PaletteReference
|
||||
{
|
||||
string name;
|
||||
int index;
|
||||
public PaletteReference(string name, int index)
|
||||
{
|
||||
this.name = name;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public static PaletteReference FromName(string name)
|
||||
{
|
||||
return new PaletteReference(name, -1);
|
||||
}
|
||||
|
||||
public int RowIndex(WorldRenderer wr)
|
||||
{
|
||||
if (index == -1)
|
||||
{
|
||||
// Too spammy to enable by default
|
||||
//Log.Write("perf", "Late resolution of palette reference {0}", name);
|
||||
index = wr.GetPaletteIndex(name);
|
||||
}
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
public class WorldRenderer
|
||||
{
|
||||
public readonly World world;
|
||||
@@ -78,7 +105,7 @@ namespace OpenRA.Graphics
|
||||
terrainRenderer.Draw(this, Game.viewport);
|
||||
foreach (var a in world.traitDict.ActorsWithTraitMultiple<IRenderAsTerrain>(world))
|
||||
foreach (var r in a.Trait.RenderAsTerrain(a.Actor))
|
||||
r.Sprite.DrawAt(r.Pos, this.GetPaletteIndex(r.Palette), r.Scale);
|
||||
r.Sprite.DrawAt(r.Pos, r.Palette.RowIndex(this), r.Scale);
|
||||
|
||||
foreach (var a in world.Selection.Actors)
|
||||
if (!a.Destroyed)
|
||||
@@ -91,7 +118,7 @@ namespace OpenRA.Graphics
|
||||
world.OrderGenerator.RenderBeforeWorld(this, world);
|
||||
|
||||
foreach (var image in SpritesToRender())
|
||||
image.Sprite.DrawAt(image.Pos, this.GetPaletteIndex(image.Palette), image.Scale);
|
||||
image.Sprite.DrawAt(image.Pos, image.Palette.RowIndex(this), image.Scale);
|
||||
|
||||
// added for contrails
|
||||
foreach (var a in world.ActorsWithTrait<IPostRender>())
|
||||
|
||||
@@ -27,8 +27,10 @@ namespace OpenRA.Traits
|
||||
{
|
||||
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
|
||||
anim.PlayRepeating("idle");
|
||||
|
||||
var pal = Palette ?? (owner != null ? PlayerPalette + owner.InternalName : null);
|
||||
yield return new Renderable(anim.Image, 0.5f * anim.Image.size * (1 - Scale),
|
||||
Palette ?? (owner != null ? PlayerPalette + owner.InternalName : null), 0, Scale);
|
||||
PaletteReference.FromName(pal), 0, Scale);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +79,10 @@ namespace OpenRA.Traits
|
||||
anim.PlayRepeating("idle");
|
||||
}
|
||||
|
||||
public string Palette(Player p) { return Info.Palette ?? Info.PlayerPalette + p.InternalName; }
|
||||
public PaletteReference Palette(Player p)
|
||||
{
|
||||
return PaletteReference.FromName(Info.Palette ?? Info.PlayerPalette + p.InternalName);
|
||||
}
|
||||
|
||||
public virtual IEnumerable<Renderable> Render(Actor self)
|
||||
{
|
||||
|
||||
@@ -154,12 +154,12 @@ namespace OpenRA.Traits
|
||||
{
|
||||
public readonly Sprite Sprite;
|
||||
public readonly float2 Pos;
|
||||
public readonly string Palette;
|
||||
public readonly PaletteReference Palette;
|
||||
public readonly int Z;
|
||||
public readonly int ZOffset;
|
||||
public float Scale;
|
||||
|
||||
public Renderable(Sprite sprite, float2 pos, string palette, int z, int zOffset, float scale)
|
||||
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, int zOffset, float scale)
|
||||
{
|
||||
Sprite = sprite;
|
||||
Pos = pos;
|
||||
@@ -169,14 +169,14 @@ namespace OpenRA.Traits
|
||||
Scale = scale; /* default */
|
||||
}
|
||||
|
||||
public Renderable(Sprite sprite, float2 pos, string palette, int z)
|
||||
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z)
|
||||
: this(sprite, pos, palette, z, 0, 1f) { }
|
||||
|
||||
public Renderable(Sprite sprite, float2 pos, string palette, int z, float scale)
|
||||
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, float scale)
|
||||
: this(sprite, pos, palette, z, 0, scale) { }
|
||||
|
||||
public Renderable WithScale(float newScale) { return new Renderable(Sprite, Pos, Palette, Z, ZOffset, newScale); }
|
||||
public Renderable WithPalette(string newPalette) { return new Renderable(Sprite, Pos, newPalette, Z, ZOffset, Scale); }
|
||||
public Renderable WithPalette(PaletteReference newPalette) { return new Renderable(Sprite, Pos, newPalette, Z, ZOffset, Scale); }
|
||||
public Renderable WithZOffset(int newOffset) { return new Renderable(Sprite, Pos, Palette, Z, newOffset, Scale); }
|
||||
public Renderable WithPos(float2 newPos) { return new Renderable(Sprite, newPos, Palette, Z, ZOffset, Scale); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user