zip mod loading

This commit is contained in:
Yoshman29
2022-11-01 17:22:14 +01:00
parent 2d06e3bb0f
commit e9c028489a
9 changed files with 346 additions and 141 deletions
+28 -12
View File
@@ -49,12 +49,18 @@ class ModsFolder {
* @param force Whenever the mod should be reloaded if it has already been loaded
*/
public static function loadMod(mod:String, force:Bool = false) {
var e = loadLibraryFromFolder('mods/$mod'.toLowerCase(), '${modsPath}$mod', force);
loadedMods.push(mod);
return e;
if (FileSystem.exists('${modsPath}$mod.zip')) {
var e = loadLibraryFromZip('mods/$mod'.toLowerCase(), '${modsPath}$mod.zip', force);
loadedMods.push(mod);
return e;
} else {
var e = loadLibraryFromFolder('mods/$mod'.toLowerCase(), '${modsPath}$mod', force);
loadedMods.push(mod);
return e;
}
}
public static function loadLibraryFromFolder(libName:String, folder:String, force:Bool = false) {
public static function prepareLibrary(libName:String, force:Bool = false) {
if (Assets.hasLibrary(libName)) {
if (force)
Assets.unloadLibrary(libName);
@@ -64,15 +70,25 @@ class ModsFolder {
var assets:AssetManifest = new AssetManifest();
assets.name = libName;
assets.libraryType = 'funkin.mods.ModsAssetLibrary';
assets.version = 2;
assets.libraryArgs = [];
assets.rootPath = folder;
assets.assets = [];
var lib = AssetLibrary.fromManifest(assets);
return AssetLibrary.fromManifest(assets);
}
public static function loadLibraryFromZip(libName:String, zipPath:String, force:Bool = false) {
var lib = prepareLibrary(libName, force);
@:privateAccess
lib.__proxy = new ModsAssetLibrary(assets.rootPath, assets.name);
lib.__proxy = new ZipFolderLibrary(zipPath, libName);
Assets.registerLibrary(libName, lib);
return lib;
}
public static function loadLibraryFromFolder(libName:String, folder:String, force:Bool = false) {
var lib = prepareLibrary(libName, force);
@:privateAccess
lib.__proxy = new ModsFolderLibrary(folder, libName);
Assets.registerLibrary(libName, lib);
return lib;
}
@@ -139,8 +155,8 @@ class ModsFolder {
if (e.library is ModsAssetLibrary) {
var lib = cast(e.library, ModsAssetLibrary);
if (!lib.__parseAsset(e.symbolName)) continue;
if (!lib.__isCacheValid(lib.cachedImages, lib._parsedAsset)) {
lib.cachedImages.remove(lib._parsedAsset);
if (!lib.__isCacheValid(e.library.cachedImages, lib._parsedAsset)) {
e.library.cachedImages.remove(lib._parsedAsset);
bmapsToRemove.push(bmap);
}
}
@@ -159,9 +175,9 @@ class ModsFolder {
if (library is ModsAssetLibrary) {
var modLib = cast(library, ModsAssetLibrary);
@:privateAccess
modLib.cachedBytes = [];
library.cachedBytes = [];
@:privateAccess
for(sound in modLib.cachedAudioBuffers)
for(sound in library.cachedAudioBuffers)
sound.dispose();
}