add a customizable parachute shadow

closes #3335
This commit is contained in:
Matthias Mailänder
2014-07-01 21:21:09 +02:00
parent 18a77e0039
commit 4a7687d7e4
5 changed files with 35 additions and 5 deletions

View File

@@ -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;
}
}

View File

@@ -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); }
}

Binary file not shown.

View File

@@ -179,6 +179,7 @@
ParachuteOffset: 0,0,427
KilledOnImpassableTerrain: true
ParachuteSequence: parach
ShadowSequence: parach-shadow
^Ship:
AppearsOnRadar:

View File

@@ -370,6 +370,11 @@ parach:
Start: 5
Length: 11
parach-shadow:
idle:
Start: 0
Length: *
atomicup:
idle:
Start: 0