Scripted Asset LIbraries

This commit is contained in:
NeeEoo
2023-07-19 18:06:57 +02:00
parent 1259449f84
commit c0a0187635
3 changed files with 131 additions and 2 deletions
+1 -1
View File
@@ -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
@@ -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<Dynamic> = 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<Float> {
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<String, Dynamic>, 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
}
@@ -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";