Add LaunchEffect support to LaserZap

Can act as replacement for WithMuzzleOverlay.
This commit is contained in:
reaperrr
2017-07-06 20:34:32 +02:00
committed by Matthias Mailänder
parent 384aaf14b5
commit f85f2cd104

View File

@@ -81,6 +81,15 @@ namespace OpenRA.Mods.Common.Projectiles
[PaletteReference] public readonly string HitAnimPalette = "effect"; [PaletteReference] public readonly string HitAnimPalette = "effect";
[Desc("Image containing launch effect sequence.")]
public readonly string LaunchEffectImage = null;
[Desc("Launch effect sequence to play.")]
[SequenceReference("LaunchEffectImage")] public readonly string LaunchEffectSequence = null;
[Desc("Palette to use for launch effect.")]
[PaletteReference] public readonly string LaunchEffectPalette = "effect";
public IProjectile Create(ProjectileArgs args) public IProjectile Create(ProjectileArgs args)
{ {
var c = UsePlayerColor ? args.SourceActor.Owner.Color.RGB : Color; var c = UsePlayerColor ? args.SourceActor.Owner.Color.RGB : Color;
@@ -98,6 +107,7 @@ namespace OpenRA.Mods.Common.Projectiles
int ticks = 0; int ticks = 0;
int interval; int interval;
bool showHitAnim; bool showHitAnim;
bool hasLaunchEffect;
[Sync] WPos target; [Sync] WPos target;
[Sync] WPos source; [Sync] WPos source;
@@ -122,12 +132,18 @@ namespace OpenRA.Mods.Common.Projectiles
hitanim = new Animation(args.SourceActor.World, info.HitAnim); hitanim = new Animation(args.SourceActor.World, info.HitAnim);
showHitAnim = true; showHitAnim = true;
} }
hasLaunchEffect = !string.IsNullOrEmpty(info.LaunchEffectImage) && !string.IsNullOrEmpty(info.LaunchEffectSequence);
} }
public void Tick(World world) public void Tick(World world)
{ {
source = args.CurrentSource(); source = args.CurrentSource();
if (hasLaunchEffect && ticks == 0)
world.AddFrameEndTask(w => w.Add(new LaunchEffect(world, args.CurrentSource, () => 0,
info.LaunchEffectImage, info.LaunchEffectSequence, info.LaunchEffectPalette)));
// Beam tracks target // Beam tracks target
if (info.TrackTarget && args.GuidedTarget.IsValidFor(args.SourceActor)) if (info.TrackTarget && args.GuidedTarget.IsValidFor(args.SourceActor))
target = args.Weapon.TargetActorCenter ? args.GuidedTarget.CenterPosition : args.GuidedTarget.Positions.PositionClosestTo(source); target = args.Weapon.TargetActorCenter ? args.GuidedTarget.CenterPosition : args.GuidedTarget.Positions.PositionClosestTo(source);