Files
FNF-i486-Engine/source/psychlua/ShaderFunctions.hx
Altertoriel 6ca6e3f284 Lua Improvements (#468)
* Lua Improvments

* fix

* fix 2

* fix 3

* fix 4

* fix 5

* fix 6

* Fix 7, please action dont fail

* done

* done 2

* done 3

* final

* last fix

* please last fix final

* add `curSection` on lua

* ready for pr

* oops

* oop2

* Lua Improvements 2

* Update Project.xml

* fixed `lastCalledScript`

* Attempt Fix 2

* Attempt fix 3

* shit

* done i think

* fuck

* fuck 2
2024-08-01 01:53:54 -04:00

281 lines
9.3 KiB
Haxe

package psychlua;
#if (!flash && sys)
import flixel.addons.display.FlxRuntimeShader;
#end
class ShaderFunctions
{
public static function implement(funk:FunkinLua)
{
var lua = funk.lua;
// shader shit
funk.addLocalCallback("initLuaShader", function(name:String) {
if(!ClientPrefs.shaders) return false;
#if (!flash && MODS_ALLOWED && sys)
return funk.initLuaShader(name);
#else
FunkinLua.luaTrace("initLuaShader: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
#end
return false;
});
funk.addLocalCallback("setSpriteShader", function(obj:String, shader:String) {
if(!ClientPrefs.shaders) return false;
#if (!flash && MODS_ALLOWED && sys)
if(!funk.runtimeShaders.exists(shader) && !funk.initLuaShader(shader))
{
FunkinLua.luaTrace('setSpriteShader: Shader $shader is missing!', false, false, FlxColor.RED);
return false;
}
var split:Array<String> = obj.split('.');
var leObj:FlxSprite = LuaUtils.getObjectDirectly(split[0]);
if(split.length > 1) {
leObj = LuaUtils.getVarInArray(LuaUtils.getPropertyLoop(split), split[split.length-1]);
}
if(leObj != null) {
var arr:Array<String> = funk.runtimeShaders.get(shader);
leObj.shader = new FlxRuntimeShader(arr[0], arr[1]);
return true;
}
#else
FunkinLua.luaTrace("setSpriteShader: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
#end
return false;
});
Lua_helper.add_callback(lua, "removeSpriteShader", function(obj:String) {
var split:Array<String> = obj.split('.');
var leObj:FlxSprite = LuaUtils.getObjectDirectly(split[0]);
if(split.length > 1) {
leObj = LuaUtils.getVarInArray(LuaUtils.getPropertyLoop(split), split[split.length-1]);
}
if(leObj != null) {
leObj.shader = null;
return true;
}
return false;
});
Lua_helper.add_callback(lua, "getShaderBool", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderBool: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getBool(prop);
#else
FunkinLua.luaTrace("getShaderBool: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "getShaderBoolArray", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderBoolArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getBoolArray(prop);
#else
FunkinLua.luaTrace("getShaderBoolArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "getShaderInt", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderInt: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getInt(prop);
#else
FunkinLua.luaTrace("getShaderInt: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "getShaderIntArray", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderIntArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getIntArray(prop);
#else
FunkinLua.luaTrace("getShaderIntArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "getShaderFloat", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderFloat: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getFloat(prop);
#else
FunkinLua.luaTrace("getShaderFloat: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "getShaderFloatArray", function(obj:String, prop:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if (shader == null)
{
FunkinLua.luaTrace("getShaderFloatArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return null;
}
return shader.getFloatArray(prop);
#else
FunkinLua.luaTrace("getShaderFloatArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return null;
#end
});
Lua_helper.add_callback(lua, "setShaderBool", function(obj:String, prop:String, value:Bool) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderBool: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setBool(prop, value);
return true;
#else
FunkinLua.luaTrace("setShaderBool: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
Lua_helper.add_callback(lua, "setShaderBoolArray", function(obj:String, prop:String, values:Dynamic) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderBoolArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setBoolArray(prop, values);
return true;
#else
FunkinLua.luaTrace("setShaderBoolArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
Lua_helper.add_callback(lua, "setShaderInt", function(obj:String, prop:String, value:Int) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderInt: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setInt(prop, value);
return true;
#else
FunkinLua.luaTrace("setShaderInt: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
Lua_helper.add_callback(lua, "setShaderIntArray", function(obj:String, prop:String, values:Dynamic) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderIntArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setIntArray(prop, values);
return true;
#else
FunkinLua.luaTrace("setShaderIntArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
Lua_helper.add_callback(lua, "setShaderFloat", function(obj:String, prop:String, value:Float) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderFloat: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setFloat(prop, value);
return true;
#else
FunkinLua.luaTrace("setShaderFloat: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
Lua_helper.add_callback(lua, "setShaderFloatArray", function(obj:String, prop:String, values:Dynamic) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderFloatArray: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
shader.setFloatArray(prop, values);
return true;
#else
FunkinLua.luaTrace("setShaderFloatArray: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return true;
#end
});
Lua_helper.add_callback(lua, "setShaderSampler2D", function(obj:String, prop:String, bitmapdataPath:String) {
#if (!flash && MODS_ALLOWED && sys)
var shader:FlxRuntimeShader = getShader(obj);
if(shader == null)
{
FunkinLua.luaTrace("setShaderSampler2D: Shader is not FlxRuntimeShader!", false, false, FlxColor.RED);
return false;
}
var value = Paths.image(bitmapdataPath);
if(value != null && value.bitmap != null)
{
shader.setSampler2D(prop, value.bitmap);
return true;
}
return false;
#else
FunkinLua.luaTrace("setShaderSampler2D: Platform unsupported for Runtime Shaders!", false, false, FlxColor.RED);
return false;
#end
});
}
#if (!flash && sys)
public static function getShader(obj:String):FlxRuntimeShader
{
var split:Array<String> = obj.split('.');
var target:FlxSprite = null;
if(split.length > 1) target = LuaUtils.getVarInArray(LuaUtils.getPropertyLoop(split), split[split.length-1]);
else target = LuaUtils.getObjectDirectly(split[0]);
if(target == null)
{
FunkinLua.luaTrace('Error on getting shader: Object $obj not found', false, false, FlxColor.RED);
return null;
}
return cast (target.shader, FlxRuntimeShader);
}
#end
}