UnitSheetBuilder is dead. long live SpriteSheetBuilder

This commit is contained in:
Chris Forbes
2009-12-26 20:41:49 +13:00
parent 44f0b3494f
commit e8bcd630d9
6 changed files with 16 additions and 47 deletions

View File

@@ -57,7 +57,6 @@ namespace OpenRa.Game
{ {
SheetBuilder.Initialize(renderer); SheetBuilder.Initialize(renderer);
SpriteSheetBuilder.Initialize(); SpriteSheetBuilder.Initialize();
UnitSheetBuilder.Initialize();
FileSystem.UnmountTemporaryPackages(); FileSystem.UnmountTemporaryPackages();
Rules.LoadRules(mapName, usingAftermath); Rules.LoadRules(mapName, usingAftermath);
palette = new HardwarePalette(renderer, Rules.Map); palette = new HardwarePalette(renderer, Rules.Map);

View File

@@ -14,9 +14,8 @@ namespace OpenRa.Game.Graphics
"fpls", "wcrate", "scrate", "barb", "sbag", "fpls", "wcrate", "scrate", "barb", "sbag",
}; };
Sprite[][] overlaySprites; readonly Sprite[][] overlaySprites;
readonly Sprite[] smudgeSprites;
Sprite[] smudgeSprites;
SpriteRenderer spriteRenderer; SpriteRenderer spriteRenderer;
Map map; Map map;
@@ -26,13 +25,10 @@ namespace OpenRa.Game.Graphics
this.spriteRenderer = new SpriteRenderer( renderer, true ); this.spriteRenderer = new SpriteRenderer( renderer, true );
this.map = map; this.map = map;
overlaySprites = new Sprite[ overlaySpriteNames.Length ][]; overlaySprites = overlaySpriteNames.Select(f => SpriteSheetBuilder.LoadAllSprites2(f)).ToArray();
for (int i = 0; i < overlaySpriteNames.Length; i++)
overlaySprites[i] = SpriteSheetBuilder.LoadAllSprites(overlaySpriteNames[i], ".shp", ".tem", ".sno");
smudgeSprites = new[] { "bib3", "bib2", "sc1", "sc2", "sc3", "sc4", "sc5", "sc6", smudgeSprites = new[] { "bib3", "bib2", "sc1", "sc2", "sc3", "sc4", "sc5", "sc6",
"cr1", "cr2", "cr3", "cr4", "cr5", "cr6", }.SelectMany( "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", }.SelectMany(
f => SpriteSheetBuilder.LoadAllSprites(f, ".shp", ".tem", ".sno")).ToArray(); f => SpriteSheetBuilder.LoadAllSprites2(f)).ToArray();
} }
public void Draw() public void Draw()

View File

@@ -5,6 +5,7 @@ namespace OpenRa.Game.Graphics
{ {
class Sequence class Sequence
{ {
readonly Sprite[] sprites;
readonly int start, length; readonly int start, length;
public readonly string Name; public readonly string Name;
@@ -17,13 +18,12 @@ namespace OpenRa.Game.Graphics
string srcOverride = e.GetAttribute("src"); string srcOverride = e.GetAttribute("src");
Name = e.GetAttribute("name"); Name = e.GetAttribute("name");
Range<int> src = UnitSheetBuilder.GetUnit( sprites = SpriteSheetBuilder.LoadAllSprites(string.IsNullOrEmpty(srcOverride) ? unit : srcOverride,
string.IsNullOrEmpty(srcOverride) ? unit : srcOverride); ".tem", ".sno", ".int", ".shp" );
start = int.Parse(e.GetAttribute("start"));
start = src.Start + int.Parse(e.GetAttribute("start"));
if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*") if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*")
length = src.End - src.Start + 1; length = sprites.Length - Start;
else if (e.HasAttribute("length")) else if (e.HasAttribute("length"))
length = int.Parse(e.GetAttribute("length")); length = int.Parse(e.GetAttribute("length"));
else if (e.HasAttribute("end")) else if (e.HasAttribute("end"))
@@ -34,7 +34,7 @@ namespace OpenRa.Game.Graphics
public Sprite GetSprite(int frame) public Sprite GetSprite(int frame)
{ {
return UnitSheetBuilder.sprites[ ( frame % length ) + start ]; return sprites[ ( frame % length ) + start ];
} }
} }
} }

View File

@@ -11,6 +11,12 @@ namespace OpenRa.Game.Graphics
} }
static Dictionary<string, Sprite[]> sprites; static Dictionary<string, Sprite[]> sprites;
static readonly string[] exts = { ".tem", ".sno", ".int", ".shp" };
public static Sprite[] LoadAllSprites2(string filename)
{
return LoadAllSprites(filename, exts);
}
public static Sprite[] LoadAllSprites( string filename, params string[] exts ) public static Sprite[] LoadAllSprites( string filename, params string[] exts )
{ {

View File

@@ -1,31 +0,0 @@
using System.Collections.Generic;
using Ijw.DirectX;
using IjwFramework.Collections;
using OpenRa.FileFormats;
namespace OpenRa.Game.Graphics
{
static class UnitSheetBuilder
{
public static void Initialize()
{
sprites = new List<Sprite>();
sequences = new Cache<string, Range<int>>(AddUnit);
}
public static List<Sprite> sprites;
static Cache<string, Range<int>> sequences;
public static Range<int> GetUnit(string name) { return sequences[name]; }
static Range<int> AddUnit( string name )
{
var low = sprites.Count;
var reader = new ShpReader( FileSystem.OpenWithExts( name, ".tem", ".sno", ".int", ".shp" ) );
foreach (var h in reader)
sprites.Add(SheetBuilder.Add(h.Image, reader.Size));
var sequence = new Range<int>(low, sprites.Count - 1);
return sequence;
}
}
}

View File

@@ -209,7 +209,6 @@
<Compile Include="UnitOrders.cs" /> <Compile Include="UnitOrders.cs" />
<Compile Include="Traits\Util.cs" /> <Compile Include="Traits\Util.cs" />
<Compile Include="UiOverlay.cs" /> <Compile Include="UiOverlay.cs" />
<Compile Include="Graphics\UnitSheetBuilder.cs" />
<Compile Include="Graphics\Util.cs" /> <Compile Include="Graphics\Util.cs" />
<Compile Include="Graphics\Vertex.cs" /> <Compile Include="Graphics\Vertex.cs" />
<Compile Include="Graphics\Viewport.cs" /> <Compile Include="Graphics\Viewport.cs" />