Change Renderable to take centered positions.

This commit is contained in:
Paul Chote
2013-05-12 17:32:37 +12:00
parent d103a187f6
commit d878c96343
23 changed files with 41 additions and 41 deletions

View File

@@ -40,10 +40,11 @@ namespace OpenRA.Graphics
public Renderable Image(Actor self, WorldRenderer wr, PaletteReference pal, float scale)
{
var p = self.CenterLocation;
var loc = p.ToFloat2() - 0.5f * scale * Animation.Image.size
+ (OffsetFunc != null ? OffsetFunc(wr) : float2.Zero);
var offset = p.ToFloat2();
if (OffsetFunc != null)
offset += OffsetFunc(wr);
return new Renderable(Animation.Image, loc, pal, p.Y, ZOffset, scale);
return new Renderable(Animation.Image, offset, pal, p.Y, ZOffset, scale);
}
public static implicit operator AnimationWithOffset(Animation a)

View File

@@ -56,7 +56,7 @@ namespace OpenRA.Graphics
public void Render(WorldRenderer wr)
{
Sprite.DrawAt(Pos, Palette.Index, Scale);
Sprite.DrawAt(Pos - 0.5f*Scale*Sprite.size, Palette.Index, Scale);
}
public Size Size

View File

@@ -30,15 +30,16 @@ namespace OpenRA.Traits
[Desc("Number of facings for gameplay calculations. -1 indiciates auto-detection from sequence")]
public readonly int QuantizedFacings = -1;
[Desc("Camera pitch the sprite was rendered with. Used to determine rotation ellipses")]
public readonly WAngle CameraPitch = WAngle.FromDegrees(40);
public virtual object Create(ActorInitializer init) { return new RenderSimple(init.self); }
public virtual IEnumerable<Renderable> RenderPreview(ActorInfo building, PaletteReference pr)
public virtual IEnumerable<Renderable> RenderPreview(ActorInfo ai, PaletteReference pr)
{
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
var anim = new Animation(RenderSimple.GetImage(ai), () => 0);
anim.PlayRepeating("idle");
yield return new Renderable(anim.Image, 0.5f * anim.Image.size * (1 - Scale), pr, 0, Scale);
yield return new Renderable(anim.Image, 0.5f*anim.Image.size, pr, 0, Scale);
}
}

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.Cnc.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image,
target.CenterLocation.ToFloat2() - new float2(.5f * anim.Image.size.X, anim.Image.size.Y - Game.CellSize),
target.CenterLocation.ToFloat2() - new float2(0, 0.5f*anim.Image.size.Y - Game.CellSize),
wr.Palette("effect"), (int)target.CenterLocation.Y);
}

View File

@@ -151,7 +151,7 @@ namespace OpenRA.Mods.RA
}
foreach (var t in TileSprites[currentTemplate])
yield return new Renderable(t.Value, t.Key.ToPPos().ToFloat2(), terrainPalette, Game.CellSize * t.Key.Y);
yield return new Renderable(t.Value, Traits.Util.CenterOfCell(t.Key).ToFloat2(), terrainPalette, Game.CellSize * t.Key.Y);
}
void KillUnitsOnBridge()

View File

@@ -166,14 +166,14 @@ namespace OpenRA.Mods.RA.Effects
if (Info.High || Info.Angle > 0)
{
if (Info.Shadow)
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, wr.Palette("shadow"), (int)pos.Y);
yield return new Renderable(anim.Image, pos, wr.Palette("shadow"), (int)pos.Y);
var highPos = pos - new float2(0, GetAltitude());
yield return new Renderable(anim.Image, highPos - .5f * anim.Image.size, wr.Palette("effect"), (int)pos.Y);
yield return new Renderable(anim.Image, highPos, wr.Palette("effect"), (int)pos.Y);
}
else
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size,
yield return new Renderable(anim.Image, pos,
wr.Palette(Args.weapon.Underwater ? "shadow" : "effect"), (int)pos.Y);
}
}

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image, pos - .5f * anim.Image.size, wr.Palette(paletteName), (int)pos.Y);
yield return new Renderable(anim.Image, pos, wr.Palette(paletteName), (int)pos.Y);
}
}
}

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA.Effects
{
if (a.IsInWorld)
yield return new Renderable(anim.Image,
a.CenterLocation.ToFloat2() - .5f * anim.Image.size + offset,
a.CenterLocation.ToFloat2() + offset,
wr.Palette("effect"), (int)a.CenterLocation.Y);
}
}

View File

@@ -34,9 +34,8 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image,
pos.ToFloat2() - .5f * anim.Image.size - new int2(0,altitude),
wr.Palette("effect"), (int)pos.Y - altitude);
var p = pos.ToInt2() - new int2(0, altitude);
yield return new Renderable(anim.Image, p, wr.Palette("effect"), p.Y);
}
public Player Owner { get { return null; } }

View File

@@ -84,7 +84,7 @@ namespace OpenRA.Mods.RA.Effects
var p = self.CenterLocation;
var palette = wr.Palette(info.IndicatorPalettePrefix+self.Owner.InternalName);
yield return new Renderable(anim.Image, p.ToFloat2() - 0.5f * anim.Image.size, palette, p.Y)
yield return new Renderable(anim.Image, p.ToFloat2(), palette, p.Y)
.WithScale(1.5f);
}
}

View File

@@ -38,7 +38,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image,offset, wr.Palette("effect"), (int)offset.Y);
yield return new Renderable(anim.Image, offset, wr.Palette("effect"), (int)offset.Y);
}
}
}

View File

@@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
if (explosion != null)
yield return new Renderable(explosion.Image, args.dest.ToFloat2() - .5f * explosion.Image.size,
yield return new Renderable(explosion.Image, args.dest.ToFloat2(),
wr.Palette("effect"), (int)args.dest.Y);
if (ticks >= info.BeamDuration)

View File

@@ -177,7 +177,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
if (!Args.firedBy.World.FogObscures(PxPosition.ToCPos()))
yield return new Renderable(anim.Image, PxPosition.ToFloat2() - 0.5f * anim.Image.size - new float2(0, Altitude),
yield return new Renderable(anim.Image, PxPosition.ToFloat2() - new float2(0, Altitude),
wr.Palette(Args.weapon.Underwater ? "shadow" : "effect"), PxPosition.Y);
if (Trail != null)

View File

@@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image, pos.ToFloat2() - 0.5f * anim.Image.size - new float2(0, altitude),
yield return new Renderable(anim.Image, pos.ToFloat2() - new float2(0, altitude),
wr.Palette("effect"), (int)pos.Y);
}
}

View File

@@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA.Effects
}
var pos = location.ToFloat2() - new float2(0, altitude);
yield return new Renderable(paraAnim.Image, pos - .5f * paraAnim.Image.size + offset, rc.First().Palette, 3);
yield return new Renderable(paraAnim.Image, pos + offset, rc.First().Palette, 3);
}
}
}

View File

@@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
if (!a.Destroyed && a.Owner.IsAlliedWith(a.World.RenderPlayer))
yield return new Renderable(anim.Image, a.CenterLocation.ToFloat2() - .5f * anim.Image.size,
yield return new Renderable(anim.Image, a.CenterLocation.ToFloat2(),
wr.Palette("chrome"), (int)a.CenterLocation.Y);
}
}

View File

@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Effects
if (!building.Destroyed)
{
yield return new Renderable(anim.Image,
building.CenterLocation.ToFloat2() - .5f * anim.Image.size,
building.CenterLocation.ToFloat2(),
wr.Palette(palettePrefix+player.InternalName), (int)building.CenterLocation.Y);
}
}

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Mods.RA.Effects
doors.PlayThen("active",
() => a.World.AddFrameEndTask(w => w.Remove(this)));
pos = a.CenterLocation.ToFloat2() - .5f * doors.Image.size + doorOffset;
pos = a.CenterLocation.ToFloat2() + doorOffset;
}
public void Tick( World world )

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Effects
public IEnumerable<Renderable> Render(WorldRenderer wr)
{
yield return new Renderable(anim.Image, pos.ToFloat2() - .5f * anim.Image.size,
yield return new Renderable(anim.Image, pos.ToFloat2(),
wr.Palette("effect"), (int)pos.Y);
}
}

View File

@@ -137,14 +137,14 @@ namespace OpenRA.Mods.RA.Effects
static int[][] steps = new []
{
new int[] { 8, 8, -8, -8, 0 },
new int[] { -8, -8, -16, -16, 0 },
new int[] { 8, 0, -8, -8, 1 },
new int[] { -8, 0, -16, -8, 1 },
new int[] { 0, 8, -8, -8, 2 },
new int[] { 0, -8, -8, -16, 2 },
new int[] { -8, 8, -16, -8, 3 },
new int[] { 8, -8, -8, -16, 3 }
new int[] { 8, 8, 4, 4, 0 },
new int[] { -8, -8, -4, -4, 0 },
new int[] { 8, 0, 4, 4, 1 },
new int[] { -8, 0, -4, 4, 1 },
new int[] { 0, 8, 4, 4, 2 },
new int[] { 0, -8, 4, -4, 2 },
new int[] { -8, 8, -4, 4, 3 },
new int[] { 8, -8, 4, -4, 3 }
};
}
}

View File

@@ -118,8 +118,8 @@ namespace OpenRA.Mods.RA
yield break;
var bounds = self.Bounds.Value;
yield return new Renderable(RankAnim.Image, new float2(bounds.Right - 6, bounds.Bottom - 8),
wr.Palette("effect"), self.CenterLocation.Y);
var pos = new float2(bounds.Right, bounds.Bottom - 2);
yield return new Renderable(RankAnim.Image, pos, wr.Palette("effect"), self.CenterLocation.Y);
}
}

View File

@@ -27,8 +27,8 @@ namespace OpenRA.Mods.RA.Render
public override IEnumerable<Renderable> RenderPreview(ActorInfo building, PaletteReference pr)
{
return base.RenderPreview(building, pr)
.Select(a => a.WithPxOffset(building.Traits.Get<RenderBuildingInfo>().Origin));
var origin = building.Traits.Get<RenderBuildingInfo>().Origin;
return base.RenderPreview(building, pr).Select(a => a.WithPxOffset(origin));
}
public void Render(WorldRenderer wr, World w, ActorInfo ai, PPos centerLocation)

View File

@@ -34,8 +34,7 @@ namespace OpenRA.Mods.RA.Render
var anim = new Animation(RenderSimple.GetImage(building), () => 0);
anim.PlayRepeating("idle-top");
var rb = building.Traits.Get<RenderBuildingInfo>();
yield return new Renderable(anim.Image, rb.Origin + 0.5f*anim.Image.size*(1 - Scale),
pr, 0, Scale);
yield return new Renderable(anim.Image, 0.5f*anim.Image.size + rb.Origin, pr, 0, Scale);
}
}