From 4a7687d7e4b20fa9beace0a478c92537c5140643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Tue, 1 Jul 2014 21:21:09 +0200 Subject: [PATCH] add a customizable parachute shadow closes #3335 --- OpenRA.Mods.RA/Effects/Parachute.cs | 26 +++++++++++++++++++++----- OpenRA.Mods.RA/Parachutable.cs | 8 ++++++++ mods/ra/bits/parach-shadow.shp | Bin 0 -> 60 bytes mods/ra/rules/defaults.yaml | 1 + mods/ra/sequences/misc.yaml | 5 +++++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 mods/ra/bits/parach-shadow.shp diff --git a/OpenRA.Mods.RA/Effects/Parachute.cs b/OpenRA.Mods.RA/Effects/Parachute.cs index cf94fe6e18..3f86af57e6 100644 --- a/OpenRA.Mods.RA/Effects/Parachute.cs +++ b/OpenRA.Mods.RA/Effects/Parachute.cs @@ -20,6 +20,7 @@ namespace OpenRA.Mods.RA.Effects { readonly ParachutableInfo parachutableInfo; readonly Animation parachute; + readonly Animation shadow; readonly WVec parachuteOffset; readonly Actor cargo; WPos pos; @@ -37,6 +38,13 @@ namespace OpenRA.Mods.RA.Effects parachute.PlayThen("open", () => parachute.PlayRepeating("idle")); } + var shadowSprite = parachutableInfo != null ? parachutableInfo.ShadowSequence : null; + if (shadowSprite != null) + { + shadow = new Animation(cargo.World, shadowSprite); + shadow.PlayRepeating("idle"); + } + if (parachutableInfo != null) parachuteOffset = parachutableInfo.ParachuteOffset; @@ -51,6 +59,9 @@ namespace OpenRA.Mods.RA.Effects if (parachute != null) parachute.Tick(); + if (shadow != null) + shadow.Tick(); + pos -= fallRate; if (pos.Z <= 0) @@ -75,18 +86,23 @@ namespace OpenRA.Mods.RA.Effects if (!rc.Any()) yield break; - var shadow = wr.Palette(parachutableInfo.ParachuteShadowPalette); + var parachuteShadowPalette = wr.Palette(parachutableInfo.ParachuteShadowPalette); foreach (var c in rc) { - if (!c.IsDecoration) - yield return c.WithPalette(shadow).WithZOffset(c.ZOffset - 1).AsDecoration(); + if (!c.IsDecoration && shadow == null) + yield return c.WithPalette(parachuteShadowPalette).WithZOffset(c.ZOffset - 1).AsDecoration(); yield return c.OffsetBy(pos - c.Pos); } - var palette = !string.IsNullOrEmpty(parachutableInfo.ParachutePalette) ? wr.Palette(parachutableInfo.ParachutePalette) : rc.First().Palette; + var shadowPalette = !string.IsNullOrEmpty(parachutableInfo.ShadowPalette) ? wr.Palette(parachutableInfo.ShadowPalette) : rc.First().Palette; + if (shadow != null) + foreach (var r in shadow.Render(pos, parachuteOffset, 1, shadowPalette, 1f)) + yield return r; + + var parachutePalette = !string.IsNullOrEmpty(parachutableInfo.ParachutePalette) ? wr.Palette(parachutableInfo.ParachutePalette) : rc.First().Palette; if (parachute != null) - foreach (var r in parachute.Render(pos, parachuteOffset, 1, palette, 1f)) + foreach (var r in parachute.Render(pos, parachuteOffset, 1, parachutePalette, 1f)) yield return r; } } diff --git a/OpenRA.Mods.RA/Parachutable.cs b/OpenRA.Mods.RA/Parachutable.cs index e4d630d3f9..b8d0d39c44 100644 --- a/OpenRA.Mods.RA/Parachutable.cs +++ b/OpenRA.Mods.RA/Parachutable.cs @@ -28,10 +28,18 @@ namespace OpenRA.Mods.RA [Desc("Requires the sub-sequences \"open\" and \"idle\".")] public readonly string ParachuteSequence = null; + [Desc("Optional, otherwise defaults to the palette the actor is using.")] public readonly string ParachutePalette = null; + [Desc("Used to clone the actor with this palette and render it with a visual offset below.")] public readonly string ParachuteShadowPalette = "shadow"; + public readonly WVec ParachuteOffset = WVec.Zero; + [Desc("Alternative to ParachuteShadowPalette which disables it and allows to set a custom sprite sequence instead.")] + public readonly string ShadowSequence = null; + [Desc("Optional, otherwise defaults to the palette the actor is using.")] + public readonly string ShadowPalette = null; + public object Create(ActorInitializer init) { return new Parachutable(init, this); } } diff --git a/mods/ra/bits/parach-shadow.shp b/mods/ra/bits/parach-shadow.shp new file mode 100644 index 0000000000000000000000000000000000000000..7d848c88a424dfe29931843356f3ccd99a957af1 GIT binary patch literal 60 wcmZQ%00ABbHXv!kpvJ(^0OH$#2qf^2pMl{Y8v{!LmjmAkX$A+?e*!?20C|)K