From aa9db669e761230f0c10849009beda5a1c9cccf6 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Tue, 10 Feb 2015 14:21:44 +0000 Subject: [PATCH] Fix ActorPreview turret facings. --- OpenRA.Mods.Common/Traits/Render/WithTurret.cs | 8 ++++++-- OpenRA.Mods.TS/Traits/Render/RenderVoxels.cs | 3 ++- OpenRA.Mods.TS/Traits/Render/WithVoxelBarrel.cs | 4 +++- OpenRA.Mods.TS/Traits/Render/WithVoxelTurret.cs | 3 ++- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Render/WithTurret.cs b/OpenRA.Mods.Common/Traits/Render/WithTurret.cs index 719b820e7b..bd1138950a 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithTurret.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithTurret.cs @@ -39,10 +39,14 @@ namespace OpenRA.Mods.Common.Traits var t = init.Actor.Traits.WithInterface() .First(tt => tt.Turret == Turret); - var anim = new Animation(init.World, image, () => t.InitialFacing); + var ifacing = init.Actor.Traits.GetOrDefault(); + var bodyFacing = ifacing != null ? init.Contains() ? init.Get() : ifacing.GetInitialFacing() : 0; + var turretFacing = init.Contains() ? init.Get() : t.InitialFacing; + + var anim = new Animation(init.World, image, () => turretFacing); anim.Play(Sequence); - var orientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(t.InitialFacing)), facings); + var orientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(bodyFacing)), facings); var offset = body.LocalToWorld(t.Offset.Rotate(orientation)); yield return new SpriteActorPreview(anim, offset, offset.Y + offset.Z + 1, p, rs.Scale); } diff --git a/OpenRA.Mods.TS/Traits/Render/RenderVoxels.cs b/OpenRA.Mods.TS/Traits/Render/RenderVoxels.cs index 7b7423f634..d60c9b6909 100644 --- a/OpenRA.Mods.TS/Traits/Render/RenderVoxels.cs +++ b/OpenRA.Mods.TS/Traits/Render/RenderVoxels.cs @@ -49,7 +49,8 @@ namespace OpenRA.Mods.TS.Traits var facings = body.QuantizedFacings == -1 ? init.Actor.Traits.Get().QuantizedBodyFacings(sequenceProvider, init.Actor) : body.QuantizedFacings; var palette = init.WorldRenderer.Palette(Palette ?? (init.Owner != null ? PlayerPalette + init.Owner.InternalName : null)); - var facing = init.Contains() ? init.Get() : 0; + var ifacing = init.Actor.Traits.GetOrDefault(); + var facing = ifacing != null ? init.Contains() ? init.Get() : ifacing.GetInitialFacing() : 0; var orientation = WRot.FromFacing(facing); var components = init.Actor.Traits.WithInterface() .SelectMany(rvpi => rvpi.RenderPreviewVoxels(init, this, image, orientation, facings, palette)) diff --git a/OpenRA.Mods.TS/Traits/Render/WithVoxelBarrel.cs b/OpenRA.Mods.TS/Traits/Render/WithVoxelBarrel.cs index c511f1cf5d..e0ce270ab3 100644 --- a/OpenRA.Mods.TS/Traits/Render/WithVoxelBarrel.cs +++ b/OpenRA.Mods.TS/Traits/Render/WithVoxelBarrel.cs @@ -37,7 +37,9 @@ namespace OpenRA.Mods.TS.Traits .First(tt => tt.Turret == armament.Turret); var voxel = VoxelProvider.GetVoxel(image, Sequence); - var turretOrientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(t.InitialFacing) - orientation.Yaw), facings); + + var turretFacing = init.Contains() ? init.Get() : t.InitialFacing; + var turretOrientation = body.QuantizeOrientation(new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw), facings); var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation)); yield return new VoxelAnimation(voxel, () => turretOffset, () => new[] { turretOrientation, orientation }, diff --git a/OpenRA.Mods.TS/Traits/Render/WithVoxelTurret.cs b/OpenRA.Mods.TS/Traits/Render/WithVoxelTurret.cs index 4fadd909a2..2aacc0e0f8 100644 --- a/OpenRA.Mods.TS/Traits/Render/WithVoxelTurret.cs +++ b/OpenRA.Mods.TS/Traits/Render/WithVoxelTurret.cs @@ -36,7 +36,8 @@ namespace OpenRA.Mods.TS.Traits var voxel = VoxelProvider.GetVoxel(image, Sequence); var turretOffset = body.LocalToWorld(t.Offset.Rotate(orientation)); - var turretBodyOrientation = new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(t.InitialFacing) - orientation.Yaw); + var turretFacing = init.Contains() ? init.Get() : t.InitialFacing; + var turretBodyOrientation = new WRot(WAngle.Zero, WAngle.Zero, WAngle.FromFacing(turretFacing) - orientation.Yaw); var turretOrientation = new[] { turretBodyOrientation, body.QuantizeOrientation(orientation, facings) }; yield return new VoxelAnimation(voxel, () => turretOffset, () => turretOrientation, () => false, () => 0); }