Draw turrets, spinners, rotors at ZOffset +1 relative to the body.

This commit is contained in:
Paul Chote
2013-05-24 18:18:47 +12:00
parent d048d083c4
commit a11e403084
4 changed files with 17 additions and 7 deletions

View File

@@ -18,12 +18,15 @@ namespace OpenRA.Graphics
public readonly Animation Animation; public readonly Animation Animation;
public readonly Func<WVec> OffsetFunc; public readonly Func<WVec> OffsetFunc;
public readonly Func<bool> DisableFunc; public readonly Func<bool> DisableFunc;
public readonly int ZOffset; public readonly Func<WPos, int> ZOffset;
public AnimationWithOffset(Animation a, Func<WVec> offset, Func<bool> disable) public AnimationWithOffset(Animation a, Func<WVec> offset, Func<bool> disable)
: this(a, offset, disable, 0) { } : this(a, offset, disable, null) { }
public AnimationWithOffset(Animation a, Func<WVec> offset, Func<bool> disable, int zOffset) public AnimationWithOffset(Animation a, Func<WVec> offset, Func<bool> disable, int zOffset)
: this(a, offset, disable, _ => zOffset) { }
public AnimationWithOffset(Animation a, Func<WVec> offset, Func<bool> disable, Func<WPos, int> zOffset)
{ {
this.Animation = a; this.Animation = a;
this.OffsetFunc = offset; this.OffsetFunc = offset;
@@ -42,12 +45,13 @@ namespace OpenRA.Graphics
if (OffsetFunc != null) if (OffsetFunc != null)
p += OffsetFunc(); p += OffsetFunc();
return new SpriteRenderable(Animation.Image, p, ZOffset, pal, scale); var z = (ZOffset != null) ? ZOffset(p) : 0;
return new SpriteRenderable(Animation.Image, p, z, pal, scale);
} }
public static implicit operator AnimationWithOffset(Animation a) public static implicit operator AnimationWithOffset(Animation a)
{ {
return new AnimationWithOffset(a, null, null, 0); return new AnimationWithOffset(a, null, null, null);
} }
} }
} }

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render
rotorAnim.PlayRepeating("rotor"); rotorAnim.PlayRepeating("rotor");
rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim, rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim,
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))), () => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
null, 1)); null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
} }
public void Tick(Actor self) public void Tick(Actor self)

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render
spinner.PlayRepeating(info.Sequence); spinner.PlayRepeating(info.Sequence);
rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner, rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner,
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))), () => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
null, 1)); null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
} }
} }
} }

View File

@@ -53,7 +53,7 @@ namespace OpenRA.Mods.RA.Render
anim = new Animation(rs.GetImage(self), () => t.turretFacing); anim = new Animation(rs.GetImage(self), () => t.turretFacing);
anim.Play(info.Sequence); anim.Play(info.Sequence);
rs.anims.Add("turret_{0}".F(info.Turret), new AnimationWithOffset( rs.anims.Add("turret_{0}".F(info.Turret), new AnimationWithOffset(
anim, () => TurretOffset(self), null, t.Offset.Length)); anim, () => TurretOffset(self), null, p => ZOffsetFromCenter(self, p, 1)));
} }
WVec TurretOffset(Actor self) WVec TurretOffset(Actor self)
@@ -73,5 +73,11 @@ namespace OpenRA.Mods.RA.Render
var sequence = ab.IsAttacking ? info.AimSequence : info.Sequence; var sequence = ab.IsAttacking ? info.AimSequence : info.Sequence;
rs.anims["turret_{0}".F(info.Turret)].Animation.ReplaceAnim(sequence); rs.anims["turret_{0}".F(info.Turret)].Animation.ReplaceAnim(sequence);
} }
static public int ZOffsetFromCenter(Actor self, WPos pos, int offset)
{
var delta = self.CenterPosition - pos;
return delta.Y + delta.Z + offset;
}
} }
} }