diff --git a/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs b/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs index 6a3d23ad31..fe48517623 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithSpriteTurret.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Traits } } - public class WithSpriteTurret : UpgradableTrait, ITick, INotifyDamageStateChanged + public class WithSpriteTurret : UpgradableTrait, INotifyBuildComplete, INotifySold, INotifyTransform, ITick, INotifyDamageStateChanged { public readonly Animation DefaultAnimation; protected readonly AttackBase Attack; @@ -65,6 +65,9 @@ namespace OpenRA.Mods.Common.Traits readonly Turreted t; readonly Armament[] arms; + // TODO: This should go away once https://github.com/OpenRA/OpenRA/issues/7035 is implemented + bool buildComplete; + public WithSpriteTurret(Actor self, WithSpriteTurretInfo info) : base(info) { @@ -75,11 +78,14 @@ namespace OpenRA.Mods.Common.Traits .First(tt => tt.Name == info.Turret); arms = self.TraitsImplementing() .Where(w => w.Info.Turret == info.Turret).ToArray(); + buildComplete = !self.Info.HasTraitInfo(); // always render instantly for units DefaultAnimation = new Animation(self.World, rs.GetImage(self), () => t.TurretFacing); DefaultAnimation.PlayRepeating(NormalizeSequence(self, info.Sequence)); - rs.Add(new AnimationWithOffset( - DefaultAnimation, () => TurretOffset(self), () => IsTraitDisabled, p => RenderUtils.ZOffsetFromCenter(self, p, 1))); + rs.Add(new AnimationWithOffset(DefaultAnimation, + () => TurretOffset(self), + () => IsTraitDisabled || !buildComplete, + p => RenderUtils.ZOffsetFromCenter(self, p, 1))); // Restrict turret facings to match the sprite t.QuantizedFacings = DefaultAnimation.CurrentSequence.Facings; @@ -116,5 +122,12 @@ namespace OpenRA.Mods.Common.Traits var sequence = Attack.IsAttacking ? Info.AimSequence : Info.Sequence; DefaultAnimation.ReplaceAnim(sequence); } + + void INotifyBuildComplete.BuildingComplete(Actor self) { buildComplete = true; } + void INotifySold.Selling(Actor self) { buildComplete = false; } + void INotifySold.Sold(Actor self) { } + void INotifyTransform.BeforeTransform(Actor self) { buildComplete = false; } + void INotifyTransform.OnTransform(Actor self) { } + void INotifyTransform.AfterTransform(Actor toActor) { } } } diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index ba26ddd6c3..ec497ac44f 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -293,7 +293,6 @@ AutoTarget: RenderRangeCircle: -GivesBuildableArea: - -WithCrumbleOverlay: -WithMakeAnimation: -WithSpriteBody: WithWallSpriteBody: diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 9b05d56556..5f651538b6 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -30,6 +30,14 @@ medium_gun_turret: Frames: 2621, 2624, 2622, 2632, 2625, 2626, 2636, 2629, 2623, 2633, 2627, 2628, 2634, 2630, 2631, 2635 Length: 16 Offset: -24,16 + make: DATA.R8 #TODO: unused, enabling WMA currently breaks turrets (bleed 20151214) + Start: 4313 + Length: 8 + Offset: -16,16 + crumble-overlay: DATA.R8 + Start: 4321 + Length: 7 + Offset: -16,16 turret: DATA.R8 Start: 2589 Facings: -32 @@ -53,6 +61,14 @@ large_gun_turret: Frames: 2621, 2624, 2622, 2632, 2625, 2626, 2636, 2629, 2623, 2633, 2627, 2628, 2634, 2630, 2631, 2635 Length: 16 Offset: -24,16 + make: DATA.R8 #TODO: unused, enabling WMA currently breaks turrets (bleed 20151214) + Start: 4313 + Length: 8 + Offset: -16,16 + crumble-overlay: DATA.R8 + Start: 4321 + Length: 7 + Offset: -16,16 turret: DATA.R8 Start: 2637 Facings: -32