Convert building rendering to world coordinates.
This commit is contained in:
@@ -44,14 +44,8 @@ namespace OpenRA.Graphics
|
|||||||
Scale = scale;
|
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)
|
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z)
|
||||||
: this(sprite, pos, palette, z, 0, 1f) { }
|
: this(sprite, new PPos((int)pos.X, (int)pos.Y).ToWPos(0), z, palette, 1f) { }
|
||||||
|
|
||||||
public Renderable(Sprite sprite, float2 pos, PaletteReference palette, int z, float scale)
|
|
||||||
: this(sprite, pos, palette, z, 0, scale) { }
|
|
||||||
|
|
||||||
public Renderable WithScale(float newScale) { return new Renderable(Sprite, Pos, ZOffset, Palette, newScale); }
|
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); }
|
public Renderable WithPalette(PaletteReference newPalette) { return new Renderable(Sprite, Pos, ZOffset, newPalette, Scale); }
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace OpenRA.Traits
|
|||||||
var anim = new Animation(RenderSimple.GetImage(ai), () => 0);
|
var anim = new Animation(RenderSimple.GetImage(ai), () => 0);
|
||||||
anim.PlayRepeating("idle");
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.FileFormats;
|
||||||
|
|
||||||
namespace OpenRA.Mods.RA.Buildings
|
namespace OpenRA.Mods.RA.Buildings
|
||||||
{
|
{
|
||||||
@@ -60,5 +61,11 @@ namespace OpenRA.Mods.RA.Buildings
|
|||||||
var dim = buildingInfo.Dimensions;
|
var dim = buildingInfo.Dimensions;
|
||||||
return new CVec(dim.X / 2, dim.Y > 1 ? (dim.Y + 1) / 2 : 0);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,8 +98,9 @@ namespace OpenRA.Mods.RA.Orders
|
|||||||
initialized = true;
|
initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var offset = (topLeft - CPos.Zero).ToWVec() + FootprintUtils.CenterOffset(BuildingInfo);
|
||||||
foreach (var r in preview)
|
foreach (var r in preview)
|
||||||
r.WithPxOffset(topLeft.ToPPos().ToFloat2()).Render(wr);
|
r.WithPos(r.Pos + offset).Render(wr);
|
||||||
|
|
||||||
var res = world.WorldActor.Trait<ResourceLayer>();
|
var res = world.WorldActor.Trait<ResourceLayer>();
|
||||||
var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft);
|
var isCloseEnough = BuildingInfo.IsCloseEnoughToBase(world, world.LocalPlayer, Building, topLeft);
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using OpenRA.FileFormats;
|
||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Mods.RA.Buildings;
|
using OpenRA.Mods.RA.Buildings;
|
||||||
using OpenRA.Mods.RA.Effects;
|
using OpenRA.Mods.RA.Effects;
|
||||||
@@ -22,13 +23,14 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
public class RenderBuildingInfo : RenderSimpleInfo, Requires<BuildingInfo>, IPlaceBuildingDecoration
|
public class RenderBuildingInfo : RenderSimpleInfo, Requires<BuildingInfo>, IPlaceBuildingDecoration
|
||||||
{
|
{
|
||||||
public readonly bool HasMakeAnimation = true;
|
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 object Create(ActorInitializer init) { return new RenderBuilding(init, this);}
|
||||||
|
|
||||||
public override IEnumerable<Renderable> RenderPreview(ActorInfo building, PaletteReference pr)
|
public override IEnumerable<Renderable> RenderPreview(ActorInfo building, PaletteReference pr)
|
||||||
{
|
{
|
||||||
var origin = building.Traits.Get<RenderBuildingInfo>().Origin;
|
return base.RenderPreview(building, pr).Select(a => a.WithPos(a.Pos + Origin));
|
||||||
return base.RenderPreview(building, pr).Select(a => a.WithPxOffset(origin));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation)
|
public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation)
|
||||||
@@ -68,7 +70,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
var disabled = self.IsDisabled();
|
var disabled = self.IsDisabled();
|
||||||
foreach (var a in r)
|
foreach (var a in r)
|
||||||
{
|
{
|
||||||
var ret = a.WithPxOffset(-Info.Origin);
|
var ret = a.WithPos(a.Pos + Info.Origin);
|
||||||
yield return ret;
|
yield return ret;
|
||||||
if (disabled)
|
if (disabled)
|
||||||
yield return ret.WithPalette(wr.Palette("disabled")).WithZOffset(1);
|
yield return ret.WithPalette(wr.Palette("disabled")).WithZOffset(1);
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ namespace OpenRA.Mods.RA.Render
|
|||||||
|
|
||||||
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
|
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
|
||||||
anim.PlayRepeating("idle-top");
|
anim.PlayRepeating("idle-top");
|
||||||
var rb = building.Traits.Get<RenderBuildingInfo>();
|
yield return new Renderable(anim.Image, WPos.Zero + Origin, 0, pr, 1f);
|
||||||
yield return new Renderable(anim.Image, 0.5f*anim.Image.size + rb.Origin, pr, 0, Scale);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user