diff --git a/OpenRA.Game/Graphics/Renderable.cs b/OpenRA.Game/Graphics/Renderable.cs index c6b7db4e0c..5d4c85396f 100644 --- a/OpenRA.Game/Graphics/Renderable.cs +++ b/OpenRA.Game/Graphics/Renderable.cs @@ -44,14 +44,8 @@ namespace OpenRA.Graphics Scale = scale; } - public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, int zOffset, float scale) - : this(sprite, new PPos((int)pos.X, (int)pos.Y).ToWPos(0), z + zOffset, palette, scale) { } - public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z) - : this(sprite, pos, palette, z, 0, 1f) { } - - public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, float scale) - : this(sprite, pos, palette, z, 0, scale) { } + : this(sprite, new PPos((int)pos.X, (int)pos.Y).ToWPos(0), z, palette, 1f) { } public Renderable WithScale(float newScale) { return new Renderable(Sprite, Pos, ZOffset, Palette, newScale); } public Renderable WithPalette(PaletteReference newPalette) { return new Renderable(Sprite, Pos, ZOffset, newPalette, Scale); } diff --git a/OpenRA.Game/Traits/Render/RenderSimple.cs b/OpenRA.Game/Traits/Render/RenderSimple.cs index 0e1d1acd06..f470569007 100755 --- a/OpenRA.Game/Traits/Render/RenderSimple.cs +++ b/OpenRA.Game/Traits/Render/RenderSimple.cs @@ -39,7 +39,7 @@ namespace OpenRA.Traits var anim = new Animation(RenderSimple.GetImage(ai), () => 0); anim.PlayRepeating("idle"); - yield return new Renderable(anim.Image, 0.5f*anim.Image.size, pr, 0, Scale); + yield return new Renderable(anim.Image, WPos.Zero, 0, pr, 1f); } } diff --git a/OpenRA.Mods.RA/Buildings/FootprintUtils.cs b/OpenRA.Mods.RA/Buildings/FootprintUtils.cs index 6808cbf94d..cddc6ac7c2 100755 --- a/OpenRA.Mods.RA/Buildings/FootprintUtils.cs +++ b/OpenRA.Mods.RA/Buildings/FootprintUtils.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenRA.FileFormats; namespace OpenRA.Mods.RA.Buildings { @@ -55,10 +56,16 @@ namespace OpenRA.Mods.RA.Buildings yield return new CVec(x, y); } - public static CVec AdjustForBuildingSize( BuildingInfo buildingInfo ) + public static CVec AdjustForBuildingSize(BuildingInfo buildingInfo) { var dim = buildingInfo.Dimensions; return new CVec(dim.X / 2, dim.Y > 1 ? (dim.Y + 1) / 2 : 0); } + + public static WVec CenterOffset(BuildingInfo buildingInfo) + { + var dim = buildingInfo.Dimensions; + return new CVec(dim.X, dim.Y).ToWVec() / 2; + } } } diff --git a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs index 88cd1e784f..3f784b10aa 100755 --- a/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.RA/Orders/PlaceBuildingOrderGenerator.cs @@ -98,8 +98,9 @@ namespace OpenRA.Mods.RA.Orders initialized = true; } + var offset = (topLeft - CPos.Zero).ToWVec() + FootprintUtils.CenterOffset(BuildingInfo); foreach (var r in preview) - r.WithPxOffset(topLeft.ToPPos().ToFloat2()).Render(wr); + r.WithPos(r.Pos + offset).Render(wr); var res = world.WorldActor.Trait(); var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft); diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index c11119508e..1836c86d02 100755 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -11,6 +11,7 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenRA.FileFormats; using OpenRA.Graphics; using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Effects; @@ -22,13 +23,14 @@ namespace OpenRA.Mods.RA.Render public class RenderBuildingInfo : RenderSimpleInfo, Requires, IPlaceBuildingDecoration { public readonly bool HasMakeAnimation = true; - public readonly float2 Origin = float2.Zero; + + [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) { - var origin = building.Traits.Get().Origin; - return base.RenderPreview(building, pr).Select(a => a.WithPxOffset(origin)); + return base.RenderPreview(building, pr).Select(a => a.WithPos(a.Pos + Origin)); } public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation) @@ -68,7 +70,7 @@ namespace OpenRA.Mods.RA.Render var disabled = self.IsDisabled(); foreach (var a in r) { - var ret = a.WithPxOffset(-Info.Origin); + var ret = a.WithPos(a.Pos + Info.Origin); yield return ret; if (disabled) yield return ret.WithPalette(wr.Palette("disabled")).WithZOffset(1); diff --git a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs index 708cec7d14..ea901b8d9d 100755 --- a/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingWarFactory.cs @@ -33,8 +33,7 @@ namespace OpenRA.Mods.RA.Render var anim = new Animation(RenderSimple.GetImage(building), () => 0); anim.PlayRepeating("idle-top"); - var rb = building.Traits.Get(); - yield return new Renderable(anim.Image, 0.5f*anim.Image.size + rb.Origin, pr, 0, Scale); + yield return new Renderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f); } }