diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 0b2270705c..aee543cc52 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -221,11 +221,15 @@ namespace OpenRA.Graphics public int2 ScreenPxPosition(WPos pos) { - var c = Game.CellSize/1024f; - return new int2((int)(c*pos.X), (int)(c*(pos.Y - pos.Z))); + return new int2(Game.CellSize*pos.X/1024, Game.CellSize*(pos.Y - pos.Z)/1024); } public float ScreenZOffset(WPos pos) { return pos.Z*Game.CellSize/1024f; } + public int2 ScreenPxOffset(WVec vec) + { + return new int2(Game.CellSize*vec.X/1024, Game.CellSize*(vec.Y - vec.Z)/1024); + } + public float[] ScreenOffset(WVec vec) { var c = Game.CellSize/1024f; diff --git a/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs b/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs index b8c1d9da7d..d8589ea50e 100644 --- a/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs +++ b/OpenRA.Mods.RA/Render/RenderBuildingSeparateTurret.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Render anim.Play("turret"); anims.Add("turret_{0}".F(i++), new AnimationWithOffset(anim, - wr => PPos.FromWPosHackZ(WPos.Zero + t.Position(self)).ToFloat2(), null)); + wr => wr.ScreenPxOffset(t.Position(self)), null)); } } } diff --git a/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs b/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs index cbba9dfb79..740bf97075 100755 --- a/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs +++ b/OpenRA.Mods.RA/Render/RenderUnitTurreted.cs @@ -37,11 +37,11 @@ namespace OpenRA.Mods.RA.Render anim.Play("turret"); anims.Add("turret_{0}".F(i++), new AnimationWithOffset(anim, - wr => TurretPosition(self, turret, facing), null)); + wr => TurretPosition(self, wr, turret, facing), null)); } } - float2 TurretPosition(Actor self, Turreted t, IFacing facing) + float2 TurretPosition(Actor self, WorldRenderer wr, Turreted t, IFacing facing) { var recoil = self.TraitsImplementing() .Where(w => w.Info.Turret == t.Name) @@ -50,9 +50,9 @@ namespace OpenRA.Mods.RA.Render var localOffset = new WVec(-recoil, WRange.Zero, WRange.Zero); var bodyOrientation = QuantizeOrientation(self, self.Orientation); var turretOrientation = QuantizeOrientation(self, t.LocalOrientation(self)); - var worldPos = WPos.Zero + t.Position(self) + LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation)); + var worldPos = t.Position(self) + LocalToWorld(localOffset.Rotate(turretOrientation).Rotate(bodyOrientation)); - return PPos.FromWPosHackZ(worldPos).ToFloat2(); + return wr.ScreenPxOffset(worldPos); } } } diff --git a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs index bea897ec68..07282bfaf8 100644 --- a/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs +++ b/OpenRA.Mods.RA/Render/WithMuzzleFlash.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Render muzzleFlashes.Add("muzzle{0}".F(muzzleFlashes.Count), new AnimationWithOffset( muzzleFlash, - wr => PPos.FromWPosHackZ(WPos.Zero + a.MuzzleOffset(self, barrel)).ToFloat2(), + wr => wr.ScreenPxOffset(a.MuzzleOffset(self, barrel)), () => !isShowing)); } }