From c0a01876354264edce2b2272c2329cda2647eb95 Mon Sep 17 00:00:00 2001 From: NeeEoo Date: Wed, 19 Jul 2023 18:06:57 +0200 Subject: [PATCH] Scripted Asset LIbraries --- source/funkin/backend/FlxAnimate.hx | 2 +- .../backend/assets/ScriptedAssetLibrary.hx | 126 ++++++++++++++++++ .../backend/system/framerate/AssetTreeInfo.hx | 5 +- 3 files changed, 131 insertions(+), 2 deletions(-) create mode 100644 source/funkin/backend/assets/ScriptedAssetLibrary.hx diff --git a/source/funkin/backend/FlxAnimate.hx b/source/funkin/backend/FlxAnimate.hx index 4e6a0660..ea1644bc 100644 --- a/source/funkin/backend/FlxAnimate.hx +++ b/source/funkin/backend/FlxAnimate.hx @@ -66,7 +66,7 @@ class FlxAnimate extends flxanimate.FlxAnimate { } rMatrix.translate(_point.x, _point.y); - camera.drawPixels(limb, null, rMatrix, colorTransform, blend, antialiasing); + camera.drawPixels(limb, null, rMatrix, colorTransform, blend, antialiasing, shaderEnabled ? shader : null); #if FLX_DEBUG FlxBasic.visibleCount++; #end diff --git a/source/funkin/backend/assets/ScriptedAssetLibrary.hx b/source/funkin/backend/assets/ScriptedAssetLibrary.hx new file mode 100644 index 00000000..972f74e2 --- /dev/null +++ b/source/funkin/backend/assets/ScriptedAssetLibrary.hx @@ -0,0 +1,126 @@ +package funkin.backend.assets; + +import funkin.backend.scripting.Script; +import lime.utils.AssetLibrary; +import lime.utils.Assets as LimeAssets; + +import lime.media.AudioBuffer; +import lime.graphics.Image; +import lime.text.Font; +import lime.utils.Bytes; + +#if MOD_SUPPORT +import sys.FileStat; +import sys.FileSystem; +#end + +using StringTools; + +class ScriptedAssetLibrary extends ModsFolderLibrary { + public var script:Script; + public var scriptName:String; + private static var nullValue:Dynamic = {}; + + public function new(scriptName:String, args:Array = null, folderPath:String="./assets/", libName:String="assets") { + super(folderPath, libName); + + this.scriptName = scriptName; + script = Script.create(Paths.script("data/library/" + scriptName)); + script.setParent(this); + script.set("NULL", nullValue); // hackyway + script.load(); + if(args == null) args = []; + script.call("create", args); + trace(script); + } + + #if MOD_SUPPORT + public override function getEditedTime(asset:String):Null { + var result:Dynamic = script.call("getEditedTime", [asset]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getEditedTime(asset); + } + + public override function getAudioBuffer(id:String):AudioBuffer { + var result:Dynamic = script.call("getAudioBuffer", [id]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getAudioBuffer(id); + } + + public override function getBytes(id:String):Bytes { + var result:Dynamic = script.call("getBytes", [id]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getBytes(id); + } + + public override function getFont(id:String):Font { + var result:Dynamic = script.call("getFont", [id]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getFont(id); + } + + public override function getImage(id:String):Image { + var result:Dynamic = script.call("getImage", [id]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getImage(id); + } + + public override function getPath(id:String):String { + var result:Dynamic = script.call("getPath", [id]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getPath(id); + } + + public override function __getFiles(folder:String, folders:Bool = false) { + var result:Dynamic = script.call("__getFiles", [folder, folders]); + if(result != null) { + return result == nullValue ? null : result; + } + return super.__getFiles(folder, folders); + } + + public override function exists(asset:String, type:String):Bool { + var result:Dynamic = script.call("exists", [asset, type]); + if(result != null) { + return result == nullValue ? false : result; + } + return super.exists(asset, type); + } + + private override function getAssetPath() { + var result:Dynamic = script.call("getAssetPath", []); + if(result != null) { + return result == nullValue ? null : result; + } + return super.getAssetPath(); + } + + private override function __isCacheValid(cache:Map, asset:String, isLocalCache:Bool = false) { + var result:Dynamic = script.call("__isCacheValid", [cache, asset, isLocalCache]); + if(result != null) { + return result == nullValue ? false : result; + } + return super.__isCacheValid(cache, asset, isLocalCache); + } + + private override function __parseAsset(asset:String):Bool { + var result:Dynamic = script.call("__parseAsset", [asset]); + if(result != null) { + return result == nullValue ? false : result; + } + return super.__parseAsset(asset); + } + #end +} \ No newline at end of file diff --git a/source/funkin/backend/system/framerate/AssetTreeInfo.hx b/source/funkin/backend/system/framerate/AssetTreeInfo.hx index 929c95ac..3f8c0388 100644 --- a/source/funkin/backend/system/framerate/AssetTreeInfo.hx +++ b/source/funkin/backend/system/framerate/AssetTreeInfo.hx @@ -1,6 +1,7 @@ package funkin.backend.system.framerate; import funkin.backend.assets.IModsAssetLibrary; +import funkin.backend.assets.ScriptedAssetLibrary; class AssetTreeInfo extends FramerateCategory { public function new() { @@ -20,7 +21,9 @@ class AssetTreeInfo extends FramerateCategory { if (al.__proxy != null) l = al.__proxy; } - if (l is IModsAssetLibrary) + if (l is ScriptedAssetLibrary) + text += '${Type.getClassName(Type.getClass(l))} - ${cast(l, ScriptedAssetLibrary).scriptName} (${cast(l, ScriptedAssetLibrary).libName} | ${cast(l, ScriptedAssetLibrary).prefix})\n'; + else 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";