diff --git a/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs index 5aa8ead915..5b16073e17 100644 --- a/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs +++ b/OpenRA.Mods.D2k/Traits/Render/WithCrumbleOverlay.cs @@ -35,21 +35,34 @@ namespace OpenRA.Mods.D2k.Traits.Render public class WithCrumbleOverlay : ConditionalTrait { + readonly WithCrumbleOverlayInfo info; + readonly RenderSprites renderSprites; + readonly Animation overlay; + readonly AnimationWithOffset animation; + public WithCrumbleOverlay(ActorInitializer init, WithCrumbleOverlayInfo info) : base(info) { + this.info = info; + if (init.Contains()) return; - var rs = init.Self.Trait(); + renderSprites = init.Self.Trait(); - var overlay = new Animation(init.World, rs.GetImage(init.Self)); - var anim = new AnimationWithOffset(overlay, null, () => IsTraitDisabled); + overlay = new Animation(init.World, renderSprites.GetImage(init.Self)); + animation = new AnimationWithOffset(overlay, null, () => IsTraitDisabled); + } + + protected override void TraitEnabled(Actor self) + { + if (overlay == null) + return; + + renderSprites.Add(animation, info.Palette, info.IsPlayerPalette); // Remove the animation once it is complete - overlay.PlayThen(info.Sequence, () => init.World.AddFrameEndTask(w => rs.Remove(anim))); - - rs.Add(anim, info.Palette, info.IsPlayerPalette); + overlay.PlayThen(info.Sequence, () => self.World.AddFrameEndTask(w => renderSprites.Remove(animation))); } } } diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index b3726fafdc..74b5f1d5b3 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -454,7 +454,6 @@ -GivesBuildableArea: WithMakeAnimation: BodyNames: make - -WithCrumbleOverlay: -Capturable: WithSpriteBody: Name: make diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 1fac1192b7..a14de7de49 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -38,9 +38,11 @@ medium_gun_turret: Offset: -16,16 ZOffset: 1024 crumble-overlay: DATA.R8 - Start: 4585 + Start: 4584 Length: 7 Offset: -16,16 + Tick: 200 + ZOffset: 1024 turret: DATA.R8 Start: 2837 Facings: -32 @@ -72,9 +74,11 @@ large_gun_turret: Offset: -16,16 ZOffset: 1024 crumble-overlay: DATA.R8 - Start: 4585 + Start: 4584 Length: 7 Offset: -16,16 + Tick: 200 + ZOffset: 1024 turret: DATA.R8 Start: 2885 Facings: -32