Remove GlobalFilesystem.OpenWithExts. Closes #5272.

This commit is contained in:
Paul Chote
2015-03-26 22:45:32 +00:00
parent 99283da84f
commit b2458fc614
26 changed files with 56 additions and 91 deletions

View File

@@ -47,37 +47,30 @@ namespace OpenRA.Editor
return bitmap;
}
static string[] SpriteExtensions(TileSet tileSet)
static readonly string[] LegacyExtensions = new[] { ".shp", ".tem", "" };
static string ResolveFilename(string name, TileSet tileSet)
{
var ssl = Game.ModData.SpriteSequenceLoader as TilesetSpecificSpriteSequenceLoader;
if (ssl == null)
return tileSet.Extensions;
var extensions = ssl != null ? new[] { ssl.TilesetExtensions[tileSet.Id], ssl.DefaultSpriteExtension }.Append(LegacyExtensions) :
LegacyExtensions.AsEnumerable();
return tileSet.Extensions.Append(ssl.TilesetExtensions[tileSet.Id], ssl.DefaultSpriteExtension).ToArray();
foreach (var e in extensions)
if (GlobalFileSystem.Exists(name + e))
return name + e;
return name;
}
public static ActorTemplate RenderActor(ActorInfo info, SequenceProvider sequenceProvider, TileSet tileset, IPalette p, string race)
{
var image = info.Traits.Get<ILegacyEditorRenderInfo>().EditorImage(info, sequenceProvider, race);
var exts = SpriteExtensions(tileset);
using (var s = GlobalFileSystem.OpenWithExts(image, exts))
image = ResolveFilename(image, tileset);
using (var s = GlobalFileSystem.Open(image))
{
var shp = new ShpTDSprite(s);
var bitmap = RenderShp(shp, p);
try
{
using (var s2 = GlobalFileSystem.OpenWithExts(image + "2", exts))
{
var shp2 = new ShpTDSprite(s2);
var roofBitmap = RenderShp(shp2, p);
using (var g = System.Drawing.Graphics.FromImage(bitmap))
g.DrawImage(roofBitmap, 0, 0);
}
}
catch { }
return new ActorTemplate
{
Bitmap = bitmap,
@@ -89,9 +82,8 @@ namespace OpenRA.Editor
public static ResourceTemplate RenderResourceType(ResourceTypeInfo info, TileSet tileset, IPalette p)
{
var image = info.EditorSprite;
var exts = SpriteExtensions(tileset);
using (var s = GlobalFileSystem.OpenWithExts(image, exts))
var image = ResolveFilename(info.EditorSprite, tileset);
using (var s = GlobalFileSystem.Open(image))
{
// TODO: Do this properly
var shp = new ShpTDSprite(s);

View File

@@ -50,7 +50,7 @@ namespace OpenRA.Editor
this.TileSize = Math.Min(tileSize.Width, tileSize.Height);
templates = new Dictionary<ushort, byte[][]>();
var frameCache = new FrameCache(Game.ModData.SpriteLoaders, tileset.Extensions);
var frameCache = new FrameCache(Game.ModData.SpriteLoaders);
foreach (var t in tileset.Templates)
{
var allFrames = frameCache[t.Value.Image];

View File

@@ -164,46 +164,39 @@ namespace OpenRA.FileSystem
return null;
}
public static Stream Open(string filename) { return OpenWithExts(filename, ""); }
public static Stream OpenWithExts(string filename, params string[] exts)
public static Stream Open(string filename)
{
Stream s;
if (!TryOpenWithExts(filename, exts, out s))
if (!TryOpen(filename, out s))
throw new FileNotFoundException("File not found: {0}".F(filename), filename);
return s;
}
public static bool TryOpenWithExts(string filename, string[] exts, out Stream s)
public static bool TryOpen(string filename, out Stream s)
{
// Check the cache for a quick lookup
if (filename.IndexOfAny(new char[] { '/', '\\' }) == -1)
{
foreach (var ext in exts)
{
s = GetFromCache(PackageHashType.Classic, filename + ext);
s = GetFromCache(PackageHashType.Classic, filename);
if (s != null)
return true;
s = GetFromCache(PackageHashType.CRC32, filename + ext);
s = GetFromCache(PackageHashType.CRC32, filename);
if (s != null)
return true;
}
}
foreach (var ext in exts)
{
var possibleName = filename + ext;
// Ask each package individually
var folder = MountedFolders
.Where(x => x.Exists(possibleName))
.Where(x => x.Exists(filename))
.MaxByOrDefault(x => x.Priority);
if (folder != null)
{
s = folder.GetContent(possibleName);
s = folder.GetContent(filename);
return true;
}
}
s = null;
return false;

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Graphics
Palettes = palettes.AsReadOnly();
var frameCache = new FrameCache(modData.SpriteLoaders, new string[0]);
var frameCache = new FrameCache(modData.SpriteLoaders);
var cursors = new Dictionary<string, CursorSequence>();
foreach (var s in nodesDict["Cursors"].Nodes)
foreach (var sequence in s.Value.Nodes)

View File

@@ -114,7 +114,7 @@ namespace OpenRA.Graphics
this.tileSet = tileSet;
// Every time we load a tile set, we create a sequence cache for it
spriteCache = Exts.Lazy(() => new SpriteCache(modData.SpriteLoaders, tileSet.Extensions, new SheetBuilder(SheetType.Indexed)));
spriteCache = Exts.Lazy(() => new SpriteCache(modData.SpriteLoaders, new SheetBuilder(SheetType.Indexed)));
}
public Sequences LoadSequences(Map map)

View File

@@ -35,13 +35,11 @@ namespace OpenRA.Graphics
public readonly SheetBuilder SheetBuilder;
readonly Cache<string, Sprite[]> sprites;
public SpriteCache(ISpriteLoader[] loaders, string[] exts, SheetBuilder sheetBuilder)
public SpriteCache(ISpriteLoader[] loaders, SheetBuilder sheetBuilder)
{
SheetBuilder = sheetBuilder;
// Include extension-less version
exts = exts.Append("").ToArray();
sprites = new Cache<string, Sprite[]>(filename => SpriteLoader.GetSprites(filename, exts, loaders, sheetBuilder));
sprites = new Cache<string, Sprite[]>(filename => SpriteLoader.GetSprites(filename, loaders, sheetBuilder));
}
public Sprite[] this[string filename] { get { return sprites[filename]; } }
@@ -51,11 +49,9 @@ namespace OpenRA.Graphics
{
readonly Cache<string, ISpriteFrame[]> frames;
public FrameCache(ISpriteLoader[] loaders, string[] exts)
public FrameCache(ISpriteLoader[] loaders)
{
// Include extension-less version
exts = exts.Append("").ToArray();
frames = new Cache<string, ISpriteFrame[]>(filename => SpriteLoader.GetFrames(filename, exts, loaders));
frames = new Cache<string, ISpriteFrame[]>(filename => SpriteLoader.GetFrames(filename, loaders));
}
public ISpriteFrame[] this[string filename] { get { return frames[filename]; } }
@@ -63,14 +59,14 @@ namespace OpenRA.Graphics
public static class SpriteLoader
{
public static Sprite[] GetSprites(string filename, string[] exts, ISpriteLoader[] loaders, SheetBuilder sheetBuilder)
public static Sprite[] GetSprites(string filename, ISpriteLoader[] loaders, SheetBuilder sheetBuilder)
{
return GetFrames(filename, exts, loaders).Select(a => sheetBuilder.Add(a)).ToArray();
return GetFrames(filename, loaders).Select(a => sheetBuilder.Add(a)).ToArray();
}
public static ISpriteFrame[] GetFrames(string filename, string[] exts, ISpriteLoader[] loaders)
public static ISpriteFrame[] GetFrames(string filename, ISpriteLoader[] loaders)
{
using (var stream = GlobalFileSystem.OpenWithExts(filename, exts))
using (var stream = GlobalFileSystem.Open(filename))
{
ISpriteFrame[] frames;
foreach (var loader in loaders)

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Graphics
sheetBuilder = new SheetBuilder(SheetType.Indexed, allocate);
templates = new Dictionary<ushort, Sprite[]>();
var frameCache = new FrameCache(Game.ModData.SpriteLoaders, tileset.Extensions);
var frameCache = new FrameCache(Game.ModData.SpriteLoaders);
foreach (var t in tileset.Templates)
{
var allFrames = frameCache[t.Value.Image];

View File

@@ -217,9 +217,9 @@ namespace OpenRA.Graphics
{
VxlReader vxl;
HvaReader hva;
using (var s = GlobalFileSystem.OpenWithExts(files.First, ".vxl"))
using (var s = GlobalFileSystem.Open(files.First + ".vxl"))
vxl = new VxlReader(s);
using (var s = GlobalFileSystem.OpenWithExts(files.Second, ".hva"))
using (var s = GlobalFileSystem.Open(files.Second + ".hva"))
hva = new HvaReader(s);
return new Voxel(this, vxl, hva);
}

View File

@@ -171,7 +171,6 @@ namespace OpenRA
public readonly int SheetSize = 512;
public readonly string Palette;
public readonly string PlayerPalette;
public readonly string[] Extensions;
public readonly int WaterPaletteRotationBase = 0x60;
public readonly byte MaxGroundHeight = 0;
public readonly Color[] HeightDebugColors = new[] { Color.Red };
@@ -222,12 +221,11 @@ namespace OpenRA
.Select(y => new TerrainTemplateInfo(this, y)).ToDictionary(t => t.Id);
}
public TileSet(string name, string id, string palette, string[] extensions, TerrainTypeInfo[] terrainInfo)
public TileSet(string name, string id, string palette, TerrainTypeInfo[] terrainInfo)
{
Name = name;
Id = id;
Palette = palette;
Extensions = extensions;
TerrainInfo = terrainInfo;
if (TerrainInfo.Length >= byte.MaxValue)

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
{
var ts = new TileSet(Game.ModData, t);
Console.WriteLine("Tileset: " + ts.Name);
var sc = new SpriteCache(modData.SpriteLoaders, ts.Extensions, new SheetBuilder(SheetType.Indexed));
var sc = new SpriteCache(modData.SpriteLoaders, new SheetBuilder(SheetType.Indexed));
var sequenceFiles = modData.Manifest.Sequences;
var nodes = sequenceFiles

View File

@@ -41,7 +41,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
var palette = new ImmutablePalette(args[2], shadowIndex);
var frames = SpriteLoader.GetFrames(src, new[] { "" }, modData.SpriteLoaders);
var frames = SpriteLoader.GetFrames(src, modData.SpriteLoaders);
var usePadding = !args.Contains("--nopadding");
var count = 0;

View File

@@ -25,7 +25,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
{
public string Name { get { return "--fix-classic-tilesets"; } }
[Desc("Fixes missing template tile definitions and adds filename extensions.")]
[Desc("EXTENSIONS", "Fixes missing template tile definitions and adds filename extensions.")]
public void Run(ModData modData, string[] args)
{
// HACK: The engine code assumes that Game.modData is set.
@@ -40,12 +40,12 @@ namespace OpenRA.Mods.Common.UtilityCommands
var terrainRightColorField = typeof(TerrainTileInfo).GetField("RightColor");
var empty = new Size(0, 0);
var single = new int2(1, 1);
var exts = new[] { "" }.Concat(args[1].Split(','));
foreach (var t in Game.ModData.Manifest.TileSets)
{
var ts = new TileSet(Game.ModData, t);
var exts = new[] { "" }.Concat(ts.Extensions);
var frameCache = new FrameCache(Game.ModData.SpriteLoaders, ts.Extensions);
var frameCache = new FrameCache(Game.ModData.SpriteLoaders);
Console.WriteLine("Tileset: " + ts.Name);
foreach (var template in ts.Templates.Values)
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
foreach (var ext in exts)
{
Stream s;
if (!GlobalFileSystem.TryOpenWithExts(template.Image, new[] { ext }, out s))
if (!GlobalFileSystem.TryOpen(template.Image + ext, out s))
continue;
// Rewrite the template image (normally readonly) using reflection

View File

@@ -348,7 +348,7 @@ namespace OpenRA.TilesetBuilder
if (tilesetName.Length < 1) tilesetName = "Temperat";
if (tilesetID.Length < 1) tilesetID = "TEMPERAT";
if (tilesetPalette.Length < 1) tilesetPalette = "temperat";
if (tilesetExt.Length < 1) tilesetExt = ".tem,.shp";
if (tilesetExt.Length < 1) tilesetExt = ".tem";
// Create a Tileset definition
// TODO: Pull this info from the GUI
@@ -359,12 +359,10 @@ namespace OpenRA.TilesetBuilder
else
tilesetFile = tilesetName.ToLower().Substring(0, 8) + ".yaml";
var ext = tilesetExt.Split(',');
var tileset = new TileSet(
name: tilesetName,
id: tilesetID.ToUpper(),
palette: tilesetPalette.ToLower(),
extensions: new string[] { ext[0], ext[1] },
terrainInfo: TerrainType);
// List of files to add to the mix file
@@ -376,7 +374,7 @@ namespace OpenRA.TilesetBuilder
// Export tile artwork
foreach (var t in surface1.Templates)
fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tileset.Extensions.First(), dir));
fileList.Add(ExportTemplate(t, surface1.Templates.IndexOf(t), tilesetExt, dir));
// Add the templates
ushort cur = 0;

View File

@@ -2,7 +2,6 @@ General:
Name: Desert
Id: DESERT
Palette: desert.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge

View File

@@ -2,7 +2,6 @@ General:
Name: Jungle
Id: JUNGLE
Palette: jungle.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge

View File

@@ -2,7 +2,6 @@ General:
Name: Snow
Id: SNOW
Palette: snow.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge

View File

@@ -2,7 +2,6 @@ General:
Name: Temperate
Id: TEMPERAT
Palette: temperat.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge

View File

@@ -2,7 +2,6 @@ General:
Name: Winter
Id: WINTER
Palette: winter.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge

View File

@@ -121,7 +121,7 @@ World:
ResourceType: 1
Palette: d2k
TerrainType: Spice
EditorSprite: spice0
EditorSprite: spice0.shp
Variants: spice
MaxDensity: 20
ValuePerUnit: 25

View File

@@ -3,7 +3,6 @@ General:
Id: ARRAKIS
SheetSize: 1024
Palette: d2k.pal
Extensions: # Obsolete
EditorTemplateOrder: Basic, Dune, Sand-Detail, Brick, Sand-Cliff, Sand-Smooth, Cliff-Type-Changer, Rock-Sand-Smooth, Rock-Detail, Rock-Cliff, Rock-Cliff-Rock, Rotten-Base, Dead-Worm, Ice, Ice-Detail, Rock-Cliff-Sand, Sand-Platform, Unidentified
IgnoreTileSpriteOffsets: True

View File

@@ -3,7 +3,6 @@ General:
Id: DESERT
Palette: desert.pal
PlayerPalette: temperat.pal
Extensions: # Obsolete
WaterPaletteRotationBase: 32
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge

View File

@@ -2,7 +2,6 @@ General:
Name: Interior
Id: INTERIOR
Palette: interior.pal
Extensions: # Obsolete
EditorTemplateOrder: Floor, Wall
Terrain:

View File

@@ -2,7 +2,6 @@ General:
Name: Snow
Id: SNOW
Palette: snow.pal
Extensions: # Obsolete
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge
Terrain:

View File

@@ -2,7 +2,6 @@ General:
Name: Temperate
Id: TEMPERAT
Palette: temperat.pal
Extensions: # Obsolete
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Water Cliffs, Beach, River, Bridge
Terrain:

View File

@@ -1,7 +1,6 @@
General:
Name: Snow
Id: SNOW
Extensions: .sno, .shp
Palette: isosno.pal
MaxGroundHeight: 16
HeightDebugColors: 128,0,0,0, 128,0,0,68, 128,0,0,136, 128,0,0,204, 128,0,0,255, 128,68,0,204, 128,136,0,136, 128,204,0,68, 128,255,17,0, 128,255,85,0, 128,255,153,0, 128,255,221,0, 128,221,255,0, 128,153,255,0, 128,85,255,0, 128,17,255,0

View File

@@ -1,7 +1,6 @@
General:
Name: Temperate
Id: TEMPERAT
Extensions: # Obsolete
Palette: isotem.pal
MaxGroundHeight: 16
HeightDebugColors: 128,0,0,0, 128,0,0,68, 128,0,0,136, 128,0,0,204, 128,0,0,255, 128,68,0,204, 128,136,0,136, 128,204,0,68, 128,255,17,0, 128,255,85,0, 128,255,153,0, 128,255,221,0, 128,221,255,0, 128,153,255,0, 128,85,255,0, 128,17,255,0