Files
FNF-i486-Engine/source/psychlua/CallbackHandler.hx

62 lines
1.2 KiB
Haxe

package psychlua;
class CallbackHandler
{
public static inline function call(l:State, fname:String):Int
{
try
{
// trace('calling $fname');
var cbf:Dynamic = Lua_helper.callbacks.get(fname);
// Local functions have the lowest priority
// This is to prevent a "for" loop being called in every single operation,
// so that it only loops on reserved/special functions
if (cbf == null)
{
// trace('looping thru scripts');
for (script in PlayState.instance.luaArray)
if (script != null && script.lua == l)
{
// trace('found script');
cbf = script.callbacks.get(fname);
break;
}
}
if (cbf == null)
return 0;
var nparams:Int = Lua.gettop(l);
var args:Array<Dynamic> = [];
for (i in 0...nparams)
{
args[i] = Convert.fromLua(l, i + 1);
}
var ret:Dynamic = null;
/* return the number of results */
ret = Reflect.callMethod(null, cbf, args);
if (ret != null)
{
Convert.toLua(l, ret);
return 1;
}
}
catch (e:Dynamic)
{
if (Lua_helper.sendErrorsToLua)
{
LuaL.error(l, 'CALLBACK ERROR! ${if (e.message != null) e.message else e}');
return 0;
}
trace(e);
throw(e);
}
return 0;
}
}