Remove GlobalFilesystem.OpenWithExts. Closes #5272.
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -164,45 +164,38 @@ 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);
|
||||
if (s != null)
|
||||
return true;
|
||||
s = GetFromCache(PackageHashType.Classic, filename);
|
||||
if (s != null)
|
||||
return true;
|
||||
|
||||
s = GetFromCache(PackageHashType.CRC32, filename + ext);
|
||||
if (s != null)
|
||||
return true;
|
||||
}
|
||||
s = GetFromCache(PackageHashType.CRC32, filename);
|
||||
if (s != null)
|
||||
return true;
|
||||
}
|
||||
|
||||
foreach (var ext in exts)
|
||||
{
|
||||
var possibleName = filename + ext;
|
||||
var folder = MountedFolders
|
||||
.Where(x => x.Exists(possibleName))
|
||||
.MaxByOrDefault(x => x.Priority);
|
||||
// Ask each package individually
|
||||
var folder = MountedFolders
|
||||
.Where(x => x.Exists(filename))
|
||||
.MaxByOrDefault(x => x.Priority);
|
||||
|
||||
if (folder != null)
|
||||
{
|
||||
s = folder.GetContent(possibleName);
|
||||
return true;
|
||||
}
|
||||
if (folder != null)
|
||||
{
|
||||
s = folder.GetContent(filename);
|
||||
return true;
|
||||
}
|
||||
|
||||
s = null;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Desert
|
||||
Id: DESERT
|
||||
Palette: desert.pal
|
||||
Extensions: # Obsolete
|
||||
WaterPaletteRotationBase: 32
|
||||
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Jungle
|
||||
Id: JUNGLE
|
||||
Palette: jungle.pal
|
||||
Extensions: # Obsolete
|
||||
WaterPaletteRotationBase: 32
|
||||
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Snow
|
||||
Id: SNOW
|
||||
Palette: snow.pal
|
||||
Extensions: # Obsolete
|
||||
WaterPaletteRotationBase: 32
|
||||
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Temperate
|
||||
Id: TEMPERAT
|
||||
Palette: temperat.pal
|
||||
Extensions: # Obsolete
|
||||
WaterPaletteRotationBase: 32
|
||||
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Winter
|
||||
Id: WINTER
|
||||
Palette: winter.pal
|
||||
Extensions: # Obsolete
|
||||
WaterPaletteRotationBase: 32
|
||||
EditorTemplateOrder: Terrain, Debris, Road, Cliffs, Beach, River, Bridge
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ World:
|
||||
ResourceType: 1
|
||||
Palette: d2k
|
||||
TerrainType: Spice
|
||||
EditorSprite: spice0
|
||||
EditorSprite: spice0.shp
|
||||
Variants: spice
|
||||
MaxDensity: 20
|
||||
ValuePerUnit: 25
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ General:
|
||||
Name: Interior
|
||||
Id: INTERIOR
|
||||
Palette: interior.pal
|
||||
Extensions: # Obsolete
|
||||
EditorTemplateOrder: Floor, Wall
|
||||
|
||||
Terrain:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user