diff --git a/OpenRa.Game/Effects/Corpse.cs b/OpenRa.Game/Effects/Corpse.cs index 470a790f12..2c4570d46c 100755 --- a/OpenRa.Game/Effects/Corpse.cs +++ b/OpenRa.Game/Effects/Corpse.cs @@ -15,8 +15,7 @@ namespace OpenRa.Game.Effects public Corpse(Actor fromActor, int death) { - var info = fromActor.Info.Traits.WithInterface().First(); - anim = new Animation(info.Image ?? fromActor.Info.Name); + anim = new Animation(fromActor.traits.WithInterface().FirstOrDefault().GetImage(fromActor)); anim.PlayThen("die{0}".F(death + 1), () => Game.world.AddFrameEndTask(w => w.Remove(this))); diff --git a/OpenRa.Game/Traits/RenderSimple.cs b/OpenRa.Game/Traits/RenderSimple.cs index 1b1ed3ff26..30cc447c8f 100644 --- a/OpenRa.Game/Traits/RenderSimple.cs +++ b/OpenRa.Game/Traits/RenderSimple.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using OpenRa.Game.Graphics; namespace OpenRa.Game.Traits @@ -16,9 +17,14 @@ namespace OpenRa.Game.Traits public Dictionary anims = new Dictionary(); public Animation anim { get { return anims[ "" ].Animation; } } + public string GetImage(Actor self) + { + return self.Info.Traits.WithInterface().First().Image ?? self.Info.Name; + } + public RenderSimple(Actor self) { - anims.Add( "", new Animation( self.LegacyInfo.Image ?? self.LegacyInfo.Name ) ); + anims.Add( "", new Animation( GetImage(self) ) ); } public virtual IEnumerable Render( Actor self ) diff --git a/OpenRa.Game/Traits/RenderUnitRotor.cs b/OpenRa.Game/Traits/RenderUnitRotor.cs index a8d6b75f23..7606453a91 100755 --- a/OpenRa.Game/Traits/RenderUnitRotor.cs +++ b/OpenRa.Game/Traits/RenderUnitRotor.cs @@ -20,7 +20,7 @@ namespace OpenRa.Game.Traits var unit = self.traits.Get(); var info = self.Info.Traits.Get(); - rotorAnim = new Animation(info.Image ?? self.Info.Name); + rotorAnim = new Animation(GetImage(self)); rotorAnim.PlayRepeating("rotor"); anims.Add( "rotor_1", new AnimationWithOffset( rotorAnim, @@ -29,7 +29,7 @@ namespace OpenRa.Game.Traits if (info.SecondaryOffset == null) return; - secondRotorAnim = new Animation(info.Image ?? self.Info.Name); + secondRotorAnim = new Animation(GetImage(self)); secondRotorAnim.PlayRepeating( "rotor2" ); anims.Add( "rotor_2", new AnimationWithOffset( secondRotorAnim, diff --git a/OpenRa.Game/Traits/RenderUnitSpinner.cs b/OpenRa.Game/Traits/RenderUnitSpinner.cs index f0415e816b..f0a3f3dce0 100755 --- a/OpenRa.Game/Traits/RenderUnitSpinner.cs +++ b/OpenRa.Game/Traits/RenderUnitSpinner.cs @@ -18,7 +18,7 @@ namespace OpenRa.Game.Traits var unit = self.traits.Get(); var info = self.Info.Traits.Get(); - var spinnerAnim = new Animation( info.Image ?? self.Info.Name ); + var spinnerAnim = new Animation( GetImage(self) ); spinnerAnim.PlayRepeating( "spinner" ); anims.Add( "spinner", new AnimationWithOffset( spinnerAnim, diff --git a/OpenRa.Game/Traits/RenderUnitTurreted.cs b/OpenRa.Game/Traits/RenderUnitTurreted.cs index 3aa1c94a9f..c6222bd0b8 100644 --- a/OpenRa.Game/Traits/RenderUnitTurreted.cs +++ b/OpenRa.Game/Traits/RenderUnitTurreted.cs @@ -17,31 +17,32 @@ namespace OpenRa.Game.Traits var unit = self.traits.Get(); var turreted = self.traits.Get(); var attack = self.traits.WithInterface().FirstOrDefault(); + var attackInfo = self.Info.Traits.WithInterface().First(); - var turretAnim = new Animation(self.LegacyInfo.Name); + var turretAnim = new Animation(GetImage(self)); turretAnim.PlayFacing( "turret", () => turreted.turretFacing ); - if( self.LegacyInfo.PrimaryOffset != null ) + if( attackInfo.PrimaryOffset != null ) anims.Add("turret_1", new AnimationWithOffset( turretAnim, - () => Util.GetTurretPosition(self, unit, self.LegacyInfo.PrimaryOffset, attack.primaryRecoil), + () => Util.GetTurretPosition(self, unit, attackInfo.PrimaryOffset, attack.primaryRecoil), null) { ZOffset = 1 }); - if( self.LegacyInfo.SecondaryOffset != null ) + if (attackInfo.SecondaryOffset != null) anims.Add("turret_2", new AnimationWithOffset( turretAnim, - () => Util.GetTurretPosition(self, unit, self.LegacyInfo.SecondaryOffset, attack.secondaryRecoil), + () => Util.GetTurretPosition(self, unit, attackInfo.SecondaryOffset, attack.secondaryRecoil), null) { ZOffset = 1 }); - if( self.LegacyInfo.MuzzleFlash ) + if( attackInfo.MuzzleFlash ) { - var muzzleFlash = new Animation( self.LegacyInfo.Name ); + var muzzleFlash = new Animation( GetImage(self) ); muzzleFlash.PlayFetchIndex( "muzzle", () => ( Util.QuantizeFacing( self.traits.Get().turretFacing, 8 ) ) * 6 + (int)( attack.primaryRecoil * 5.9f ) ); /* hack: recoil can be 1.0f, but don't overflow into next anim */ anims.Add( "muzzle_flash", new AnimationWithOffset( muzzleFlash, - () => Util.GetTurretPosition( self, unit, self.LegacyInfo.PrimaryOffset, attack.primaryRecoil ), + () => Util.GetTurretPosition(self, unit, attackInfo.PrimaryOffset, attack.primaryRecoil), () => attack.primaryRecoil <= 0 ) ); } }