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