diff --git a/OpenRa.Game/Graphics/Animation.cs b/OpenRa.Game/Graphics/Animation.cs index 6155ef979e..ebda4b49e0 100644 --- a/OpenRa.Game/Graphics/Animation.cs +++ b/OpenRa.Game/Graphics/Animation.cs @@ -42,16 +42,10 @@ namespace OpenRa.Game.Graphics PlayThen( sequenceName, () => PlayRepeating( sequenceName ) ); } - public void PlayRepeatingPreservingPosition(string sequenceName) - { - var f = frame; - PlayThen(sequenceName, () => PlayRepeating(sequenceName)); - frame = f % CurrentSequence.Length; - } - public void ReplaceAnim(string sequenceName) { CurrentSequence = SequenceProvider.GetSequence(name, sequenceName); + frame %= CurrentSequence.Length; } public void PlayThen( string sequenceName, Action after ) diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 417e091eec..859e7a8d31 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -186,7 +186,6 @@ - @@ -198,6 +197,7 @@ + diff --git a/OpenRa.Game/Traits/Activities/Fly.cs b/OpenRa.Game/Traits/Activities/Fly.cs index 7ff53f9ca1..b2718a88c5 100644 --- a/OpenRa.Game/Traits/Activities/Fly.cs +++ b/OpenRa.Game/Traits/Activities/Fly.cs @@ -173,9 +173,6 @@ namespace OpenRa.Game.Traits.Activities w2 = c2 + f; w3 = approachStart; landPoint = landPos; - - var rup = self.traits.Get(); - rup.wps = new[] { self.CenterLocation, w1, w2, w3, landPoint, c1, c2 }; } public IActivity Tick(Actor self) diff --git a/OpenRa.Game/Traits/RenderUnitPlane.cs b/OpenRa.Game/Traits/RenderUnitPlane.cs deleted file mode 100644 index 3bc981a584..0000000000 --- a/OpenRa.Game/Traits/RenderUnitPlane.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using OpenRa.Game.Graphics; -using OpenRa.Game.Traits.Activities; - -namespace OpenRa.Game.Traits -{ - class RenderUnitPlane : RenderUnit - { - Animation debug = new Animation("litning"); - public float2[] wps; - - public RenderUnitPlane(Actor self) - : base(self) { debug.PlayRepeating("bright"); debug.Tick(); } - - public override IEnumerable> Render(Actor self) - { - var unit = self.traits.Get(); - - yield return Util.CenteredShadow(self, anim.Image, self.CenterLocation); - var p = self.CenterLocation - new float2(0, unit.Altitude); - yield return Util.Centered(self, anim.Image, p); - - if (wps != null) - foreach (var w in wps) - yield return Tuple.New(debug.Image, w - .5f * debug.Image.size, 0); - } - } -} diff --git a/OpenRa.Game/Traits/RenderUnitRotor.cs b/OpenRa.Game/Traits/RenderUnitRotor.cs index dee1f255c7..dec9beef10 100755 --- a/OpenRa.Game/Traits/RenderUnitRotor.cs +++ b/OpenRa.Game/Traits/RenderUnitRotor.cs @@ -24,20 +24,11 @@ namespace OpenRa.Game.Traits { var unit = self.traits.Get(); - yield return Util.CenteredShadow(self, anim.Image, self.CenterLocation); - yield return Util.CenteredShadow(self, rotorAnim.Image, self.CenterLocation - + Util.GetTurretPosition(self, unit, self.Info.PrimaryOffset, 0)); - if (self.Info.SecondaryOffset != null) - yield return Util.CenteredShadow(self, (secondRotorAnim ?? rotorAnim).Image, self.CenterLocation - + Util.GetTurretPosition(self, unit, self.Info.SecondaryOffset, 0)); - - var p = self.CenterLocation - new float2( 0, unit.Altitude ); - - yield return Util.Centered(self, anim.Image, p); - yield return Util.Centered(self, rotorAnim.Image, p + yield return Util.Centered(self, anim.Image, self.CenterLocation); + yield return Util.Centered(self, rotorAnim.Image, self.CenterLocation + Util.GetTurretPosition( self, unit, self.Info.PrimaryOffset, 0 ) ); if (self.Info.SecondaryOffset != null) - yield return Util.Centered(self, (secondRotorAnim ?? rotorAnim).Image, p + yield return Util.Centered(self, (secondRotorAnim ?? rotorAnim).Image, self.CenterLocation + Util.GetTurretPosition( self, unit, self.Info.SecondaryOffset, 0 ) ); } @@ -55,9 +46,9 @@ namespace OpenRa.Game.Traits if (isFlying ^ (rotorAnim.CurrentSequence.Name != "rotor")) return; - rotorAnim.PlayRepeatingPreservingPosition(isFlying ? "rotor" : "slow-rotor"); + rotorAnim.ReplaceAnim(isFlying ? "rotor" : "slow-rotor"); if (secondRotorAnim != null) - secondRotorAnim.PlayRepeatingPreservingPosition(isFlying ? "rotor2" : "slow-rotor2"); + secondRotorAnim.ReplaceAnim(isFlying ? "rotor2" : "slow-rotor2"); } } } diff --git a/OpenRa.Game/Traits/WithShadow.cs b/OpenRa.Game/Traits/WithShadow.cs new file mode 100644 index 0000000000..2c61805ded --- /dev/null +++ b/OpenRa.Game/Traits/WithShadow.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using OpenRa.Game.Graphics; + +namespace OpenRa.Game.Traits +{ + class WithShadow : IRenderModifier + { + public WithShadow(Actor self) {} + + public IEnumerable> ModifyRender(Actor self, IEnumerable> r) + { + var unit = self.traits.Get(); + var shadowSprites = r.Select( a => Tuple.New( a.a, a.b, 8 )); + var flyingSprites = r.Select( a => Tuple.New( a.a, a.b - new float2( 0, unit.Altitude ), a.c )); + return shadowSprites.Concat(flyingSprites); + } + } +} diff --git a/units.ini b/units.ini index d5b744341b..66c0779622 100755 --- a/units.ini +++ b/units.ini @@ -155,13 +155,13 @@ HIND [MIG] Description=Mig Attack Plane BuiltAt=afld -Traits=Unit, Plane, RenderUnitPlane +Traits=Unit, Plane, RenderUnit, WithShadow InitialFacing=192 LongDesc=Fast Ground-Attack Plane.\n Strong vs Buildings\n Weak vs Infantry, Light Vehicles [YAK] Description=Yak Attack Plane BuiltAt=afld -Traits=Unit, Plane, RenderUnitPlane +Traits=Unit, Plane, RenderUnit, WithShadow InitialFacing=192 LongDesc=Anti-Tanks & Anti-Infantry Plane.\n Strong vs Infantry, Tanks\n Weak vs Buildings [TRAN] @@ -169,21 +169,21 @@ Description=Transport Helicopter PrimaryOffset=0,14,0,-4 SecondaryOffset=0,-14,0,-2 BuiltAt=hpad -Traits=Unit, Helicopter, RenderUnitRotor +Traits=Unit, Helicopter, RenderUnitRotor, WithShadow SecondaryAnim=rotor2 InitialFacing=20 LongDesc=Fast Infantry Transport Helicopter.\n Unarmed [HELI] Description=Longbow BuiltAt=hpad -Traits=Unit, Helicopter, RenderUnitRotor +Traits=Unit, Helicopter, RenderUnitRotor, WithShadow PrimaryOffset=0,0,0,-2 InitialFacing=20 LongDesc=Helicopter Gunship with AG Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry [HIND] Description=Hind BuiltAt=hpad -Traits=Unit, Helicopter, RenderUnitRotor +Traits=Unit, Helicopter, RenderUnitRotor, WithShadow InitialFacing=20 LongDesc=Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles.\n Weak vs Tanks