Replace DelayedAction in Beacon effects with Tick-based solution

This commit is contained in:
reaperrr
2016-10-25 16:52:52 +02:00
parent 5635c61007
commit 101cc65876
2 changed files with 13 additions and 3 deletions

View File

@@ -30,9 +30,11 @@ namespace OpenRA.Mods.Common.Effects
readonly Animation circles;
readonly Animation poster;
readonly Animation clock;
readonly int duration;
int arrowHeight = MaxArrowHeight;
int arrowSpeed = 50;
int tick;
// Player-placed beacons are removed after a delay
public Beacon(Player owner, WPos position, int duration, string beaconPalette, bool isPlayerPalette, string beaconCollection, string arrowSprite, string circleSprite)
@@ -41,6 +43,7 @@ namespace OpenRA.Mods.Common.Effects
this.position = position;
this.beaconPalette = beaconPalette;
this.isPlayerPalette = isPlayerPalette;
this.duration = duration;
if (!string.IsNullOrEmpty(arrowSprite))
{
@@ -53,9 +56,6 @@ namespace OpenRA.Mods.Common.Effects
circles = new Animation(owner.World, beaconCollection);
circles.Play(circleSprite);
}
if (duration > 0)
owner.World.AddFrameEndTask(w => w.Add(new DelayedAction(duration, () => owner.World.Remove(this))));
}
// Support power beacons are expected to clean themselves up
@@ -96,6 +96,9 @@ namespace OpenRA.Mods.Common.Effects
if (clock != null)
clock.Tick();
if (duration > 0 && duration <= tick++)
owner.World.AddFrameEndTask(w => w.Remove(this));
}
IEnumerable<IRenderable> IEffect.Render(WorldRenderer r) { return SpriteRenderable.None; }

View File

@@ -25,6 +25,9 @@ namespace OpenRA.Mods.TS.Effects
readonly string beaconPalette;
readonly bool isPlayerPalette;
readonly Animation beacon;
readonly int duration;
int tick;
public AnimatedBeacon(Player owner, WPos position, int duration, string beaconPalette, bool isPlayerPalette, string beaconImage, string beaconSequence)
{
@@ -32,6 +35,7 @@ namespace OpenRA.Mods.TS.Effects
this.position = position;
this.beaconPalette = beaconPalette;
this.isPlayerPalette = isPlayerPalette;
this.duration = duration;
if (!string.IsNullOrEmpty(beaconSequence))
{
@@ -47,6 +51,9 @@ namespace OpenRA.Mods.TS.Effects
{
if (beacon != null)
beacon.Tick();
if (duration > 0 && duration <= tick++)
owner.World.AddFrameEndTask(w => w.Remove(this));
}
IEnumerable<IRenderable> IEffect.Render(WorldRenderer r) { return SpriteRenderable.None; }