de-static'd CursorSheetBuilder

This commit is contained in:
Bob
2010-08-21 17:36:58 +12:00
parent bcc3cd32ae
commit c7b650d6ec
3 changed files with 19 additions and 8 deletions

View File

@@ -27,7 +27,7 @@ namespace OpenRA.Graphics
public CursorSequence(string cursorSrc, string palette, XmlElement e)
{
sprites = CursorSheetBuilder.LoadAllSprites(cursorSrc);
sprites = Game.modData.CursorSheetBuilder.LoadAllSprites(cursorSrc);
start = int.Parse(e.GetAttribute("start"));
this.palette = palette;

View File

@@ -14,25 +14,32 @@ using OpenRA.FileFormats;
namespace OpenRA.Graphics
{
static class CursorSheetBuilder
public class CursorSheetBuilder
{
static Cache<string, Sprite[]> cursors = new Cache<string, Sprite[]>(LoadCursors);
static readonly string[] exts = { ".shp" };
ModData modData;
Cache<string, Sprite[]> cursors;
readonly string[] exts = { ".shp" };
static Sprite[] LoadCursors(string filename)
public CursorSheetBuilder( ModData modData )
{
this.modData = modData;
this.cursors = new Cache<string, Sprite[]>( LoadCursors );
}
Sprite[] LoadCursors(string filename)
{
try
{
var shp = new Dune2ShpReader(FileSystem.OpenWithExts(filename, exts));
return shp.Select(a => SheetBuilder.SharedInstance.Add(a.Image, a.Size)).ToArray();
return shp.Select(a => modData.SheetBuilder.Add(a.Image, a.Size)).ToArray();
}
catch (IndexOutOfRangeException) // This will occur when loading a custom (RA-format) .shp
{
var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
return shp.Select(a => SheetBuilder.SharedInstance.Add(a.Image, shp.Size)).ToArray();
return shp.Select(a => modData.SheetBuilder.Add(a.Image, shp.Size)).ToArray();
}
}
public static Sprite[] LoadAllSprites(string filename) { return cursors[filename]; }
public Sprite[] LoadAllSprites(string filename) { return cursors[filename]; }
}
}

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenRA.FileFormats;
using OpenRA.Graphics;
namespace OpenRA
{
@@ -10,12 +11,15 @@ namespace OpenRA
{
public readonly Manifest Manifest;
public readonly ObjectCreator ObjectCreator;
public readonly CursorSheetBuilder CursorSheetBuilder;
public SheetBuilder SheetBuilder { get { return SheetBuilder.SharedInstance; } }
public ModData( Manifest manifest )
{
Manifest = manifest;
ObjectCreator = new ObjectCreator( manifest );
FileSystem.LoadFromManifest( manifest );
CursorSheetBuilder = new CursorSheetBuilder( this );
}
}
}