make the parachute animation optional

instead of hard-coding default sprite sequences
This commit is contained in:
Matthias Mailänder
2014-06-22 15:34:52 +02:00
parent ff1be8daea
commit ef01fb289b
6 changed files with 22 additions and 8 deletions

View File

@@ -18,7 +18,7 @@ namespace OpenRA.Mods.RA.Effects
{ {
public class Parachute : IEffect public class Parachute : IEffect
{ {
readonly Animation paraAnim; readonly Animation parachute;
readonly WVec parachuteOffset; readonly WVec parachuteOffset;
readonly Actor cargo; readonly Actor cargo;
WPos pos; WPos pos;
@@ -29,9 +29,12 @@ namespace OpenRA.Mods.RA.Effects
this.cargo = cargo; this.cargo = cargo;
var parachutableInfo = cargo.Info.Traits.GetOrDefault<ParachutableInfo>(); var parachutableInfo = cargo.Info.Traits.GetOrDefault<ParachutableInfo>();
var sprite = parachutableInfo != null ? parachutableInfo.ParachuteSprite : "parach"; var parachuteSprite = parachutableInfo != null ? parachutableInfo.ParachuteSequence : null;
paraAnim = new Animation(cargo.World, sprite); if (parachuteSprite != null)
paraAnim.PlayThen("open", () => paraAnim.PlayRepeating("idle")); {
parachute = new Animation(cargo.World, parachuteSprite);
parachute.PlayThen("open", () => parachute.PlayRepeating("idle"));
}
if (parachutableInfo != null) if (parachutableInfo != null)
parachuteOffset = parachutableInfo.ParachuteOffset; parachuteOffset = parachutableInfo.ParachuteOffset;
@@ -44,7 +47,8 @@ namespace OpenRA.Mods.RA.Effects
public void Tick(World world) public void Tick(World world)
{ {
paraAnim.Tick(); if (parachute != null)
parachute.Tick();
pos -= fallRate; pos -= fallRate;
@@ -79,8 +83,9 @@ namespace OpenRA.Mods.RA.Effects
yield return c.OffsetBy(pos - c.Pos); yield return c.OffsetBy(pos - c.Pos);
} }
foreach (var r in paraAnim.Render(pos, parachuteOffset, 1, rc.First().Palette, 1f)) if (parachute != null)
yield return r; foreach (var r in parachute.Render(pos, parachuteOffset, 1, rc.First().Palette, 1f))
yield return r;
} }
} }
} }

View File

@@ -26,7 +26,8 @@ namespace OpenRA.Mods.RA
public readonly string WaterCorpseSequence = "small_splash"; public readonly string WaterCorpseSequence = "small_splash";
public readonly string WaterCorpsePalette = "effect"; public readonly string WaterCorpsePalette = "effect";
public readonly string ParachuteSprite = "parach"; [Desc("Requires the sub-sequences \"open\" and \"idle\".")]
public readonly string ParachuteSequence = null;
public readonly WVec ParachuteOffset = WVec.Zero; public readonly WVec ParachuteOffset = WVec.Zero;
public object Create(ActorInitializer init) { return new Parachutable(init, this); } public object Create(ActorInitializer init) { return new Parachutable(init, this); }

View File

@@ -263,6 +263,9 @@ namespace OpenRA.Utility
if (subnode.Key == "Offset") if (subnode.Key == "Offset")
subnode.Key = "ParachuteOffset"; subnode.Key = "ParachuteOffset";
} }
if (depth == 2 && node.Key == "ParachuteSprite")
node.Key = "ParachuteSequence";
} }
UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1);

Binary file not shown.

View File

@@ -177,6 +177,8 @@
InfDeaths: 6 InfDeaths: 6
Parachutable: Parachutable:
ParachuteOffset: 0,0,427 ParachuteOffset: 0,0,427
KilledOnImpassableTerrain: true
ParachuteSequence: parach
^Ship: ^Ship:
AppearsOnRadar: AppearsOnRadar:

View File

@@ -60,6 +60,9 @@ CRATE:
Crate: Crate:
Lifetime: 120 Lifetime: 120
TerrainTypes: Clear, Rough, Road, Water, Ore, Beach TerrainTypes: Clear, Rough, Road, Water, Ore, Beach
Parachutable:
KilledOnImpassableTerrain: false
ParachuteSequence: parach
GiveCashCrateAction: GiveCashCrateAction:
Amount: 1000 Amount: 1000
SelectionShares: 50 SelectionShares: 50