diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 18867f154a..62864f28f9 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -57,7 +57,7 @@ namespace OpenRa.Game .Where(u => Rules.UnitInfo[u].TechLevel != -1) .ToDictionary( u => u, - u => SpriteSheetBuilder.LoadAllSprites(u + "icon", ".shp")[0]); + u => SpriteSheetBuilder.LoadAllSprites(u + "icon")[0]); tabSprites = groups.Select( (g, i) => Pair.New(g, diff --git a/OpenRa.Game/Graphics/OverlayRenderer.cs b/OpenRa.Game/Graphics/OverlayRenderer.cs index 07ceafe58a..ce670e7425 100755 --- a/OpenRa.Game/Graphics/OverlayRenderer.cs +++ b/OpenRa.Game/Graphics/OverlayRenderer.cs @@ -25,10 +25,10 @@ namespace OpenRa.Game.Graphics this.spriteRenderer = new SpriteRenderer( renderer, true ); this.map = map; - overlaySprites = overlaySpriteNames.Select(f => SpriteSheetBuilder.LoadAllSprites2(f)).ToArray(); + overlaySprites = overlaySpriteNames.Select(f => SpriteSheetBuilder.LoadAllSprites(f)).ToArray(); smudgeSprites = new[] { "bib3", "bib2", "sc1", "sc2", "sc3", "sc4", "sc5", "sc6", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", }.SelectMany( - f => SpriteSheetBuilder.LoadAllSprites2(f)).ToArray(); + f => SpriteSheetBuilder.LoadAllSprites(f)).ToArray(); } public void Draw() diff --git a/OpenRa.Game/Graphics/Sequence.cs b/OpenRa.Game/Graphics/Sequence.cs index 6c63f0d793..7b569cbf81 100644 --- a/OpenRa.Game/Graphics/Sequence.cs +++ b/OpenRa.Game/Graphics/Sequence.cs @@ -18,8 +18,7 @@ namespace OpenRa.Game.Graphics string srcOverride = e.GetAttribute("src"); Name = e.GetAttribute("name"); - sprites = SpriteSheetBuilder.LoadAllSprites(string.IsNullOrEmpty(srcOverride) ? unit : srcOverride, - ".tem", ".sno", ".int", ".shp" ); + sprites = SpriteSheetBuilder.LoadAllSprites(string.IsNullOrEmpty(srcOverride) ? unit : srcOverride ); start = int.Parse(e.GetAttribute("start")); if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*") diff --git a/OpenRa.Game/Graphics/SpriteSheetBuilder.cs b/OpenRa.Game/Graphics/SpriteSheetBuilder.cs index c0adaec761..14d27b9a71 100644 --- a/OpenRa.Game/Graphics/SpriteSheetBuilder.cs +++ b/OpenRa.Game/Graphics/SpriteSheetBuilder.cs @@ -1,5 +1,7 @@ using System.Collections.Generic; using OpenRa.FileFormats; +using IjwFramework.Collections; +using System.Linq; namespace OpenRa.Game.Graphics { @@ -7,30 +9,21 @@ namespace OpenRa.Game.Graphics { public static void Initialize() { - sprites = new Dictionary(); + sprites = new Cache( LoadSprites ); } - static Dictionary sprites; + static Cache sprites; static readonly string[] exts = { ".tem", ".sno", ".int", ".shp" }; - public static Sprite[] LoadAllSprites2(string filename) + static Sprite[] LoadSprites(string filename) { - return LoadAllSprites(filename, exts); + var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts)); + return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray(); } - public static Sprite[] LoadAllSprites( string filename, params string[] exts ) + public static Sprite[] LoadAllSprites( string filename ) { - Sprite[] value; - if( !sprites.TryGetValue( filename, out value ) ) - { - ShpReader shp = new ShpReader( FileSystem.OpenWithExts( filename, exts ) ); - value = new Sprite[ shp.ImageCount ]; - for( int i = 0 ; i < shp.ImageCount ; i++ ) - value[ i ] = SheetBuilder.Add( shp[ i ].Image, shp.Size ); - sprites.Add( filename, value ); - } - - return value; + return sprites[filename]; } } }