Support arbitrary per-player palettes. Will crash if I missed any cases that don't explicitly set the Renderable palette.

This commit is contained in:
Paul Chote
2011-05-03 22:21:31 +12:00
parent b937489f2d
commit 8f962853f9
12 changed files with 36 additions and 32 deletions

View File

@@ -162,11 +162,11 @@ namespace OpenRA.Mods.RA.Effects
var highPos = pos - new float2(0, GetAltitude());
yield return new Renderable(anim.Image, highPos - .5f * anim.Image.size, Args.firedBy.Owner.Palette, (int)pos.Y);
yield return new Renderable(anim.Image, highPos - .5f * anim.Image.size, "effect", (int)pos.Y);
}
else
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size,
Args.weapon.Underwater ? "shadow" : Args.firedBy.Owner.Palette, (int)pos.Y);
Args.weapon.Underwater ? "shadow" : "effect", (int)pos.Y);
}
}

View File

@@ -19,23 +19,24 @@ namespace OpenRA.Mods.RA.Effects
{
readonly Animation anim;
readonly float2 pos;
readonly Player owner;
readonly string palette;
public Corpse(Actor fromActor, int death)
{
anim = new Animation(fromActor.TraitOrDefault<RenderSimple>().GetImage(fromActor));
var rs = fromActor.Trait<RenderSimple>();
palette = rs.Palette(fromActor.Owner);
anim = new Animation(rs.GetImage(fromActor));
anim.PlayThen("die{0}".F(death + 1),
() => fromActor.World.AddFrameEndTask(w => w.Remove(this)));
pos = fromActor.CenterLocation;
owner = fromActor.Owner;
}
public void Tick( World world ) { anim.Tick(); }
public IEnumerable<Renderable> Render()
{
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, owner.Palette, (int)pos.Y);
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, palette, (int)pos.Y);
}
}
}

View File

@@ -19,6 +19,7 @@ namespace OpenRA.Mods.RA.Effects
public class Parachute : IEffect
{
readonly Animation anim;
readonly string palette;
readonly Animation paraAnim;
readonly float2 location;
@@ -37,7 +38,8 @@ namespace OpenRA.Mods.RA.Effects
var rs = cargo.Trait<RenderSimple>();
var image = rs.anim.Name;
palette = rs.Palette(owner);
anim = new Animation(image);
if (anim.HasSequence("idle"))
anim.PlayFetchIndex("idle", () => 0);
@@ -70,8 +72,8 @@ namespace OpenRA.Mods.RA.Effects
{
var pos = location - new float2(0, altitude);
yield return new Renderable(anim.Image, location - .5f * anim.Image.size, "shadow", 0);
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, owner.Palette, 2);
yield return new Renderable(paraAnim.Image, pos - .5f * paraAnim.Image.size, owner.Palette, 3);
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, palette, 2);
yield return new Renderable(paraAnim.Image, pos - .5f * paraAnim.Image.size, palette, 3);
}
}
}

View File

@@ -23,11 +23,12 @@ namespace OpenRA.Mods.RA.Effects
RA.RallyPoint rp;
public Animation flag = new Animation("rallypoint");
public Animation circles = new Animation("rallypoint");
readonly string palette;
public RallyPoint(Actor building)
{
this.building = building;
rp = building.Trait<RA.RallyPoint>();
palette = building.Trait<RenderSimple>().Palette(building.Owner);
flag.PlayRepeating("flag");
circles.Play("circles");
}
@@ -54,11 +55,11 @@ namespace OpenRA.Mods.RA.Effects
var pos = Traits.Util.CenterOfCell(rp.rallyPoint);
yield return new Renderable(circles.Image,
pos - .5f * circles.Image.size,
building.Owner.Palette, (int)pos.Y);
palette, (int)pos.Y);
yield return new Renderable(flag.Image,
pos + new float2(-1,-17),
building.Owner.Palette, (int)pos.Y);
palette, (int)pos.Y);
}
}
}