diff --git a/OpenRa.Game/Actor.cs b/OpenRa.Game/Actor.cs index 76085ea89b..e5cbbeec93 100755 --- a/OpenRa.Game/Actor.cs +++ b/OpenRa.Game/Actor.cs @@ -59,9 +59,9 @@ namespace OpenRa.Game } public float2 CenterLocation; - public float2 SelectedSize { get { return Render().First().First.size; } } + public float2 SelectedSize { get { return Render().First().a.size; } } - public IEnumerable> Render() + public IEnumerable> Render() { return traits.WithInterface().SelectMany( x => x.Render( this ) ); } diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index 3e440623bd..9bc853aca5 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -35,25 +35,6 @@ namespace OpenRa.Game.Graphics lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer); } - - void DrawSpriteList(Player owner, RectangleF rect, - IEnumerable> images) - { - foreach (var image in images) - { - var loc = image.Second; - - if (loc.X > rect.Right || loc.X < rect.Left - - image.First.bounds.Width) - continue; - if (loc.Y > rect.Bottom || loc.Y < rect.Top - - image.First.bounds.Height) - continue; - - spriteRenderer.DrawSprite(image.First, loc, - (owner != null) ? owner.Palette : 0); - } - } void DrawSpriteList(RectangleF rect, IEnumerable> images) @@ -81,12 +62,12 @@ namespace OpenRa.Game.Graphics region.Size.ToSizeF()); foreach (Actor a in Game.world.Actors.OrderBy( u => u.CenterLocation.Y )) - DrawSpriteList(a.Owner, rect, a.Render()); + DrawSpriteList(rect, a.Render()); foreach (var a in Game.world.Actors .Where(u => u.traits.Contains()) .Select(u => u.traits.Get())) - DrawSpriteList(a.self.Owner, rect, a.RenderRoof(a.self)); /* RUDE HACK */ + DrawSpriteList(rect, a.RenderRoof(a.self)); /* RUDE HACK */ foreach (IEffect e in Game.world.Effects) DrawSpriteList(rect, e.Render()); diff --git a/OpenRa.Game/Traits/InfantrySquad.cs b/OpenRa.Game/Traits/InfantrySquad.cs index d54e2c93a4..2a05288db7 100644 --- a/OpenRa.Game/Traits/InfantrySquad.cs +++ b/OpenRa.Game/Traits/InfantrySquad.cs @@ -35,11 +35,11 @@ namespace OpenRa.Game.Traits self.CenterLocation.ToInt2() + elementOffsets[elements.Count][i], self); } - public IEnumerable> Render(Actor self) + public IEnumerable> Render(Actor self) { return elements.Select( - e => Util.Centered(e.anim.Image, e.location)) - .OrderBy( a => a.Second.Y ); /* important to y-order elements of a squad! */ + e => Util.Centered(self, e.anim.Image, e.location)) + .OrderBy( a => a.b.Y ); /* important to y-order elements of a squad! */ } } diff --git a/OpenRa.Game/Traits/RallyPoint.cs b/OpenRa.Game/Traits/RallyPoint.cs index e71f33eeb7..c2527f29b9 100644 --- a/OpenRa.Game/Traits/RallyPoint.cs +++ b/OpenRa.Game/Traits/RallyPoint.cs @@ -21,11 +21,11 @@ namespace OpenRa.Game.Traits anim.PlayRepeating("idle"); } - public IEnumerable> Render(Actor self) + public IEnumerable> Render(Actor self) { var uog = Game.controller.orderGenerator as UnitOrderGenerator; if (uog != null && self.Owner == Game.LocalPlayer && uog.selection.Contains(self)) - yield return Util.Centered( + yield return Util.Centered( self, anim.Image, Game.CellSize * (new float2(.5f, .5f) + rallyPoint.ToFloat2())); } diff --git a/OpenRa.Game/Traits/RenderBuilding.cs b/OpenRa.Game/Traits/RenderBuilding.cs index 67468e3975..b8f46e28b6 100644 --- a/OpenRa.Game/Traits/RenderBuilding.cs +++ b/OpenRa.Game/Traits/RenderBuilding.cs @@ -64,9 +64,9 @@ namespace OpenRa.Game.Traits } } - public override IEnumerable> Render(Actor self) + public override IEnumerable> Render(Actor self) { - yield return Pair.New(anim.Image, 24f * (float2)self.Location); + yield return Tuple.New(anim.Image, 24f * (float2)self.Location, self.Owner.Palette); } public virtual void Damaged(Actor self, DamageState state) diff --git a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs index 9bed59f2c7..e489a47482 100644 --- a/OpenRa.Game/Traits/RenderBuildingWarFactory.cs +++ b/OpenRa.Game/Traits/RenderBuildingWarFactory.cs @@ -29,10 +29,11 @@ namespace OpenRa.Game.Traits }, self); } - public IEnumerable> RenderRoof(Actor self) + public IEnumerable> RenderRoof(Actor self) { if (doneBuilding) - yield return Pair.New(roof.Image, 24f * (float2)self.Location); + yield return Tuple.New(roof.Image, + 24f * (float2)self.Location, self.Owner.Palette); } public override void Tick(Actor self) diff --git a/OpenRa.Game/Traits/RenderSimple.cs b/OpenRa.Game/Traits/RenderSimple.cs index 3a098b6a32..abee7174ad 100644 --- a/OpenRa.Game/Traits/RenderSimple.cs +++ b/OpenRa.Game/Traits/RenderSimple.cs @@ -16,7 +16,7 @@ namespace OpenRa.Game.Traits anim = new Animation(self.unitInfo.Image ?? self.unitInfo.Name); } - public abstract IEnumerable> Render(Actor self); + public abstract IEnumerable> Render(Actor self); public virtual void Tick(Actor self) { diff --git a/OpenRa.Game/Traits/RenderUnit.cs b/OpenRa.Game/Traits/RenderUnit.cs index efd2ac58ae..18f43284fb 100644 --- a/OpenRa.Game/Traits/RenderUnit.cs +++ b/OpenRa.Game/Traits/RenderUnit.cs @@ -29,11 +29,11 @@ namespace OpenRa.Game.Traits anim.PlayThen(newAnim, () => { PlayFacingAnim(self); if (after != null) after(); }); } - public override IEnumerable> Render(Actor self) + public override IEnumerable> Render(Actor self) { - yield return Util.Centered(anim.Image, self.CenterLocation); + yield return Util.Centered(self, anim.Image, self.CenterLocation); if (isSmoking) - yield return Util.Centered(smoke.Image, self.CenterLocation); + yield return Util.Centered(self, smoke.Image, self.CenterLocation); } bool isSmoking; diff --git a/OpenRa.Game/Traits/RenderUnitRotor.cs b/OpenRa.Game/Traits/RenderUnitRotor.cs index 4b446d7d8c..555f7bd673 100755 --- a/OpenRa.Game/Traits/RenderUnitRotor.cs +++ b/OpenRa.Game/Traits/RenderUnitRotor.cs @@ -23,15 +23,15 @@ namespace OpenRa.Game.Traits } } - public override IEnumerable> Render(Actor self) + public override IEnumerable> Render(Actor self) { var mobile = self.traits.Get(); - yield return Util.Centered(anim.Image, self.CenterLocation); - yield return Util.Centered(rotorAnim.Image, self.CenterLocation + yield return Util.Centered(self, anim.Image, self.CenterLocation); + yield return Util.Centered(self, rotorAnim.Image, self.CenterLocation + Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, 0)); if (self.unitInfo.SecondaryOffset != null) - yield return Util.Centered((secondRotorAnim ?? rotorAnim).Image, self.CenterLocation + yield return Util.Centered(self, (secondRotorAnim ?? rotorAnim).Image, self.CenterLocation + Util.GetTurretPosition(self, self.unitInfo.SecondaryOffset, 0)); } diff --git a/OpenRa.Game/Traits/RenderUnitTurreted.cs b/OpenRa.Game/Traits/RenderUnitTurreted.cs index 130a3a0430..dce1b47a38 100644 --- a/OpenRa.Game/Traits/RenderUnitTurreted.cs +++ b/OpenRa.Game/Traits/RenderUnitTurreted.cs @@ -33,19 +33,19 @@ namespace OpenRa.Game.Traits turretAnim.PlayRepeating("turret"); /* not really a turret; it's a spinner */ } - public override IEnumerable> Render(Actor self) + public override IEnumerable> Render(Actor self) { var mobile = self.traits.Get(); - yield return Util.Centered(anim.Image, self.CenterLocation); - yield return Util.Centered(turretAnim.Image, self.CenterLocation + yield return Util.Centered(self, anim.Image, self.CenterLocation); + yield return Util.Centered(self, turretAnim.Image, self.CenterLocation + Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, primaryRecoil)); if (self.unitInfo.SecondaryOffset != null) - yield return Util.Centered(turretAnim.Image, self.CenterLocation + yield return Util.Centered(self, turretAnim.Image, self.CenterLocation + Util.GetTurretPosition(self, self.unitInfo.SecondaryOffset, secondaryRecoil)); if (muzzleFlash != null && primaryRecoil > 0) - yield return Util.Centered(muzzleFlash.Image, self.CenterLocation + yield return Util.Centered(self, muzzleFlash.Image, self.CenterLocation + Util.GetTurretPosition(self, self.unitInfo.PrimaryOffset, primaryRecoil)); } diff --git a/OpenRa.Game/Traits/TraitsInterfaces.cs b/OpenRa.Game/Traits/TraitsInterfaces.cs index d2400acf00..cf3505afce 100644 --- a/OpenRa.Game/Traits/TraitsInterfaces.cs +++ b/OpenRa.Game/Traits/TraitsInterfaces.cs @@ -10,7 +10,7 @@ namespace OpenRa.Game.Traits enum DamageState { Normal, Half, Dead }; interface ITick { void Tick(Actor self); } - interface IRender { IEnumerable> Render(Actor self); } + interface IRender { IEnumerable> Render(Actor self); } interface IOrder { Order Order(Actor self, int2 xy, bool lmb, Actor underCursor); } interface INotifyDamage { void Damaged(Actor self, DamageState ds); } interface INotifyDamageEx : INotifyDamage { void Damaged(Actor self, int damage); } diff --git a/OpenRa.Game/Traits/Tree.cs b/OpenRa.Game/Traits/Tree.cs index bb6aa717bc..44cfd7c1a6 100644 --- a/OpenRa.Game/Traits/Tree.cs +++ b/OpenRa.Game/Traits/Tree.cs @@ -16,9 +16,9 @@ namespace OpenRa.Game.Traits Image = treeImage; } - public IEnumerable> Render(Actor self) + public IEnumerable> Render(Actor self) { - yield return Pair.New(Image, Game.CellSize * (float2)self.Location); + yield return Tuple.New(Image, Game.CellSize * (float2)self.Location, 0); } } } diff --git a/OpenRa.Game/Traits/Util.cs b/OpenRa.Game/Traits/Util.cs index 789648c2a1..17e8d7642b 100755 --- a/OpenRa.Game/Traits/Util.cs +++ b/OpenRa.Game/Traits/Util.cs @@ -98,10 +98,10 @@ namespace OpenRa.Game.Traits + new float2(offset.ElementAtOrDefault(2), offset.ElementAtOrDefault(3)); } - public static Pair Centered(Sprite s, float2 location) + public static Tuple Centered(Actor self, Sprite s, float2 location) { var loc = location - 0.5f * s.size; - return Pair.New(s, loc.Round()); + return Tuple.New(s, loc.Round(), self.Owner.Palette); } }