unstatic SpriteLoader

This commit is contained in:
Chris Forbes
2011-01-08 21:03:33 +13:00
committed by Paul Chote
parent f032322948
commit 848622054d
10 changed files with 18 additions and 16 deletions

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Graphics
Name = name; Name = name;
var d = info.NodesDict; var d = info.NodesDict;
sprites = SpriteLoader.LoadAllSprites(string.IsNullOrEmpty(srcOverride) ? unit : srcOverride ); sprites = Game.modData.SpriteLoader.LoadAllSprites(string.IsNullOrEmpty(srcOverride) ? unit : srcOverride );
start = int.Parse(d["Start"].Value); start = int.Parse(d["Start"].Value);
if (!d.ContainsKey("Length")) if (!d.ContainsKey("Length"))

View File

@@ -16,7 +16,7 @@ namespace OpenRA.Graphics
public class ShroudRenderer public class ShroudRenderer
{ {
Traits.Shroud shroud; Traits.Shroud shroud;
Sprite[] shadowBits = SpriteLoader.LoadAllSprites("shadow"); Sprite[] shadowBits = Game.modData.SpriteLoader.LoadAllSprites("shadow");
Sprite[,] sprites, fogSprites; Sprite[,] sprites, fogSprites;
bool dirty = true; bool dirty = true;

View File

@@ -13,25 +13,25 @@ using OpenRA.FileFormats;
namespace OpenRA.Graphics namespace OpenRA.Graphics
{ {
public static class SpriteLoader public class SpriteLoader
{ {
public static void Initialize( TileSet tileset, SheetBuilder sheetBuilder ) public SpriteLoader( TileSet tileset, SheetBuilder sheetBuilder )
{ {
exts = tileset.Extensions; exts = tileset.Extensions;
SheetBuilder = sheetBuilder; SheetBuilder = sheetBuilder;
sprites = new Cache<string, Sprite[]>( LoadSprites ); sprites = new Cache<string, Sprite[]>( LoadSprites );
} }
static SheetBuilder SheetBuilder; readonly SheetBuilder SheetBuilder;
static Cache<string, Sprite[]> sprites; readonly Cache<string, Sprite[]> sprites;
static string[] exts; readonly string[] exts;
static Sprite[] LoadSprites(string filename) Sprite[] LoadSprites(string filename)
{ {
var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts)); var shp = new ShpReader(FileSystem.OpenWithExts(filename, exts));
return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray(); return shp.Select(a => SheetBuilder.Add(a.Image, shp.Size)).ToArray();
} }
public static Sprite[] LoadAllSprites(string filename) { return sprites[filename]; } public Sprite[] LoadAllSprites(string filename) { return sprites[filename]; }
} }
} }

View File

@@ -25,6 +25,7 @@ namespace OpenRA
public ILoadScreen LoadScreen = null; public ILoadScreen LoadScreen = null;
public SheetBuilder SheetBuilder; public SheetBuilder SheetBuilder;
public CursorSheetBuilder CursorSheetBuilder; public CursorSheetBuilder CursorSheetBuilder;
public SpriteLoader SpriteLoader;
public ModData( params string[] mods ) public ModData( params string[] mods )
{ {
@@ -103,7 +104,7 @@ namespace OpenRA
|| previousMapHadSequences || map.Sequences.Count > 0) || previousMapHadSequences || map.Sequences.Count > 0)
{ {
SheetBuilder = new SheetBuilder( TextureChannel.Red ); SheetBuilder = new SheetBuilder( TextureChannel.Red );
SpriteLoader.Initialize( Rules.TileSets[map.Tileset], SheetBuilder ); SpriteLoader = new SpriteLoader(Rules.TileSets[map.Tileset], SheetBuilder);
CursorSheetBuilder = new CursorSheetBuilder( this ); CursorSheetBuilder = new CursorSheetBuilder( this );
CursorProvider.Initialize(Manifest.Cursors); CursorProvider.Initialize(Manifest.Cursors);
SequenceProvider.Initialize(Manifest.Sequences, map.Sequences); SequenceProvider.Initialize(Manifest.Sequences, map.Sequences);

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Traits
resourceTypes = w.WorldActor.TraitsImplementing<ResourceType>().ToArray(); resourceTypes = w.WorldActor.TraitsImplementing<ResourceType>().ToArray();
foreach (var rt in resourceTypes) foreach (var rt in resourceTypes)
rt.info.Sprites = rt.info.SpriteNames.Select(a => SpriteLoader.LoadAllSprites(a)).ToArray(); rt.info.Sprites = rt.info.SpriteNames.Select(a => Game.modData.SpriteLoader.LoadAllSprites(a)).ToArray();
var map = w.Map; var map = w.Map;

View File

@@ -60,7 +60,7 @@ namespace OpenRA.Widgets
if (image != cachedImage || frame != cachedFrame) if (image != cachedImage || frame != cachedFrame)
{ {
sprite = SpriteLoader.LoadAllSprites(image)[frame]; sprite = Game.modData.SpriteLoader.LoadAllSprites(image)[frame];
cachedImage = image; cachedImage = image;
cachedFrame = frame; cachedFrame = frame;
} }

View File

@@ -35,7 +35,7 @@ namespace OpenRA.Mods.RA.Buildings
public BibLayer(Actor self, BibLayerInfo info) public BibLayer(Actor self, BibLayerInfo info)
{ {
this.info = info; this.info = info;
bibSprites = info.BibTypes.Select(x => SpriteLoader.LoadAllSprites(x)).ToArray(); bibSprites = info.BibTypes.Select(x => Game.modData.SpriteLoader.LoadAllSprites(x)).ToArray();
self.World.ActorAdded += self.World.ActorAdded +=
a => { if (a.HasTrait<Bib>()) DoBib(a,true); }; a => { if (a.HasTrait<Bib>()) DoBib(a,true); };

View File

@@ -70,7 +70,8 @@ namespace OpenRA.Mods.RA.Widgets
.Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^') .Where(u => u.Traits.Contains<BuildableInfo>() && u.Name[0] != '^')
.ToDictionary( .ToDictionary(
u => u.Name, u => u.Name,
u => SpriteLoader.LoadAllSprites(u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]); u => Game.modData.SpriteLoader.LoadAllSprites(
u.Traits.Get<TooltipInfo>().Icon ?? (u.Name + "icon"))[0]);
} }
public override Rectangle EventBounds public override Rectangle EventBounds

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.RA.Widgets
.Select(u => u.Image).Distinct() .Select(u => u.Image).Distinct()
.ToDictionary( .ToDictionary(
u => u, u => u,
u => SpriteLoader.LoadAllSprites(u)[0]); u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]);
ready = new Animation("pips"); ready = new Animation("pips");
ready.PlayRepeating("ready"); ready.PlayRepeating("ready");

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.RA
public SmudgeLayer(SmudgeLayerInfo info) public SmudgeLayer(SmudgeLayerInfo info)
{ {
this.Info = info; this.Info = info;
smudgeSprites = Info.Types.Select(x => SpriteLoader.LoadAllSprites(x)).ToArray(); smudgeSprites = Info.Types.Select(x => Game.modData.SpriteLoader.LoadAllSprites(x)).ToArray();
} }
public void WorldLoaded(World w) public void WorldLoaded(World w)