diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index d5cb08f4d6..e2df0da12c 100755 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -24,15 +24,8 @@ namespace OpenRA.Mods.RA.Render { public readonly bool HasMakeAnimation = true; - [Desc("Artwork offset in world (not local) coordinates")] - public readonly WVec Origin = WVec.Zero; public override object Create(ActorInitializer init) { return new RenderBuilding(init, this);} - public override IEnumerable RenderPreview(ActorInfo building, PaletteReference pr) - { - return base.RenderPreview(building, pr).Select(a => a.WithPos(a.Pos + Origin)); - } - public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation) { if (!ai.Traits.Get().RequiresBaseProvider) @@ -45,16 +38,14 @@ namespace OpenRA.Mods.RA.Render public class RenderBuilding : RenderSimple, INotifyDamageStateChanged, IRenderModifier { - readonly RenderBuildingInfo Info; - - public RenderBuilding( ActorInitializer init, RenderBuildingInfo info ) + public RenderBuilding(ActorInitializer init, RenderBuildingInfo info) : this(init, info, () => 0) { } - public RenderBuilding( ActorInitializer init, RenderBuildingInfo info, Func baseFacing ) + public RenderBuilding(ActorInitializer init, RenderBuildingInfo info, Func baseFacing) : base(init.self, baseFacing) { - Info = info; var self = init.self; + // Work around a bogus crash anim.PlayRepeating( NormalizeSequence(self, "idle") ); self.Trait().QuantizedFacings = anim.CurrentSequence.Facings; @@ -71,18 +62,17 @@ namespace OpenRA.Mods.RA.Render var disabled = self.IsDisabled(); foreach (var a in r) { - var ret = a.WithPos(a.Pos + Info.Origin); - yield return ret; + yield return a; if (disabled) - yield return ret.WithPalette(wr.Palette("disabled")).WithZOffset(1); + yield return a.WithPalette(wr.Palette("disabled")).WithZOffset(1); } } - void Complete( Actor self ) + void Complete(Actor self) { - anim.PlayRepeating( NormalizeSequence(self, "idle") ); - foreach( var x in self.TraitsImplementing() ) - x.BuildingComplete( self ); + anim.PlayRepeating(NormalizeSequence(self, "idle")); + foreach (var x in self.TraitsImplementing()) + x.BuildingComplete(self); } public void PlayCustomAnimThen(Actor self, string name, Action a) @@ -94,7 +84,7 @@ namespace OpenRA.Mods.RA.Render public void PlayCustomAnimRepeating(Actor self, string name) { anim.PlayThen(NormalizeSequence(self, name), - () => { PlayCustomAnimRepeating(self, name); }); + () => PlayCustomAnimRepeating(self, name)); } public void PlayCustomAnimBackwards(Actor self, string name, Action a) @@ -105,15 +95,13 @@ namespace OpenRA.Mods.RA.Render public void CancelCustomAnim(Actor self) { - anim.PlayRepeating( NormalizeSequence(self, "idle") ); + anim.PlayRepeating(NormalizeSequence(self, "idle")); } public virtual void DamageStateChanged(Actor self, AttackInfo e) { - if (e.DamageState >= DamageState.Heavy && e.PreviousDamageState < DamageState.Heavy) - anim.ReplaceAnim("damaged-idle"); - else if (e.DamageState < DamageState.Heavy) - anim.ReplaceAnim("idle"); + if (anim.CurrentSequence != null) + anim.ReplaceAnim(NormalizeSequence(self, "idle")); } } } diff --git a/OpenRA.Mods.RA/Render/RenderBuildingSilo.cs b/OpenRA.Mods.RA/Render/RenderBuildingSilo.cs index 7281e53024..79f7c1e026 100755 --- a/OpenRA.Mods.RA/Render/RenderBuildingSilo.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingSilo.cs @@ -14,20 +14,17 @@ namespace OpenRA.Mods.RA.Render { class RenderBuildingSiloInfo : RenderBuildingInfo { - public readonly int FillSteps = 49; public override object Create(ActorInitializer init) { return new RenderBuildingSilo(init, this); } } class RenderBuildingSilo : RenderBuilding, INotifyBuildComplete, INotifyCapture { PlayerResources playerResources; - readonly RenderBuildingSiloInfo Info; public RenderBuildingSilo( ActorInitializer init, RenderBuildingSiloInfo info ) : base(init, info) { playerResources = init.self.Owner.PlayerActor.Trait(); - Info = info; } public void BuildingComplete(Actor self) @@ -35,7 +32,7 @@ namespace OpenRA.Mods.RA.Render var animation = (self.GetDamageState() >= DamageState.Heavy) ? "damaged-idle" : "idle"; anim.PlayFetchIndex(animation, () => playerResources.OreCapacity != 0 - ? (Info.FillSteps * playerResources.Ore) / (10 * playerResources.OreCapacity) + ? ((10 * anim.CurrentSequence.Length - 1) * playerResources.Ore) / (10 * playerResources.OreCapacity) : 0); } diff --git a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs index 087a9076da..a766115f47 100755 --- a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render var anim = new Animation(RenderSprites.GetImage(building), () => 0); anim.PlayRepeating("idle-top"); - yield return new SpriteRenderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f); + yield return new SpriteRenderable(anim.Image, WPos.Zero, 0, pr, 1f); } } diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index b43f0c4630..7b5720098f 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -168,7 +168,6 @@ Range: 4 -RenderBuilding: RenderBuildingSilo: - FillSteps: 39 StoresOre: PipColor: green PipCount: 5 diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 2312faf03f..4f42c92fe1 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -1009,7 +1009,6 @@ SILO: RevealsShroud: Range: 4 RenderBuildingSilo: - FillSteps: 89 StoresOre: PipCount: 5 Capacity: 1500