Unstatic GlobalFileSystem and rename it to FileSystem
Add a ModFiles field on ModData and move all access to the file system to go through that.
This commit is contained in:
@@ -39,14 +39,14 @@ namespace OpenRA.FileSystem
|
||||
|
||||
// Build the index and dispose the stream, it is no longer needed after this
|
||||
List<IdxEntry> entries;
|
||||
using (var indexStream = GlobalFileSystem.Open(indexFilename))
|
||||
using (var indexStream = Game.ModData.ModFiles.Open(indexFilename))
|
||||
entries = new IdxReader(indexStream).Entries;
|
||||
|
||||
index = entries.ToDictionaryWithConflictLog(x => x.Hash,
|
||||
"{0} (bag format)".F(filename),
|
||||
null, x => "(offs={0}, len={1})".F(x.Offset, x.Length));
|
||||
|
||||
s = GlobalFileSystem.Open(filename);
|
||||
s = Game.ModData.ModFiles.Open(filename);
|
||||
}
|
||||
|
||||
public int Priority { get { return 1000 + bagFilePriority; } }
|
||||
@@ -159,9 +159,9 @@ namespace OpenRA.FileSystem
|
||||
public IEnumerable<string> AllFileNames()
|
||||
{
|
||||
var lookup = new Dictionary<uint, string>();
|
||||
if (GlobalFileSystem.Exists("global mix database.dat"))
|
||||
if (Game.ModData.ModFiles.Exists("global mix database.dat"))
|
||||
{
|
||||
var db = new XccGlobalDatabase(GlobalFileSystem.Open("global mix database.dat"));
|
||||
var db = new XccGlobalDatabase(Game.ModData.ModFiles.Open("global mix database.dat"));
|
||||
foreach (var e in db.Entries)
|
||||
{
|
||||
var hash = IdxEntry.HashFilename(e, PackageHashType.CRC32);
|
||||
@@ -175,7 +175,7 @@ namespace OpenRA.FileSystem
|
||||
|
||||
public void Write(Dictionary<string, byte[]> contents)
|
||||
{
|
||||
GlobalFileSystem.Unmount(this);
|
||||
Game.ModData.ModFiles.Unmount(this);
|
||||
throw new NotImplementedException("Updating bag files unsupported");
|
||||
}
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace OpenRA.FileSystem
|
||||
Name = filename;
|
||||
Priority = priority;
|
||||
|
||||
s = GlobalFileSystem.Open(filename);
|
||||
s = Game.ModData.ModFiles.Open(filename);
|
||||
try
|
||||
{
|
||||
if (s.ReadASCII(4) != "BIGF")
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace OpenRA.FileSystem
|
||||
this.filename = filename;
|
||||
this.priority = priority;
|
||||
|
||||
s = GlobalFileSystem.Open(filename);
|
||||
s = Game.ModData.ModFiles.Open(filename);
|
||||
try
|
||||
{
|
||||
filenames = new List<string>();
|
||||
|
||||
@@ -17,34 +17,16 @@ using OpenRA.Primitives;
|
||||
|
||||
namespace OpenRA.FileSystem
|
||||
{
|
||||
public static class GlobalFileSystem
|
||||
public class FileSystem
|
||||
{
|
||||
public static List<IFolder> MountedFolders = new List<IFolder>();
|
||||
static Cache<uint, List<IFolder>> classicHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
||||
static Cache<uint, List<IFolder>> crcHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
||||
public readonly List<string> FolderPaths = new List<string>();
|
||||
public readonly List<IFolder> MountedFolders = new List<IFolder>();
|
||||
|
||||
public static List<string> FolderPaths = new List<string>();
|
||||
static readonly Dictionary<string, Assembly> AssemblyCache = new Dictionary<string, Assembly>();
|
||||
|
||||
static void MountInner(IFolder folder)
|
||||
{
|
||||
MountedFolders.Add(folder);
|
||||
|
||||
foreach (var hash in folder.ClassicHashes())
|
||||
{
|
||||
var l = classicHashIndex[hash];
|
||||
if (!l.Contains(folder))
|
||||
l.Add(folder);
|
||||
}
|
||||
|
||||
foreach (var hash in folder.CrcHashes())
|
||||
{
|
||||
var l = crcHashIndex[hash];
|
||||
if (!l.Contains(folder))
|
||||
l.Add(folder);
|
||||
}
|
||||
}
|
||||
|
||||
static int order = 0;
|
||||
int order;
|
||||
Cache<uint, List<IFolder>> crcHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
||||
Cache<uint, List<IFolder>> classicHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
||||
|
||||
public static IFolder CreatePackage(string filename, int order, Dictionary<string, byte[]> content)
|
||||
{
|
||||
@@ -99,7 +81,13 @@ namespace OpenRA.FileSystem
|
||||
return new Folder(filename, order);
|
||||
}
|
||||
|
||||
public static void Mount(string name, string annotation = null)
|
||||
public void Mount(IFolder mount)
|
||||
{
|
||||
if (!MountedFolders.Contains(mount))
|
||||
MountedFolders.Add(mount);
|
||||
}
|
||||
|
||||
public void Mount(string name, string annotation = null)
|
||||
{
|
||||
var optional = name.StartsWith("~");
|
||||
if (optional)
|
||||
@@ -117,7 +105,34 @@ namespace OpenRA.FileSystem
|
||||
a();
|
||||
}
|
||||
|
||||
public static void UnmountAll()
|
||||
void MountInner(IFolder folder)
|
||||
{
|
||||
MountedFolders.Add(folder);
|
||||
|
||||
foreach (var hash in folder.ClassicHashes())
|
||||
{
|
||||
var folderList = classicHashIndex[hash];
|
||||
if (!folderList.Contains(folder))
|
||||
folderList.Add(folder);
|
||||
}
|
||||
|
||||
foreach (var hash in folder.CrcHashes())
|
||||
{
|
||||
var folderList = crcHashIndex[hash];
|
||||
if (!folderList.Contains(folder))
|
||||
folderList.Add(folder);
|
||||
}
|
||||
}
|
||||
|
||||
public bool Unmount(IFolder mount)
|
||||
{
|
||||
if (MountedFolders.Contains(mount))
|
||||
mount.Dispose();
|
||||
|
||||
return MountedFolders.RemoveAll(f => f == mount) > 0;
|
||||
}
|
||||
|
||||
public void UnmountAll()
|
||||
{
|
||||
foreach (var folder in MountedFolders)
|
||||
folder.Dispose();
|
||||
@@ -128,20 +143,7 @@ namespace OpenRA.FileSystem
|
||||
crcHashIndex = new Cache<uint, List<IFolder>>(_ => new List<IFolder>());
|
||||
}
|
||||
|
||||
public static bool Unmount(IFolder mount)
|
||||
{
|
||||
if (MountedFolders.Contains(mount))
|
||||
mount.Dispose();
|
||||
|
||||
return MountedFolders.RemoveAll(f => f == mount) > 0;
|
||||
}
|
||||
|
||||
public static void Mount(IFolder mount)
|
||||
{
|
||||
if (!MountedFolders.Contains(mount)) MountedFolders.Add(mount);
|
||||
}
|
||||
|
||||
public static void LoadFromManifest(Manifest manifest)
|
||||
public void LoadFromManifest(Manifest manifest)
|
||||
{
|
||||
UnmountAll();
|
||||
foreach (var dir in manifest.Folders)
|
||||
@@ -151,7 +153,7 @@ namespace OpenRA.FileSystem
|
||||
Mount(pkg.Key, pkg.Value);
|
||||
}
|
||||
|
||||
static Stream GetFromCache(PackageHashType type, string filename)
|
||||
Stream GetFromCache(PackageHashType type, string filename)
|
||||
{
|
||||
var index = type == PackageHashType.CRC32 ? crcHashIndex : classicHashIndex;
|
||||
var folder = index[PackageEntry.HashFilename(filename, type)]
|
||||
@@ -164,7 +166,7 @@ namespace OpenRA.FileSystem
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Stream Open(string filename)
|
||||
public Stream Open(string filename)
|
||||
{
|
||||
Stream s;
|
||||
if (!TryOpen(filename, out s))
|
||||
@@ -173,7 +175,7 @@ namespace OpenRA.FileSystem
|
||||
return s;
|
||||
}
|
||||
|
||||
public static bool TryOpen(string name, out Stream s)
|
||||
public bool TryOpen(string name, out Stream s)
|
||||
{
|
||||
var filename = name;
|
||||
var foldername = string.Empty;
|
||||
@@ -217,7 +219,7 @@ namespace OpenRA.FileSystem
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool Exists(string name)
|
||||
public bool Exists(string name)
|
||||
{
|
||||
var explicitFolder = name.Contains(':') && !Directory.Exists(Path.GetDirectoryName(name));
|
||||
if (explicitFolder)
|
||||
@@ -231,8 +233,6 @@ namespace OpenRA.FileSystem
|
||||
return MountedFolders.Any(f => f.Exists(name));
|
||||
}
|
||||
|
||||
static Dictionary<string, Assembly> assemblyCache = new Dictionary<string, Assembly>();
|
||||
|
||||
public static Assembly ResolveAssembly(object sender, ResolveEventArgs e)
|
||||
{
|
||||
foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
|
||||
@@ -243,15 +243,15 @@ namespace OpenRA.FileSystem
|
||||
var filename = frags[0] + ".dll";
|
||||
|
||||
Assembly a;
|
||||
if (assemblyCache.TryGetValue(filename, out a))
|
||||
if (AssemblyCache.TryGetValue(filename, out a))
|
||||
return a;
|
||||
|
||||
if (Exists(filename))
|
||||
using (var s = Open(filename))
|
||||
if (Game.ModData.ModFiles.Exists(filename))
|
||||
using (var s = Game.ModData.ModFiles.Open(filename))
|
||||
{
|
||||
var buf = s.ReadBytes((int)s.Length);
|
||||
a = Assembly.Load(buf);
|
||||
assemblyCache.Add(filename, a);
|
||||
AssemblyCache.Add(filename, a);
|
||||
return a;
|
||||
}
|
||||
|
||||
@@ -14,11 +14,10 @@ using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using ICSharpCode.SharpZipLib.Zip.Compression;
|
||||
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
|
||||
|
||||
namespace OpenRA.FileSystem
|
||||
{
|
||||
public class InstallShieldCABExtractor : IDisposable, IFolder
|
||||
public class InstallShieldCABExtractor : IFolder
|
||||
{
|
||||
const uint FileSplit = 0x1;
|
||||
const uint FileObfuscated = 0x2;
|
||||
@@ -277,7 +276,7 @@ namespace OpenRA.FileSystem
|
||||
cabFile.Dispose();
|
||||
|
||||
++volumeNumber;
|
||||
cabFile = GlobalFileSystem.Open("{0}{1}.cab".F(commonName, volumeNumber));
|
||||
cabFile = Game.ModData.ModFiles.Open("{0}{1}.cab".F(commonName, volumeNumber));
|
||||
if (cabFile.ReadUInt32() != 0x28635349)
|
||||
throw new InvalidDataException("Not an Installshield CAB package");
|
||||
|
||||
@@ -341,7 +340,7 @@ namespace OpenRA.FileSystem
|
||||
var fileGroupOffsets = new List<uint>();
|
||||
|
||||
this.priority = priority;
|
||||
hdrFile = GlobalFileSystem.Open(hdrFilename);
|
||||
hdrFile = Game.ModData.ModFiles.Open(hdrFilename);
|
||||
|
||||
// Strips archive number AND file extension
|
||||
commonName = Regex.Replace(hdrFilename, @"\d*\.[^\.]*$", "");
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace OpenRA.FileSystem
|
||||
|
||||
filenames = new List<string>();
|
||||
|
||||
s = GlobalFileSystem.Open(filename);
|
||||
s = Game.ModData.ModFiles.Open(filename);
|
||||
try
|
||||
{
|
||||
// Parse package header
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace OpenRA.FileSystem
|
||||
this.priority = priority;
|
||||
this.type = type;
|
||||
|
||||
s = GlobalFileSystem.Open(filename);
|
||||
s = Game.ModData.ModFiles.Open(filename);
|
||||
try
|
||||
{
|
||||
// Detect format type
|
||||
@@ -223,9 +223,9 @@ namespace OpenRA.FileSystem
|
||||
}
|
||||
}
|
||||
|
||||
if (GlobalFileSystem.Exists("global mix database.dat"))
|
||||
if (Game.ModData.ModFiles.Exists("global mix database.dat"))
|
||||
{
|
||||
var db = new XccGlobalDatabase(GlobalFileSystem.Open("global mix database.dat"));
|
||||
var db = new XccGlobalDatabase(Game.ModData.ModFiles.Open("global mix database.dat"));
|
||||
foreach (var e in db.Entries)
|
||||
{
|
||||
var hash = PackageEntry.HashFilename(e, type);
|
||||
@@ -249,7 +249,7 @@ namespace OpenRA.FileSystem
|
||||
{
|
||||
// Cannot modify existing mixfile - rename existing file and
|
||||
// create a new one with original content plus modifications
|
||||
GlobalFileSystem.Unmount(this);
|
||||
Game.ModData.ModFiles.Unmount(this);
|
||||
|
||||
// TODO: Add existing data to the contents list
|
||||
if (index.Count > 0)
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace OpenRA.FileSystem
|
||||
this.priority = priority;
|
||||
index = new Dictionary<string, Entry>();
|
||||
|
||||
stream = GlobalFileSystem.Open(filename);
|
||||
stream = Game.ModData.ModFiles.Open(filename);
|
||||
try
|
||||
{
|
||||
index = new Dictionary<string, Entry>();
|
||||
|
||||
@@ -17,7 +17,6 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading;
|
||||
using OpenRA.Chat;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Network;
|
||||
using OpenRA.Primitives;
|
||||
@@ -196,7 +195,7 @@ namespace OpenRA
|
||||
{
|
||||
Console.WriteLine("Platform is {0}", Platform.CurrentPlatform);
|
||||
|
||||
AppDomain.CurrentDomain.AssemblyResolve += GlobalFileSystem.ResolveAssembly;
|
||||
AppDomain.CurrentDomain.AssemblyResolve += FileSystem.FileSystem.ResolveAssembly;
|
||||
|
||||
InitializeSettings(args);
|
||||
|
||||
@@ -219,7 +218,7 @@ namespace OpenRA
|
||||
|
||||
GeoIP.Initialize();
|
||||
|
||||
GlobalFileSystem.Mount(Platform.GameDir); // Needed to access shaders
|
||||
ModData.ModFiles.Mount(Platform.GameDir); // Needed to access shaders
|
||||
var renderers = new[] { Settings.Graphics.Renderer, "Default", null };
|
||||
foreach (var r in renderers)
|
||||
{
|
||||
@@ -280,7 +279,11 @@ namespace OpenRA
|
||||
OrderManager.Dispose();
|
||||
|
||||
if (ModData != null)
|
||||
{
|
||||
ModData.ModFiles.UnmountAll();
|
||||
ModData.Dispose();
|
||||
}
|
||||
|
||||
ModData = null;
|
||||
|
||||
// Fall back to default if the mod doesn't exist or has missing prerequisites.
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#endregion
|
||||
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.FileSystem;
|
||||
|
||||
namespace OpenRA.GameRules
|
||||
{
|
||||
@@ -36,11 +35,11 @@ namespace OpenRA.GameRules
|
||||
|
||||
public void Load()
|
||||
{
|
||||
if (!GlobalFileSystem.Exists(Filename))
|
||||
if (!Game.ModData.ModFiles.Exists(Filename))
|
||||
return;
|
||||
|
||||
Exists = true;
|
||||
using (var s = GlobalFileSystem.Open(Filename))
|
||||
using (var s = Game.ModData.ModFiles.Open(Filename))
|
||||
{
|
||||
if (Filename.ToLowerInvariant().EndsWith("wav"))
|
||||
Length = (int)WavLoader.WaveLength(s);
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#endregion
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
@@ -110,7 +111,9 @@ namespace OpenRA.Graphics
|
||||
sheet = cachedSheets[mi.Src];
|
||||
else
|
||||
{
|
||||
sheet = new Sheet(SheetType.BGRA, mi.Src);
|
||||
using (var stream = Game.ModData.ModFiles.Open(mi.Src))
|
||||
sheet = new Sheet(SheetType.BGRA, stream);
|
||||
|
||||
cachedSheets.Add(mi.Src, sheet);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Primitives;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
{
|
||||
@@ -42,7 +39,7 @@ namespace OpenRA.Graphics
|
||||
|
||||
var palettes = new Dictionary<string, ImmutablePalette>();
|
||||
foreach (var p in nodesDict["Palettes"].Nodes)
|
||||
palettes.Add(p.Key, new ImmutablePalette(GlobalFileSystem.Open(p.Value.Value), shadowIndex));
|
||||
palettes.Add(p.Key, new ImmutablePalette(modData.ModFiles.Open(p.Value.Value), shadowIndex));
|
||||
|
||||
Palettes = palettes.AsReadOnly();
|
||||
|
||||
|
||||
@@ -11,8 +11,9 @@
|
||||
using System;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Imaging;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using OpenRA.FileSystem;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
{
|
||||
@@ -47,9 +48,8 @@ namespace OpenRA.Graphics
|
||||
Size = texture.Size;
|
||||
}
|
||||
|
||||
public Sheet(SheetType type, string filename)
|
||||
public Sheet(SheetType type, Stream stream)
|
||||
{
|
||||
using (var stream = GlobalFileSystem.Open(filename))
|
||||
using (var bitmap = (Bitmap)Image.FromStream(stream))
|
||||
{
|
||||
Size = bitmap.Size;
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Primitives;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
@@ -66,7 +65,7 @@ namespace OpenRA.Graphics
|
||||
|
||||
public static ISpriteFrame[] GetFrames(string filename, ISpriteLoader[] loaders)
|
||||
{
|
||||
using (var stream = GlobalFileSystem.Open(filename))
|
||||
using (var stream = Game.ModData.ModFiles.Open(filename))
|
||||
{
|
||||
ISpriteFrame[] frames;
|
||||
foreach (var loader in loaders)
|
||||
|
||||
@@ -13,7 +13,6 @@ using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Linq;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Primitives;
|
||||
|
||||
namespace OpenRA.Graphics
|
||||
@@ -217,9 +216,9 @@ namespace OpenRA.Graphics
|
||||
{
|
||||
VxlReader vxl;
|
||||
HvaReader hva;
|
||||
using (var s = GlobalFileSystem.Open(files.First + ".vxl"))
|
||||
using (var s = Game.ModData.ModFiles.Open(files.First + ".vxl"))
|
||||
vxl = new VxlReader(s);
|
||||
using (var s = GlobalFileSystem.Open(files.Second + ".hva"))
|
||||
using (var s = Game.ModData.ModFiles.Open(files.Second + ".hva"))
|
||||
hva = new HvaReader(s, files.Second + ".hva");
|
||||
return new Voxel(this, vxl, hva);
|
||||
}
|
||||
|
||||
@@ -317,7 +317,7 @@ namespace OpenRA
|
||||
public Map(string path)
|
||||
{
|
||||
Path = path;
|
||||
Container = GlobalFileSystem.OpenPackage(path, null, int.MaxValue);
|
||||
Container = FileSystem.FileSystem.OpenPackage(path, null, int.MaxValue);
|
||||
|
||||
AssertExists("map.yaml");
|
||||
AssertExists("map.bin");
|
||||
@@ -650,7 +650,7 @@ namespace OpenRA
|
||||
Path = toPath;
|
||||
|
||||
// Create a new map package
|
||||
Container = GlobalFileSystem.CreatePackage(Path, int.MaxValue, entries);
|
||||
Container = FileSystem.FileSystem.CreatePackage(Path, int.MaxValue, entries);
|
||||
}
|
||||
|
||||
// Update existing package
|
||||
|
||||
@@ -12,7 +12,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using OpenRA.FileSystem;
|
||||
|
||||
namespace OpenRA
|
||||
{
|
||||
@@ -230,12 +229,6 @@ namespace OpenRA
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static List<MiniYamlNode> FromFileInPackage(string path)
|
||||
{
|
||||
using (var stream = GlobalFileSystem.Open(path))
|
||||
return FromLines(stream.ReadAllLines(), path);
|
||||
}
|
||||
|
||||
public static Dictionary<string, MiniYaml> DictFromFile(string path)
|
||||
{
|
||||
return FromFile(path).ToDictionary(x => x.Key, x => x.Value);
|
||||
|
||||
@@ -13,9 +13,9 @@ using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Widgets;
|
||||
using FS = OpenRA.FileSystem.FileSystem;
|
||||
|
||||
namespace OpenRA
|
||||
{
|
||||
@@ -31,8 +31,9 @@ namespace OpenRA
|
||||
public ILoadScreen LoadScreen { get; private set; }
|
||||
public VoxelLoader VoxelLoader { get; private set; }
|
||||
public CursorProvider CursorProvider { get; private set; }
|
||||
public FS ModFiles = new FS();
|
||||
|
||||
Lazy<Ruleset> defaultRules;
|
||||
readonly Lazy<Ruleset> defaultRules;
|
||||
public Ruleset DefaultRules { get { return defaultRules.Value; } }
|
||||
|
||||
public ModData(string mod, bool useLoadScreen = false)
|
||||
@@ -95,7 +96,7 @@ namespace OpenRA
|
||||
|
||||
public void MountFiles()
|
||||
{
|
||||
GlobalFileSystem.LoadFromManifest(Manifest);
|
||||
ModFiles.LoadFromManifest(Manifest);
|
||||
}
|
||||
|
||||
public void InitializeLoaders()
|
||||
@@ -166,10 +167,10 @@ namespace OpenRA
|
||||
|
||||
// Reinitialize all our assets
|
||||
InitializeLoaders();
|
||||
GlobalFileSystem.LoadFromManifest(Manifest);
|
||||
ModFiles.LoadFromManifest(Manifest);
|
||||
|
||||
// Mount map package so custom assets can be used. TODO: check priority.
|
||||
GlobalFileSystem.Mount(GlobalFileSystem.OpenPackage(map.Path, null, int.MaxValue));
|
||||
ModFiles.Mount(FS.OpenPackage(map.Path, null, int.MaxValue));
|
||||
|
||||
using (new Support.PerfTimer("Map.PreloadRules"))
|
||||
map.PreloadRules();
|
||||
|
||||
@@ -95,6 +95,7 @@
|
||||
<Compile Include="Actor.cs" />
|
||||
<Compile Include="CacheStorage.cs" />
|
||||
<Compile Include="FileSystem\IdxEntry.cs" />
|
||||
<Compile Include="FileSystem\IFolder.cs" />
|
||||
<Compile Include="LogProxy.cs" />
|
||||
<Compile Include="FileFormats\IdxReader.cs" />
|
||||
<Compile Include="FileSystem\BagFile.cs" />
|
||||
@@ -321,7 +322,7 @@
|
||||
<Compile Include="Settings.cs" />
|
||||
<Compile Include="Graphics\PlayerColorRemap.cs" />
|
||||
<Compile Include="Graphics\Palette.cs" />
|
||||
<Compile Include="FileSystem\GlobalFileSystem.cs" />
|
||||
<Compile Include="FileSystem\FileSystem.cs" />
|
||||
<Compile Include="FileFormats\ReplayMetadata.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
||||
@@ -11,12 +11,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using Eluant;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Support;
|
||||
@@ -133,7 +130,7 @@ namespace OpenRA.Scripting
|
||||
.ToArray();
|
||||
|
||||
runtime.Globals["GameDir"] = Platform.GameDir;
|
||||
runtime.DoBuffer(GlobalFileSystem.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua")).ReadAllText(), "scriptwrapper.lua").Dispose();
|
||||
runtime.DoBuffer(Game.ModData.ModFiles.Open(Platform.ResolvePath(".", "lua", "scriptwrapper.lua")).ReadAllText(), "scriptwrapper.lua").Dispose();
|
||||
tick = (LuaFunction)runtime.Globals["Tick"];
|
||||
|
||||
// Register globals
|
||||
@@ -172,7 +169,7 @@ namespace OpenRA.Scripting
|
||||
using (var loadScript = (LuaFunction)runtime.Globals["ExecuteSandboxedScript"])
|
||||
{
|
||||
foreach (var s in scripts)
|
||||
loadScript.Call(s, GlobalFileSystem.Open(s).ReadAllText()).Dispose();
|
||||
loadScript.Call(s, Game.ModData.ModFiles.Open(s).ReadAllText()).Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,14 +9,11 @@
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.GameRules;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA
|
||||
{
|
||||
@@ -48,17 +45,17 @@ namespace OpenRA
|
||||
|
||||
ISoundSource LoadSound(string filename)
|
||||
{
|
||||
if (!GlobalFileSystem.Exists(filename))
|
||||
if (!Game.ModData.ModFiles.Exists(filename))
|
||||
{
|
||||
Log.Write("sound", "LoadSound, file does not exist: {0}", filename);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (filename.ToLowerInvariant().EndsWith("wav"))
|
||||
using (var s = GlobalFileSystem.Open(filename))
|
||||
using (var s = Game.ModData.ModFiles.Open(filename))
|
||||
return LoadWave(new WavLoader(s));
|
||||
|
||||
using (var s = GlobalFileSystem.Open(filename))
|
||||
using (var s = Game.ModData.ModFiles.Open(filename))
|
||||
return LoadSoundRaw(AudLoader.LoadSound(s), 1, 16, 22050);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user