diff --git a/OpenRa.Game/GameRules/UnitInfo.cs b/OpenRa.Game/GameRules/UnitInfo.cs index 420ca1811f..966e687eb4 100755 --- a/OpenRa.Game/GameRules/UnitInfo.cs +++ b/OpenRa.Game/GameRules/UnitInfo.cs @@ -50,6 +50,7 @@ namespace OpenRa.Game.GameRules public readonly int[] PrimaryOffset = { 0, 0 }; public readonly int[] SecondaryOffset = null; public readonly int Recoil = 0; + public readonly int[] ScreenSpaceTurretOffset = { 0, 0 }; public UnitInfo(string name) { Name = name; } diff --git a/OpenRa.Game/Traits/RenderUnitTurreted.cs b/OpenRa.Game/Traits/RenderUnitTurreted.cs index 88691f5ad7..a505e22da5 100644 --- a/OpenRa.Game/Traits/RenderUnitTurreted.cs +++ b/OpenRa.Game/Traits/RenderUnitTurreted.cs @@ -16,7 +16,11 @@ namespace OpenRa.Game.Traits : base(self) { turretAnim = new Animation(self.unitInfo.Name); - turretAnim.PlayFetchIndex("turret", () => self.traits.Get().turretFacing / 8); + if (self.traits.Contains()) + turretAnim.PlayFetchIndex("turret", + () => self.traits.Get().turretFacing / 8); + else + turretAnim.PlayRepeating("turret"); /* not really a turret; it's a spinner */ } public override IEnumerable> Render(Actor self) diff --git a/OpenRa.Game/Traits/Util.cs b/OpenRa.Game/Traits/Util.cs index dca26daaa9..f8912aeb93 100755 --- a/OpenRa.Game/Traits/Util.cs +++ b/OpenRa.Game/Traits/Util.cs @@ -87,7 +87,9 @@ namespace OpenRa.Game.Traits var bodyFacing = self.traits.Get().facing; var quantizedFacing = bodyFacing - bodyFacing % ru.anim.CurrentSequence.Length; - return (RotateVectorByFacing(new float2(offset[0], offset[1]), quantizedFacing, .7f) + GetRecoil(self, recoil)); + return (RotateVectorByFacing(new float2(offset[0], offset[1]), quantizedFacing, .7f) + GetRecoil(self, recoil)) + + new float2(self.unitInfo.ScreenSpaceTurretOffset[0], + self.unitInfo.ScreenSpaceTurretOffset[1]); } public static Pair Centered(Sprite s, float2 location) diff --git a/units.ini b/units.ini index d28f4f7e4a..c081ee4b6d 100755 --- a/units.ini +++ b/units.ini @@ -33,10 +33,14 @@ Description=Mammoth Tank Traits=Mobile, Turreted, AttackTurreted, RenderUnitTurreted [MRJ] Description=Radar Jammer -Traits=Mobile, Turreted, RenderUnitTurreted ; temporary. It's not a turret, it's a spinney-thing +Traits=Mobile, RenderUnitTurreted +PrimaryOffset=0,4 +ScreenSpaceTurretOffset=0,-6 [MGG] Description=Mobile Gap Generator -Traits=Mobile, Turreted, RenderUnitTurreted ; temporary. It's not a turret, it's a spinney-thing +Traits=Mobile, RenderUnitTurreted +PrimaryOffset=0,6 +ScreenSpaceTurretOffset=0,-3 [ARTY] Description=Artillery Traits=Mobile, RenderUnit @@ -49,6 +53,7 @@ Traits=Mobile, McvDeploy, RenderUnit [JEEP] Description=Ranger Traits=Mobile, Turreted, AttackTurreted, RenderUnitTurreted +ScreenSpaceTurretOffset=0,-2 [APC] Description=Armored Personnel Carrier Traits=Mobile, RenderUnit