From df206ddb188bd39c5626294fea45a48a6c05114f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 5 Aug 2015 23:32:10 +0200 Subject: [PATCH] unhardcode rallypoint sprites --- .../Effects/RallyPointIndicator.cs | 19 ++++++++++--------- .../Traits/Buildings/RallyPoint.cs | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/OpenRA.Mods.Common/Effects/RallyPointIndicator.cs b/OpenRA.Mods.Common/Effects/RallyPointIndicator.cs index ce8672f2ca..366fefb1f7 100644 --- a/OpenRA.Mods.Common/Effects/RallyPointIndicator.cs +++ b/OpenRA.Mods.Common/Effects/RallyPointIndicator.cs @@ -20,22 +20,22 @@ namespace OpenRA.Mods.Common.Effects { readonly Actor building; readonly RallyPoint rp; - readonly string palettePrefix; + readonly string paletteName; readonly Animation flag; readonly Animation circles; - public RallyPointIndicator(Actor building, string palettePrefix) + public RallyPointIndicator(Actor building, string paletteName) { this.building = building; - this.palettePrefix = palettePrefix; + this.paletteName = paletteName; rp = building.Trait(); - flag = new Animation(building.World, "rallypoint"); - circles = new Animation(building.World, "rallypoint"); + flag = new Animation(building.World, rp.Info.Image); + flag.PlayRepeating(rp.Info.FlagSequence); - flag.PlayRepeating("flag"); - circles.Play("circles"); + circles = new Animation(building.World, rp.Info.Image); + circles.Play(rp.Info.CirclesSequence); } CPos cachedLocation; @@ -43,10 +43,11 @@ namespace OpenRA.Mods.Common.Effects { flag.Tick(); circles.Tick(); + if (cachedLocation != rp.Location) { cachedLocation = rp.Location; - circles.Play("circles"); + circles.Play(rp.Info.CirclesSequence); } if (!building.IsInWorld || building.IsDead) @@ -62,7 +63,7 @@ namespace OpenRA.Mods.Common.Effects return SpriteRenderable.None; var pos = wr.World.Map.CenterOfCell(cachedLocation); - var palette = wr.Palette(palettePrefix + building.Owner.InternalName); + var palette = wr.Palette(paletteName); return circles.Render(pos, palette).Concat(flag.Render(pos, palette)); } } diff --git a/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs b/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs index ee637cb26b..ccffd21692 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/RallyPoint.cs @@ -17,7 +17,16 @@ namespace OpenRA.Mods.Common.Traits [Desc("Used to waypoint units after production or repair is finished.")] public class RallyPointInfo : ITraitInfo { - public readonly string IndicatorPalettePrefix = "player"; + public readonly string Image = "rallypoint"; + [SequenceReference("Image")] public readonly string FlagSequence = "flag"; + [SequenceReference("Image")] public readonly string CirclesSequence = "circles"; + + [Desc("Custom indicator palette name")] + public readonly string Palette = "player"; + + [Desc("Custom palette is a player palette BaseName")] + public readonly bool IsPlayerPalette = true; + public readonly CVec Offset = new CVec(1, 3); public object Create(ActorInitializer init) { return new RallyPoint(init.Self, this); } @@ -26,11 +35,14 @@ namespace OpenRA.Mods.Common.Traits public class RallyPoint : IIssueOrder, IResolveOrder, ISync { [Sync] public CPos Location; + public RallyPointInfo Info; public RallyPoint(Actor self, RallyPointInfo info) { - Location = self.Location + info.RallyPoint; - self.World.AddFrameEndTask(w => w.Add(new RallyPointIndicator(self, info.IndicatorPalettePrefix))); + Info = info; + Location = self.Location + info.Offset; + var palette = info.IsPlayerPalette ? info.Palette + self.Owner.InternalName : info.Palette; + self.World.AddFrameEndTask(w => w.Add(new RallyPointIndicator(self, palette))); } public IEnumerable Orders