From 1259449f84f35a41a0e8b5123732ea9b306de113 Mon Sep 17 00:00:00 2001 From: NeeEoo Date: Wed, 19 Jul 2023 15:38:50 +0200 Subject: [PATCH] Fixed source assets, I hate this code so much please fix later Fixed naming convention --- source/funkin/backend/MusicBeatState.hx | 10 ++++- source/funkin/backend/MusicBeatSubstate.hx | 10 ++++- .../backend/assets/AssetsLibraryList.hx | 10 ++--- ...dsAssetLibrary.hx => IModsAssetLibrary.hx} | 2 +- source/funkin/backend/assets/ModsFolder.hx | 2 +- .../backend/assets/ModsFolderLibrary.hx | 2 +- source/funkin/backend/assets/Paths.hx | 45 ++++++++++++++----- .../funkin/backend/assets/ZipFolderLibrary.hx | 2 +- .../funkin/backend/scripting/GlobalScript.hx | 7 ++- .../backend/system/framerate/AssetTreeInfo.hx | 6 +-- source/funkin/game/PlayState.hx | 20 ++++++--- source/funkin/menus/ui/Alphabet.hx | 6 +-- source/funkin/savedata/FunkinSave.hx | 4 +- source/openfl/utils/Assets.hx | 11 +++++ 14 files changed, 97 insertions(+), 40 deletions(-) rename source/funkin/backend/assets/{ModsAssetLibrary.hx => IModsAssetLibrary.hx} (96%) diff --git a/source/funkin/backend/MusicBeatState.hx b/source/funkin/backend/MusicBeatState.hx index 2883f5ed..5e679acd 100644 --- a/source/funkin/backend/MusicBeatState.hx +++ b/source/funkin/backend/MusicBeatState.hx @@ -123,9 +123,15 @@ class MusicBeatState extends FlxState implements IBeatReceiver var scriptPaths = []; (scripts = new ScriptPack(scriptName)).setParent(this); scriptPaths = Paths.getScriptPaths('assets/data/states/$scriptName'); - for (i in Paths.getScriptPaths('assets/data/states', '/$scriptName.')) + for (i in Paths.getScriptPaths('assets/data/states', '/$scriptName.')) scriptPaths.push(i); - if (scriptPaths.length > 0) for (i in scriptPaths) addScript(i); + if (scriptPaths.length > 0) + for (i in scriptPaths) { + var old = Assets.forceAssetLibrary; + Assets.forceAssetLibrary = i.library; + addScript(i.file); + Assets.forceAssetLibrary = old; + } if (Type.getClass(this) != PlayState) scripts.load(); } else diff --git a/source/funkin/backend/MusicBeatSubstate.hx b/source/funkin/backend/MusicBeatSubstate.hx index 62a1bbf3..48171148 100644 --- a/source/funkin/backend/MusicBeatSubstate.hx +++ b/source/funkin/backend/MusicBeatSubstate.hx @@ -109,9 +109,15 @@ class MusicBeatSubstate extends FlxSubState implements IBeatReceiver var scriptName = this.scriptName != null ? this.scriptName : className.substr(className.lastIndexOf(".")+1); var scriptPaths = []; scriptPaths = Paths.getScriptPaths('assets/data/states/$scriptName'); - for (i in Paths.getScriptPaths('assets/data/states', '/$scriptName.')) + for (i in Paths.getScriptPaths('assets/data/states', '/$scriptName.')) scriptPaths.push(i); - if (scriptPaths.length > 0) for (i in scriptPaths) addScript(i); + if (scriptPaths.length > 0) + for (i in scriptPaths) { + var old = Assets.forceAssetLibrary; + Assets.forceAssetLibrary = i.library; + addScript(i.file); + Assets.forceAssetLibrary = old; + } scripts.load(); } else diff --git a/source/funkin/backend/assets/AssetsLibraryList.hx b/source/funkin/backend/assets/AssetsLibraryList.hx index 3e2dd20f..b1edfbf7 100644 --- a/source/funkin/backend/assets/AssetsLibraryList.hx +++ b/source/funkin/backend/assets/AssetsLibraryList.hx @@ -1,6 +1,6 @@ package funkin.backend.assets; -import funkin.backend.assets.ModsAssetLibrary; +import funkin.backend.assets.IModsAssetLibrary; import lime.utils.AssetLibrary; class AssetsLibraryList extends AssetLibrary { @@ -60,8 +60,8 @@ class AssetsLibraryList extends AssetLibrary { // TODO: do base folder scanning #if MOD_SUPPORT - if (l is ModsAssetLibrary) { - var lib = cast(l, ModsAssetLibrary); + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); for(e in lib.getFiles(folder)) content.push(e); } @@ -84,8 +84,8 @@ class AssetsLibraryList extends AssetLibrary { // TODO: do base folder scanning #if MOD_SUPPORT - if (l is ModsAssetLibrary) { - var lib = cast(l, ModsAssetLibrary); + if (l is IModsAssetLibrary) { + var lib = cast(l, IModsAssetLibrary); for(e in lib.getFolders(folder)) content.push(e); } diff --git a/source/funkin/backend/assets/ModsAssetLibrary.hx b/source/funkin/backend/assets/IModsAssetLibrary.hx similarity index 96% rename from source/funkin/backend/assets/ModsAssetLibrary.hx rename to source/funkin/backend/assets/IModsAssetLibrary.hx index 5861119a..5c90b185 100644 --- a/source/funkin/backend/assets/ModsAssetLibrary.hx +++ b/source/funkin/backend/assets/IModsAssetLibrary.hx @@ -21,7 +21,7 @@ import sys.FileSystem; using StringTools; -interface ModsAssetLibrary { +interface IModsAssetLibrary { public var prefix:String; public var libName:String; diff --git a/source/funkin/backend/assets/ModsFolder.hx b/source/funkin/backend/assets/ModsFolder.hx index bc3444e1..33458fe0 100644 --- a/source/funkin/backend/assets/ModsFolder.hx +++ b/source/funkin/backend/assets/ModsFolder.hx @@ -102,7 +102,7 @@ class ModsFolder { return font; } - public static function prepareModLibrary(libName:String, lib:ModsAssetLibrary, force:Bool = false) { + public static function prepareModLibrary(libName:String, lib:IModsAssetLibrary, force:Bool = false) { var openLib = prepareLibrary(libName, force); lib.prefix = 'assets/'; @:privateAccess diff --git a/source/funkin/backend/assets/ModsFolderLibrary.hx b/source/funkin/backend/assets/ModsFolderLibrary.hx index e21f6320..69f87693 100644 --- a/source/funkin/backend/assets/ModsFolderLibrary.hx +++ b/source/funkin/backend/assets/ModsFolderLibrary.hx @@ -15,7 +15,7 @@ import sys.FileSystem; using StringTools; -class ModsFolderLibrary extends AssetLibrary implements ModsAssetLibrary { +class ModsFolderLibrary extends AssetLibrary implements IModsAssetLibrary { public var folderPath:String; public var libName:String; public var useImageCache:Bool = true; diff --git a/source/funkin/backend/assets/Paths.hx b/source/funkin/backend/assets/Paths.hx index f05dd5e2..26dd0e96 100644 --- a/source/funkin/backend/assets/Paths.hx +++ b/source/funkin/backend/assets/Paths.hx @@ -1,5 +1,6 @@ package funkin.backend.assets; +import lime.utils.AssetLibrary; import flixel.graphics.frames.FlxFramesCollection; import haxe.io.Path; import funkin.backend.assets.LimeLibrarySymbol; @@ -97,22 +98,32 @@ class Paths } return getPath('images/$key.png', library); } - static public function getScriptPaths(key:String, excep:String = ""):Array { - var scriptsPaths:Array = []; + static public function getScriptPaths(key:String, excep:String = ""):Array { + var scriptsPaths:Array = []; var reallib = assetsTree.libraries.copy(); - reallib.pop(); + + key = key.replace("//", "/"); + if (!key.endsWith("/")) key += "/"; - for (e in reallib) { - if (!OpenFlAssets.exists(e.getPath(key).startsWith(".") ? "." + e.getPath(key) : e.getPath(key))) continue; - for (i in sys.FileSystem.readDirectory(e.getPath(key))) - if (Script.scriptExtensions.contains(Path.extension(i))) { - var path = '${e.getPath(key)}$i'; - if (path.startsWith(".")) path = "." + path; - if (path.contains(excep) || excep == "") scriptsPaths.push(path.replace("//", "/")); + for (library in reallib) { + if (!library.exists(key, null)) continue; + + var path = library.getPath(key); + if(path == null) continue; + + for (i in sys.FileSystem.readDirectory(path)) { + var file = Path.withoutDirectory(i); + if (Script.scriptExtensions.contains(Path.extension(file))) { + var filepath = '${key}$file'.replace("//", "/"); + + if (filepath.contains(excep) || excep == "") + scriptsPaths.push(new ScriptPathInfo(filepath, library)); } + } } return scriptsPaths; } + inline static public function script(key:String, ?library:String, isAssetsPath:Bool = false) { var scriptPath = isAssetsPath ? key : getPath(key, library); if (!Script.scriptExtensions.contains(Path.extension(scriptPath))) { @@ -280,9 +291,9 @@ class Paths var content:Array = []; #if MOD_SUPPORT - if (library is funkin.backend.assets.ModsAssetLibrary) { + if (library is funkin.backend.assets.IModsAssetLibrary) { // easy task, can immediately scan for files! - var lib = cast(library, funkin.backend.assets.ModsAssetLibrary); + var lib = cast(library, funkin.backend.assets.IModsAssetLibrary); content = lib.getFiles(libThing.symbolName); if (addPath) for(i in 0...content.length) @@ -316,3 +327,13 @@ class Paths */ } } + +class ScriptPathInfo { + public var file:String; + public var library:AssetLibrary; + + public function new(file:String, library:AssetLibrary) { + this.file = file; + this.library = library; + } +} \ No newline at end of file diff --git a/source/funkin/backend/assets/ZipFolderLibrary.hx b/source/funkin/backend/assets/ZipFolderLibrary.hx index e5f88bfd..7465482e 100644 --- a/source/funkin/backend/assets/ZipFolderLibrary.hx +++ b/source/funkin/backend/assets/ZipFolderLibrary.hx @@ -25,7 +25,7 @@ import haxe.zip.Reader; import funkin.backend.utils.SysZip; import funkin.backend.utils.SysZip.SysZipEntry; -class ZipFolderLibrary extends AssetLibrary implements ModsAssetLibrary { +class ZipFolderLibrary extends AssetLibrary implements IModsAssetLibrary { public var zipPath:String; public var libName:String; public var useImageCache:Bool = false; diff --git a/source/funkin/backend/scripting/GlobalScript.hx b/source/funkin/backend/scripting/GlobalScript.hx index 8c2ef66b..b741ee05 100644 --- a/source/funkin/backend/scripting/GlobalScript.hx +++ b/source/funkin/backend/scripting/GlobalScript.hx @@ -82,7 +82,12 @@ class GlobalScript { scripts = new ScriptPack("global"); var scriptPaths = Paths.getScriptPaths("assets/data", "/global."); for (i in Paths.getScriptPaths("assets/data/global")) scriptPaths.push(i); - for (i in scriptPaths) scripts.add(Script.create(Paths.script(i, null, true))); + var old = Assets.forceAssetLibrary; + for (i in scriptPaths) { + Assets.forceAssetLibrary = i.library; + scripts.add(Script.create(Paths.script(i.file, null, true))); + } + Assets.forceAssetLibrary = old; scripts.load(); } diff --git a/source/funkin/backend/system/framerate/AssetTreeInfo.hx b/source/funkin/backend/system/framerate/AssetTreeInfo.hx index 1ebba189..929c95ac 100644 --- a/source/funkin/backend/system/framerate/AssetTreeInfo.hx +++ b/source/funkin/backend/system/framerate/AssetTreeInfo.hx @@ -1,6 +1,6 @@ package funkin.backend.system.framerate; -import funkin.backend.assets.ModsAssetLibrary; +import funkin.backend.assets.IModsAssetLibrary; class AssetTreeInfo extends FramerateCategory { public function new() { @@ -20,8 +20,8 @@ class AssetTreeInfo extends FramerateCategory { if (al.__proxy != null) l = al.__proxy; } - if (l is ModsAssetLibrary) - text += '${Type.getClassName(Type.getClass(l))} - ${cast(l, ModsAssetLibrary).libName} (${cast(l, ModsAssetLibrary).prefix})\n'; + if (l is IModsAssetLibrary) + text += '${Type.getClassName(Type.getClass(l))} - ${cast(l, IModsAssetLibrary).libName} (${cast(l, IModsAssetLibrary).prefix})\n'; else text += Std.string(e) + "\n"; } diff --git a/source/funkin/game/PlayState.hx b/source/funkin/game/PlayState.hx index c04a4a8b..66ec1baf 100644 --- a/source/funkin/game/PlayState.hx +++ b/source/funkin/game/PlayState.hx @@ -25,7 +25,6 @@ import flixel.util.FlxColor; import flixel.util.FlxSort; import flixel.util.FlxTimer; import haxe.io.Path; -import lime.utils.Assets; import funkin.backend.system.Conductor; import funkin.game.cutscenes.*; @@ -557,17 +556,26 @@ class PlayState extends MusicBeatState // ADD YOUR HARDCODED SCRIPTS HERE! default: for(content in [Paths.getScriptPaths('assets/songs/${SONG.meta.name.toLowerCase()}/scripts'), Paths.getScriptPaths('assets/data/charts/')]) - for(file in content) addScript(file); + for(file in content) { + var old = Assets.forceAssetLibrary; + Assets.forceAssetLibrary = file.library; + addScript(file.file); + Assets.forceAssetLibrary = old; + } var songEvents:Array = []; - for (event in SONG.events) + for (event in SONG.events) if (!songEvents.contains(event.name)) songEvents.push(event.name); for (file in Paths.getScriptPaths('assets/data/events/')) { - var fileName:String = Path.withoutExtension(Path.withoutDirectory(file)); - if (EventsData.eventsList.contains(fileName) && songEvents.contains(fileName)) addScript(file); + var old = Assets.forceAssetLibrary; + Assets.forceAssetLibrary = file.library; + + var fileName:String = Path.withoutExtension(Path.withoutDirectory(file.file)); + if (EventsData.eventsList.contains(fileName) && songEvents.contains(fileName)) addScript(file.file); + + Assets.forceAssetLibrary = old; } - } } add(comboGroup); diff --git a/source/funkin/menus/ui/Alphabet.hx b/source/funkin/menus/ui/Alphabet.hx index c885898e..4d3045de 100644 --- a/source/funkin/menus/ui/Alphabet.hx +++ b/source/funkin/menus/ui/Alphabet.hx @@ -3,7 +3,7 @@ package funkin.menus.ui; import openfl.utils.AssetLibrary; import haxe.xml.Access; import funkin.backend.assets.LimeLibrarySymbol; -import funkin.backend.assets.ModsAssetLibrary; +import funkin.backend.assets.IModsAssetLibrary; import flixel.graphics.frames.FlxAtlasFrames; import flixel.group.FlxSpriteGroup; import flixel.util.FlxTimer; @@ -100,8 +100,8 @@ class Alphabet extends FlxSpriteGroup @:privateAccess library = cast(library.__proxy, AssetLibrary); } - if (library is ModsAssetLibrary) { - var modLib = cast(library, ModsAssetLibrary); + if (library is IModsAssetLibrary) { + var modLib = cast(library, IModsAssetLibrary); @:privateAccess if (!modLib.__isCacheValid(library.cachedBytes, libThing.symbolName)) { refreshAlphabetXML(alphabetPath); diff --git a/source/funkin/savedata/FunkinSave.hx b/source/funkin/savedata/FunkinSave.hx index 76a66729..f0e4163e 100644 --- a/source/funkin/savedata/FunkinSave.hx +++ b/source/funkin/savedata/FunkinSave.hx @@ -24,8 +24,8 @@ class FunkinSave { public static var save:FlxSave; public static function init() { - trace(Application.current.meta.get('save-path')); - trace(Application.current.meta.get('save-name')); + //trace(Application.current.meta.get('save-path')); + //trace(Application.current.meta.get('save-name')); save = new FlxSave(); save.bind('save-default', #if sys 'YoshiCrafter29/CodenameEngine' #else 'CodenameEngine' #end); load(); diff --git a/source/openfl/utils/Assets.hx b/source/openfl/utils/Assets.hx index f28eea05..f2f2edf4 100644 --- a/source/openfl/utils/Assets.hx +++ b/source/openfl/utils/Assets.hx @@ -48,6 +48,8 @@ class Assets { public static var cache:IAssetCache = new AssetCache(); + public static var forceAssetLibrary:LimeAssetLibrary = null; + @:noCompletion private static var dispatcher:EventDispatcher #if !macro = new EventDispatcher() #end; private static var libraryBindings:Map = new Map(); @@ -76,6 +78,9 @@ class Assets **/ public static function exists(id:String, type:AssetType = null):Bool { + if(forceAssetLibrary != null) { + return forceAssetLibrary.exists(id, cast type); + } #if lime return LimeAssets.exists(id, cast type); #else @@ -260,6 +265,9 @@ class Assets **/ public static function getPath(id:String):String { + if(forceAssetLibrary != null) { + return forceAssetLibrary.getPath(id); + } #if lime return LimeAssets.getPath(id); #else @@ -317,6 +325,9 @@ class Assets **/ public static function getText(id:String):String { + if(forceAssetLibrary != null) { + return forceAssetLibrary.getText(id); + } #if lime return LimeAssets.getText(id); #else