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 Func<WVec> OffsetFunc;
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)
: this(a, offset, disable, 0) { }
: this(a, offset, disable, null) { }
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.OffsetFunc = offset;
@@ -42,12 +45,13 @@ namespace OpenRA.Graphics
if (OffsetFunc != null)
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)
{
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");
rs.anims.Add(info.Id, new AnimationWithOffset(rotorAnim,
() => rs.LocalToWorld(info.Offset.Rotate(rs.QuantizeOrientation(self, self.Orientation))),
null, 1));
null, p => WithTurret.ZOffsetFromCenter(self, p, 1)));
}
public void Tick(Actor self)

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render
spinner.PlayRepeating(info.Sequence);
rs.anims.Add("spinner_{0}".F(info.Sequence), new AnimationWithOffset(spinner,
() => 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.Play(info.Sequence);
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)
@@ -73,5 +73,11 @@ namespace OpenRA.Mods.RA.Render
var sequence = ab.IsAttacking ? info.AimSequence : info.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;
}
}
}