From dde1852b12840e08730938018a9d82d17a820c69 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@993157c7-ee19-0410-b2c4-bb4e9862e678> Date: Sat, 21 Jul 2007 04:16:15 +0000 Subject: [PATCH] beginnings of removing rampant ../../../ from sources git-svn-id: svn://svn.ijw.co.nz/svn/OpenRa@1318 993157c7-ee19-0410-b2c4-bb4e9862e678 --- OpenRa.FileFormats/Package.cs | 7 +++++- OpenRa.Game/FileSystem.cs | 40 +++++++++++++++++++++++++++++++ OpenRa.Game/HardwarePalette.cs | 4 ++-- OpenRa.Game/MainWindow.cs | 11 +++++---- OpenRa.Game/OpenRa.Game.csproj | 1 + OpenRa.Game/Renderer.cs | 2 +- OpenRa.Game/SequenceProvider.cs | 2 +- OpenRa.Game/Sidebar.cs | 5 ++-- OpenRa.Game/SpriteSheetBuilder.cs | 4 ++-- OpenRa.Game/TerrainCosts.cs | 2 +- OpenRa.Game/UnitSheetBuilder.cs | 16 ++----------- 11 files changed, 64 insertions(+), 30 deletions(-) create mode 100644 OpenRa.Game/FileSystem.cs diff --git a/OpenRa.FileFormats/Package.cs b/OpenRa.FileFormats/Package.cs index 95070cd55c..e0c3147ecf 100644 --- a/OpenRa.FileFormats/Package.cs +++ b/OpenRa.FileFormats/Package.cs @@ -5,7 +5,12 @@ using System.IO; namespace OpenRa.FileFormats { - public class Package + public interface IFolder + { + Stream GetContent(string filename); + } + + public class Package : IFolder { readonly string filename; readonly List index; diff --git a/OpenRa.Game/FileSystem.cs b/OpenRa.Game/FileSystem.cs new file mode 100644 index 0000000000..084d15c8b3 --- /dev/null +++ b/OpenRa.Game/FileSystem.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.IO; +using OpenRa.FileFormats; + +namespace OpenRa.Game +{ + class Folder : IFolder + { + readonly string path; + + public Folder(string path) { this.path = path; } + + public Stream GetContent(string filename) + { + try { return File.OpenRead(path + filename); } + catch { throw new FileNotFoundException("File not found", filename); } + } + } + + static class FileSystem + { + static List mountedFolders = new List(); + + public static void Mount(IFolder folder) + { + mountedFolders.Add(folder); + } + + public static Stream Open(string filename) + { + foreach (IFolder folder in mountedFolders) + try { return folder.GetContent(filename); } + catch { } + + throw new FileNotFoundException("File not found", filename); + } + } +} diff --git a/OpenRa.Game/HardwarePalette.cs b/OpenRa.Game/HardwarePalette.cs index 4a18910fc4..e7a415c2fe 100644 --- a/OpenRa.Game/HardwarePalette.cs +++ b/OpenRa.Game/HardwarePalette.cs @@ -23,12 +23,12 @@ namespace OpenRa.Game { this.device = device; - Palette pal = new Palette(File.OpenRead("../../../" + map.Theater + ".pal")); + Palette pal = new Palette(FileSystem.Open(map.Theater + ".pal")); AddPalette(pal); foreach (string remap in new string[] { "blue", "red", "orange", "teal", "salmon", "green", "gray" }) AddPalette(new Palette(pal, new PaletteRemap( - File.OpenRead("../../../" + remap + ".rem")))); + FileSystem.Open( remap + ".rem" )))); } void Resolve() diff --git a/OpenRa.Game/MainWindow.cs b/OpenRa.Game/MainWindow.cs index 79af72adaa..577d994788 100644 --- a/OpenRa.Game/MainWindow.cs +++ b/OpenRa.Game/MainWindow.cs @@ -33,6 +33,10 @@ namespace OpenRa.Game public MainWindow(Settings settings) { + FileSystem.Mount(new Folder("../../../")); + FileSystem.Mount(new Package("../../../conquer.mix")); + FileSystem.Mount(new Package("../../../hires.mix")); + FormBorderStyle = FormBorderStyle.None; BackColor = Color.Black; StartPosition = FormStartPosition.Manual; @@ -42,14 +46,11 @@ namespace OpenRa.Game bool windowed = !settings.GetValue("fullscreeen", false); renderer = new Renderer(this, GetResolution(settings), windowed); - - map = new Map(new IniFile(File.OpenRead("../../../" + settings.GetValue("map", "scm12ea.ini")))); - + map = new Map(new IniFile(FileSystem.Open(settings.GetValue("map", "scm12ea.ini")))); viewport = new Viewport(new float2(ClientSize), new float2(map.Size), renderer); SheetBuilder.Initialize(renderer.Device); - - TileMix = new Package("../../../" + map.Theater + ".mix"); + FileSystem.Mount(TileMix = new Package("../../../" + map.Theater + ".mix")); renderer.SetPalette(new HardwarePalette(renderer.Device, map)); terrain = new TerrainRenderer(renderer, map, TileMix, viewport); diff --git a/OpenRa.Game/OpenRa.Game.csproj b/OpenRa.Game/OpenRa.Game.csproj index 7802ddd2a2..e3c8a6c27c 100644 --- a/OpenRa.Game/OpenRa.Game.csproj +++ b/OpenRa.Game/OpenRa.Game.csproj @@ -43,6 +43,7 @@ + diff --git a/OpenRa.Game/Renderer.cs b/OpenRa.Game/Renderer.cs index 537778d391..da7f6d0b66 100644 --- a/OpenRa.Game/Renderer.cs +++ b/OpenRa.Game/Renderer.cs @@ -28,7 +28,7 @@ namespace OpenRa.Game device = GraphicsDevice.Create(host, resolution.Width, resolution.Height, windowed, false); - shader = new Effect(device, File.OpenRead("../../../" + shaderName)); + shader = new Effect(device, FileSystem.Open(shaderName)); shader.Quality = ShaderQuality.Low; baseTextureHandle = shader.GetHandle("DiffuseTexture"); diff --git a/OpenRa.Game/SequenceProvider.cs b/OpenRa.Game/SequenceProvider.cs index 7873b15949..8a7c2bd732 100644 --- a/OpenRa.Game/SequenceProvider.cs +++ b/OpenRa.Game/SequenceProvider.cs @@ -13,7 +13,7 @@ namespace OpenRa.Game static SequenceProvider() { XmlDocument document = new XmlDocument(); - document.Load("../../../sequences.xml"); + document.Load(FileSystem.Open("sequences.xml")); foreach (XmlElement eUnit in document.SelectNodes("/sequences/unit")) LoadSequencesForUnit(eUnit); diff --git a/OpenRa.Game/Sidebar.cs b/OpenRa.Game/Sidebar.cs index 41eeb09dda..74fb90424f 100644 --- a/OpenRa.Game/Sidebar.cs +++ b/OpenRa.Game/Sidebar.cs @@ -15,7 +15,7 @@ namespace OpenRa.Game TechTree.TechTree techTree = new TechTree.TechTree(); SpriteRenderer spriteRenderer; - Package package; + //Package package; Sprite blank; @@ -30,7 +30,6 @@ namespace OpenRa.Game techTree.Build("FACT", true); spriteRenderer = new SpriteRenderer(renderer, false); - package = new Package("../../../hires.mix"); LoadSprites("../../../buildings.txt"); LoadSprites("../../../units.txt"); @@ -42,7 +41,7 @@ namespace OpenRa.Game foreach (string line in File.ReadAllLines(filename)) { string key = line.Substring(0, line.IndexOf(',')); - sprites.Add(key, SpriteSheetBuilder.LoadSprite(package, key + "icon.shp")); + sprites.Add(key, SpriteSheetBuilder.LoadSprite(key + "icon.shp")); } } diff --git a/OpenRa.Game/SpriteSheetBuilder.cs b/OpenRa.Game/SpriteSheetBuilder.cs index bffb3c1511..784f917bc6 100644 --- a/OpenRa.Game/SpriteSheetBuilder.cs +++ b/OpenRa.Game/SpriteSheetBuilder.cs @@ -10,12 +10,12 @@ namespace OpenRa.Game static Dictionary sprites = new Dictionary(); - public static Sprite LoadSprite(Package package, string filename) + public static Sprite LoadSprite(string filename) { Sprite value; if (!sprites.TryGetValue(filename, out value)) { - ShpReader shp = new ShpReader(package.GetContent(filename)); + ShpReader shp = new ShpReader(FileSystem.Open(filename)); sprites.Add(filename, value = SheetBuilder.Add(shp[0].Image, shp.Size)); } diff --git a/OpenRa.Game/TerrainCosts.cs b/OpenRa.Game/TerrainCosts.cs index 62f17c6db8..4080ac9d11 100644 --- a/OpenRa.Game/TerrainCosts.cs +++ b/OpenRa.Game/TerrainCosts.cs @@ -36,7 +36,7 @@ namespace OpenRa.Game static TerrainCosts() { - IniFile file = new IniFile( File.OpenRead( "../../../rules.ini" ) ); + IniFile file = new IniFile(FileSystem.Open("rules.ini")); for( int i = 0 ; i < 10 ; i++ ) { diff --git a/OpenRa.Game/UnitSheetBuilder.cs b/OpenRa.Game/UnitSheetBuilder.cs index adc268ca8c..8fbda2abc2 100644 --- a/OpenRa.Game/UnitSheetBuilder.cs +++ b/OpenRa.Game/UnitSheetBuilder.cs @@ -9,22 +9,9 @@ namespace OpenRa.Game { static class UnitSheetBuilder { - static readonly Package unitsPackage = new Package( "../../../conquer.mix" ); - static readonly Package otherUnitsPackage = new Package("../../../hires.mix"); - public static readonly List sprites = new List(); - static Dictionary> sequences = new Dictionary>(); - static ShpReader Load(string filename) - { - foreach( Package p in new Package[] { unitsPackage, otherUnitsPackage } ) - try { return new ShpReader(p.GetContent(filename)); } - catch { } - - throw new NotImplementedException(); - } - public static Range GetUnit(string name) { Range result; @@ -39,7 +26,8 @@ namespace OpenRa.Game Log.Write("Loading SHP for {0}", name); int low = sprites.Count; - ShpReader reader = Load(name + ".shp"); + + ShpReader reader = new ShpReader(FileSystem.Open(name + ".shp")); foreach (ImageHeader h in reader) sprites.Add(SheetBuilder.Add(h.Image, reader.Size));