make the parachute animation optional
instead of hard-coding default sprite sequences
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|||||||
@@ -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.
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user