From 8b349e5ceb4e845df88bd4baf5e127a81c2f93b0 Mon Sep 17 00:00:00 2001 From: Yoshman29 <81191621+YoshiCrafter29@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:29:48 +0100 Subject: [PATCH] finally! cache clearing! --- buildnumber.txt | 2 +- source/funkin/mods/ModsAssetLibrary.hx | 2 +- source/funkin/mods/ModsFolder.hx | 90 ++++++++++++------------- source/funkin/mods/ModsFolderLibrary.hx | 27 +++++--- source/funkin/mods/ZipFolderLibrary.hx | 21 +++--- 5 files changed, 73 insertions(+), 69 deletions(-) diff --git a/buildnumber.txt b/buildnumber.txt index 51b4bee7..1f168c59 100644 --- a/buildnumber.txt +++ b/buildnumber.txt @@ -1 +1 @@ -1194 \ No newline at end of file +1199 \ No newline at end of file diff --git a/source/funkin/mods/ModsAssetLibrary.hx b/source/funkin/mods/ModsAssetLibrary.hx index 64938365..565d69ae 100644 --- a/source/funkin/mods/ModsAssetLibrary.hx +++ b/source/funkin/mods/ModsAssetLibrary.hx @@ -28,7 +28,7 @@ interface ModsAssetLibrary { private function getAssetPath():String; - private function __isCacheValid(cache:Map, asset:String):Bool; + private function __isCacheValid(cache:Map, asset:String, isLocal:Bool = false):Bool; private function __parseAsset(asset:String):Bool; diff --git a/source/funkin/mods/ModsFolder.hx b/source/funkin/mods/ModsFolder.hx index c3248495..09cac902 100644 --- a/source/funkin/mods/ModsFolder.hx +++ b/source/funkin/mods/ModsFolder.hx @@ -80,7 +80,7 @@ class ModsFolder { } public static function unloadMod(mod:String) { - Assets.unloadLibrary('mods/$mod'); + Assets.unloadLibrary('mods/$mod'.toLowerCase()); } public static function prepareLibrary(libName:String, force:Bool = false) { @@ -161,52 +161,52 @@ class ModsFolder { } private static function onStateSwitch(newState:FlxState) { - Assets.cache.clear(); - lime.utils.Assets.cache.clear(); + // Assets.cache.clear(); + // lime.utils.Assets.cache.clear(); - #if MOD_SUPPORT - if (currentModFolder == null) return; - var bmapsToRemove:Array = []; - @:privateAccess - for(bmap in FlxG.bitmap._cache) { - if (bmap.assetsKey != null) { - var e = new LimeLibrarySymbol(bmap.assetsKey); - if (e.library is openfl.utils.AssetLibrary) { - @:privateAccess - e.library = cast(e.library, openfl.utils.AssetLibrary).__proxy; - } - if (e.library is ModsAssetLibrary) { - var lib = cast(e.library, ModsAssetLibrary); - if (!lib.__parseAsset(e.symbolName)) continue; - if (!lib.__isCacheValid(e.library.cachedImages, lib._parsedAsset)) { - e.library.cachedImages.remove(lib._parsedAsset); - bmapsToRemove.push(bmap); - } - } - } - } + // #if MOD_SUPPORT + // if (currentModFolder == null) return; + // var bmapsToRemove:Array = []; + // @:privateAccess + // for(bmap in FlxG.bitmap._cache) { + // if (bmap.assetsKey != null) { + // var e = new LimeLibrarySymbol(bmap.assetsKey); + // if (e.library is openfl.utils.AssetLibrary) { + // @:privateAccess + // e.library = cast(e.library, openfl.utils.AssetLibrary).__proxy; + // } + // if (e.library is ModsAssetLibrary) { + // var lib = cast(e.library, ModsAssetLibrary); + // if (!lib.__parseAsset(e.symbolName)) continue; + // if (!lib.__isCacheValid(e.library.cachedImages, lib._parsedAsset)) { + // e.library.cachedImages.remove(lib._parsedAsset); + // bmapsToRemove.push(bmap); + // } + // } + // } + // } - // TODO: add setting for cache clearing - @:privateAccess - for(libName=>lib in lime.utils.Assets.libraries) { - var library = lib; - if (library is openfl.utils.AssetLibrary) { - var flLib = cast(library, openfl.utils.AssetLibrary); - @:privateAccess - if (flLib.__proxy != null) library = flLib.__proxy; - } - if (library is ModsAssetLibrary) { - var modLib = cast(library, ModsAssetLibrary); - @:privateAccess - library.cachedBytes = []; - @:privateAccess - for(sound in library.cachedAudioBuffers) - sound.dispose(); + // // TODO: add setting for cache clearing + // @:privateAccess + // for(libName=>lib in lime.utils.Assets.libraries) { + // var library = lib; + // if (library is openfl.utils.AssetLibrary) { + // var flLib = cast(library, openfl.utils.AssetLibrary); + // @:privateAccess + // if (flLib.__proxy != null) library = flLib.__proxy; + // } + // if (library is ModsAssetLibrary) { + // var modLib = cast(library, ModsAssetLibrary); + // @:privateAccess + // for(sound in library.cachedAudioBuffers) + // sound.dispose(); + // @:privateAccess + // library.cachedBytes = []; - } - } - for(e in bmapsToRemove) - FlxG.bitmap.remove(e); - #end + // } + // } + // for(e in bmapsToRemove) + // FlxG.bitmap.remove(e); + // #end } } \ No newline at end of file diff --git a/source/funkin/mods/ModsFolderLibrary.hx b/source/funkin/mods/ModsFolderLibrary.hx index c1465d54..2236f0c9 100644 --- a/source/funkin/mods/ModsFolderLibrary.hx +++ b/source/funkin/mods/ModsFolderLibrary.hx @@ -2,6 +2,7 @@ package funkin.mods; import lime.utils.Log; import lime.utils.AssetLibrary; +import lime.utils.Assets as LimeAssets; import lime.utils.AssetManifest; import haxe.io.Path; @@ -42,8 +43,11 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { } public override function getAudioBuffer(id:String):AudioBuffer { - if (__isCacheValid(cachedAudioBuffers, id)) - return cachedAudioBuffers.get(id); + trace(id); + if (__isCacheValid(LimeAssets.cache.audio, id)) { + trace("CACHE FOUND!!"); + return LimeAssets.cache.audio.get('$libName:$id'); + } else { if (!exists(id, "SOUND")) { Log.error('ModsAssetLibrary: Audio Buffer at $id does not exist.'); @@ -52,13 +56,13 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { var path = getAssetPath(); editedTimes[id] = FileSystem.stat(path).mtime.getTime(); var e = AudioBuffer.fromFile(path); - cachedAudioBuffers.set(id, e); + // LimeAssets.cache.audio.set('$libName:$id', e); return e; } } public override function getBytes(id:String):Bytes { - if (__isCacheValid(cachedBytes, id)) + if (__isCacheValid(cachedBytes, id, true)) return cachedBytes.get(id); else { if (!exists(id, "BINARY")) { @@ -74,8 +78,8 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { } public override function getFont(id:String):Font { - if (__isCacheValid(cachedFonts, id)) - return cachedFonts.get(id); + if (__isCacheValid(LimeAssets.cache.font, id)) + return LimeAssets.cache.font.get(id); else { if (!exists(id, "FONT")) { Log.error('ModsAssetLibrary: Font at $id does not exist.'); @@ -84,14 +88,13 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { var path = getAssetPath(); editedTimes[id] = FileSystem.stat(path).mtime.getTime(); var e = Font.fromFile(path); - cachedFonts.set(id, e); return e; } } public override function getImage(id:String):Image { - if (useImageCache && __isCacheValid(cachedImages, id)) - return cachedImages.get(id); + if (useImageCache && __isCacheValid(LimeAssets.cache.image, id)) + return LimeAssets.cache.image.get('$libName:$id'); else { if (!exists(id, "IMAGE")) { Log.error('ModsAssetLibrary: Image at $id does not exist.'); @@ -101,7 +104,6 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { editedTimes[id] = FileSystem.stat(path).mtime.getTime(); var e = Image.fromFile(path); - if (useImageCache) cachedImages.set(id, e); return e; } } @@ -137,11 +139,14 @@ class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { return '$folderPath/$_parsedAsset'; } - private function __isCacheValid(cache:Map, asset:String) { + private function __isCacheValid(cache:Map, asset:String, isLocalCache:Bool = false) { if (!editedTimes.exists(asset)) return false; if (editedTimes[asset] == null) return false; if (editedTimes[asset] < FileSystem.stat(getPath(asset)).mtime.getTime()) return false; + + if (!isLocalCache) asset = '$libName:$asset'; + return cache.exists(asset) && cache[asset] != null; } diff --git a/source/funkin/mods/ZipFolderLibrary.hx b/source/funkin/mods/ZipFolderLibrary.hx index 0545b36e..72eaf56c 100644 --- a/source/funkin/mods/ZipFolderLibrary.hx +++ b/source/funkin/mods/ZipFolderLibrary.hx @@ -14,6 +14,7 @@ import lime.net.HTTPRequest; import lime.text.Font; import lime.utils.AssetType; import lime.utils.Bytes; +import lime.utils.Assets as LimeAssets; #if MOD_SUPPORT @@ -53,21 +54,20 @@ class ZipFolderLibrary extends AssetLibrary implements ModsAssetLibrary { public var _parsedAsset:String; public override function getAudioBuffer(id:String):AudioBuffer { - if (__isCacheValid(cachedAudioBuffers, id)) - return cachedAudioBuffers.get(id); + if (__isCacheValid(LimeAssets.cache.audio, id)) + return LimeAssets.cache.audio.get('$libName:$id'); else { if (!exists(id, "SOUND")) { Log.error('ZipFolderLibrary: Audio Buffer at $id does not exist.'); return null; } var e = AudioBuffer.fromBytes(unzip(assets[_parsedAsset])); - cachedAudioBuffers.set(id, e); return e; } } public override function getBytes(id:String):Bytes { - if (__isCacheValid(cachedBytes, id)) + if (__isCacheValid(cachedBytes, id, true)) return cachedBytes.get(id); else { if (!exists(id, "BINARY")) { @@ -97,22 +97,21 @@ class ZipFolderLibrary extends AssetLibrary implements ModsAssetLibrary { } public override function getFont(id:String):Font { - if (__isCacheValid(cachedFonts, id)) - return cachedFonts.get(id); + if (__isCacheValid(LimeAssets.cache.font, id)) + return LimeAssets.cache.font.get('$libName:$id'); else { if (!exists(id, "FONT")) { Log.error('ZipFolderLibrary: Font at $id does not exist.'); return null; } var e = Font.fromBytes(unzip(assets[_parsedAsset])); - cachedFonts.set(id, e); return e; } } public override function getImage(id:String):Image { - if (useImageCache && __isCacheValid(cachedImages, id)) - return cachedImages.get(id); + if (useImageCache && __isCacheValid(LimeAssets.cache.image, id)) + return LimeAssets.cache.image.get('$libName:$id'); else { if (!exists(id, "IMAGE")) { Log.error('ZipFolderLibrary: Image at $id does not exist.'); @@ -131,8 +130,8 @@ class ZipFolderLibrary extends AssetLibrary implements ModsAssetLibrary { return true; } - public function __isCacheValid(cache:Map, asset:String) { - if (cache.exists(asset)) return true; + public function __isCacheValid(cache:Map, asset:String, isLocal:Bool = false) { + if (cache.exists(isLocal ? '$libName:$asset': asset)) return true; return false; }