From d70356b47fbcc345d721124d4dd95706a111774e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 23 Apr 2016 14:10:54 +0100 Subject: [PATCH] Fix GPS satellite palette. --- OpenRA.Mods.RA/Effects/GpsSatellite.cs | 12 ++++++------ OpenRA.Mods.RA/Effects/SatelliteLaunch.cs | 18 ++++++++++++------ .../Traits/SupportPowers/GpsPower.cs | 14 ++++++++++++-- 3 files changed, 30 insertions(+), 14 deletions(-) diff --git a/OpenRA.Mods.RA/Effects/GpsSatellite.cs b/OpenRA.Mods.RA/Effects/GpsSatellite.cs index d57fbc0676..fb0e3bfeee 100644 --- a/OpenRA.Mods.RA/Effects/GpsSatellite.cs +++ b/OpenRA.Mods.RA/Effects/GpsSatellite.cs @@ -18,17 +18,17 @@ namespace OpenRA.Mods.RA.Effects { class GpsSatellite : IEffect { - readonly GpsPowerInfo info; readonly Animation anim; + readonly string palette; WPos pos; - public GpsSatellite(World world, WPos pos, GpsPowerInfo info) + public GpsSatellite(World world, WPos pos, string image, string sequence, string palette) { - this.info = info; + this.palette = palette; this.pos = pos; - anim = new Animation(world, info.SatelliteImage); - anim.PlayRepeating(info.SatelliteSequence); + anim = new Animation(world, image); + anim.PlayRepeating(sequence); } public void Tick(World world) @@ -42,7 +42,7 @@ namespace OpenRA.Mods.RA.Effects public IEnumerable Render(WorldRenderer wr) { - return anim.Render(pos, wr.Palette(info.SatellitePalette)); + return anim.Render(pos, wr.Palette(palette)); } } } diff --git a/OpenRA.Mods.RA/Effects/SatelliteLaunch.cs b/OpenRA.Mods.RA/Effects/SatelliteLaunch.cs index 033172f865..3f669d05b8 100644 --- a/OpenRA.Mods.RA/Effects/SatelliteLaunch.cs +++ b/OpenRA.Mods.RA/Effects/SatelliteLaunch.cs @@ -19,19 +19,21 @@ namespace OpenRA.Mods.RA.Effects class SatelliteLaunch : IEffect { readonly GpsPowerInfo info; + readonly Actor launcher; readonly Animation doors; readonly WPos pos; int frame = 0; - public SatelliteLaunch(Actor a, GpsPowerInfo info) + public SatelliteLaunch(Actor launcher, GpsPowerInfo info) { this.info = info; + this.launcher = launcher; - doors = new Animation(a.World, info.DoorImage); + doors = new Animation(launcher.World, info.DoorImage); doors.PlayThen(info.DoorSequence, - () => a.World.AddFrameEndTask(w => w.Remove(this))); + () => launcher.World.AddFrameEndTask(w => w.Remove(this))); - pos = a.CenterPosition; + pos = launcher.CenterPosition; } public void Tick(World world) @@ -39,12 +41,16 @@ namespace OpenRA.Mods.RA.Effects doors.Tick(); if (++frame == 19) - world.AddFrameEndTask(w => w.Add(new GpsSatellite(world, pos, info))); + { + var palette = info.SatellitePaletteIsPlayerPalette ? info.SatellitePalette + launcher.Owner.InternalName : info.SatellitePalette; + world.AddFrameEndTask(w => w.Add(new GpsSatellite(world, pos, info.SatelliteImage, info.SatelliteSequence, palette))); + } } public IEnumerable Render(WorldRenderer wr) { - return doors.Render(pos, wr.Palette(info.DoorPalette)); + var palette = info.DoorPaletteIsPlayerPalette ? info.DoorPalette + launcher.Owner.InternalName : info.DoorPalette; + return doors.Render(pos, wr.Palette(palette)); } } } diff --git a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs index 3742762a6d..0042174594 100644 --- a/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs +++ b/OpenRA.Mods.RA/Traits/SupportPowers/GpsPower.cs @@ -25,11 +25,21 @@ namespace OpenRA.Mods.RA.Traits public readonly string DoorImage = "atek"; [SequenceReference("DoorImage")] public readonly string DoorSequence = "active"; - [PaletteReference] public readonly string DoorPalette = "effect"; + + [Desc("Palette to use for rendering the launch animation")] + [PaletteReference("DoorPaletteIsPlayerPalette")] public readonly string DoorPalette = "player"; + + [Desc("Custom palette is a player palette BaseName")] + public readonly bool DoorPaletteIsPlayerPalette = true; public readonly string SatelliteImage = "sputnik"; [SequenceReference("SatelliteImage")] public readonly string SatelliteSequence = "idle"; - [PaletteReference] public readonly string SatellitePalette = "effect"; + + [Desc("Palette to use for rendering the satellite projectile")] + [PaletteReference("SatellitePaletteIsPlayerPalette")] public readonly string SatellitePalette = "player"; + + [Desc("Custom palette is a player palette BaseName")] + public readonly bool SatellitePaletteIsPlayerPalette = true; public override object Create(ActorInitializer init) { return new GpsPower(init.Self, this); } }