Add DamageDuration and DamageInterval to LaserZap
This commit is contained in:
committed by
Matthias Mailänder
parent
f4d3ccc301
commit
0fafaf1b09
@@ -33,8 +33,15 @@ namespace OpenRA.Mods.Common.Projectiles
|
|||||||
[Desc("Equivalent to sequence ZOffset. Controls Z sorting.")]
|
[Desc("Equivalent to sequence ZOffset. Controls Z sorting.")]
|
||||||
public readonly int ZOffset = 0;
|
public readonly int ZOffset = 0;
|
||||||
|
|
||||||
|
[Desc("The maximum duration (in ticks) of the beam's existence.")]
|
||||||
public readonly int Duration = 10;
|
public readonly int Duration = 10;
|
||||||
|
|
||||||
|
[Desc("Total time-frame in ticks that the beam deals damage every DamageInterval.")]
|
||||||
|
public readonly int DamageDuration = 1;
|
||||||
|
|
||||||
|
[Desc("The number of ticks between the beam causing warhead impacts in its area of effect.")]
|
||||||
|
public readonly int DamageInterval = 1;
|
||||||
|
|
||||||
public readonly bool UsePlayerColor = false;
|
public readonly bool UsePlayerColor = false;
|
||||||
|
|
||||||
[Desc("Color of the beam.")]
|
[Desc("Color of the beam.")]
|
||||||
@@ -89,8 +96,8 @@ namespace OpenRA.Mods.Common.Projectiles
|
|||||||
readonly Color color;
|
readonly Color color;
|
||||||
readonly Color secondaryColor;
|
readonly Color secondaryColor;
|
||||||
int ticks = 0;
|
int ticks = 0;
|
||||||
bool doneDamage;
|
int interval;
|
||||||
bool animationComplete;
|
bool showHitAnim;
|
||||||
[Sync] WPos target;
|
[Sync] WPos target;
|
||||||
[Sync] WPos source;
|
[Sync] WPos source;
|
||||||
|
|
||||||
@@ -111,7 +118,10 @@ namespace OpenRA.Mods.Common.Projectiles
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(info.HitAnim))
|
if (!string.IsNullOrEmpty(info.HitAnim))
|
||||||
|
{
|
||||||
hitanim = new Animation(args.SourceActor.World, info.HitAnim);
|
hitanim = new Animation(args.SourceActor.World, info.HitAnim);
|
||||||
|
showHitAnim = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Tick(World world)
|
public void Tick(World world)
|
||||||
@@ -128,21 +138,21 @@ namespace OpenRA.Mods.Common.Projectiles
|
|||||||
target = blockedPos;
|
target = blockedPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!doneDamage)
|
if (ticks < info.DamageDuration && --interval <= 0)
|
||||||
{
|
{
|
||||||
if (hitanim != null)
|
|
||||||
hitanim.PlayThen(info.HitAnimSequence, () => animationComplete = true);
|
|
||||||
else
|
|
||||||
animationComplete = true;
|
|
||||||
|
|
||||||
args.Weapon.Impact(Target.FromPos(target), args.SourceActor, args.DamageModifiers);
|
args.Weapon.Impact(Target.FromPos(target), args.SourceActor, args.DamageModifiers);
|
||||||
doneDamage = true;
|
interval = info.DamageInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hitanim != null)
|
if (showHitAnim)
|
||||||
hitanim.Tick();
|
{
|
||||||
|
if (ticks == 0)
|
||||||
|
hitanim.PlayThen(info.HitAnimSequence, () => showHitAnim = false);
|
||||||
|
|
||||||
if (++ticks >= info.Duration && animationComplete)
|
hitanim.Tick();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++ticks >= info.Duration && !showHitAnim)
|
||||||
world.AddFrameEndTask(w => w.Remove(this));
|
world.AddFrameEndTask(w => w.Remove(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,7 +175,7 @@ namespace OpenRA.Mods.Common.Projectiles
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hitanim != null)
|
if (showHitAnim)
|
||||||
foreach (var r in hitanim.Render(target, wr.Palette(info.HitAnimPalette)))
|
foreach (var r in hitanim.Render(target, wr.Palette(info.HitAnimPalette)))
|
||||||
yield return r;
|
yield return r;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user