diff --git a/OpenRa.Game/Bullet.cs b/OpenRa.Game/Bullet.cs index c156eaef9b..781be45cb7 100644 --- a/OpenRa.Game/Bullet.cs +++ b/OpenRa.Game/Bullet.cs @@ -3,12 +3,14 @@ using System.Collections.Generic; using System.Linq; using System.Text; using OpenRa.Game.GameRules; +using IjwFramework.Types; +using OpenRa.Game.Graphics; namespace OpenRa.Game { class Bullet { - readonly Player Owner; + public readonly Player Owner; readonly Actor FiredBy; readonly WeaponInfo Weapon; readonly ProjectileInfo Projectile; @@ -30,5 +32,6 @@ namespace OpenRa.Game } public void Tick(Game game, int dt) { /* todo */ } + public IEnumerable> Render() { yield break; } } } diff --git a/OpenRa.Game/Graphics/WorldRenderer.cs b/OpenRa.Game/Graphics/WorldRenderer.cs index df8b7a6a57..a5b7e5c942 100644 --- a/OpenRa.Game/Graphics/WorldRenderer.cs +++ b/OpenRa.Game/Graphics/WorldRenderer.cs @@ -1,6 +1,8 @@ using System.Drawing; using System.Linq; -using System.Windows.Forms; +using System.Windows.Forms; +using IjwFramework.Types; +using System.Collections.Generic; namespace OpenRa.Game.Graphics { @@ -25,6 +27,25 @@ namespace OpenRa.Game.Graphics spriteRenderer = new SpriteRenderer(renderer, true); lineRenderer = new LineRenderer(renderer); uiOverlay = new UiOverlay(spriteRenderer, game); + } + + 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); + } } public void Draw() @@ -33,21 +54,10 @@ namespace OpenRa.Game.Graphics region.Size.ToSizeF()); foreach (Actor a in game.world.Actors) - { - var images = a.Render(); - - 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, ( a.Owner != null ) ? a.Owner.Palette : 0 ); - } - } + DrawSpriteList(a.Owner, rect, a.Render()); + + foreach (Bullet b in game.world.Bullets) + DrawSpriteList(b.Owner, rect, b.Render()); uiOverlay.Draw();