Last active
June 20, 2022 01:50
-
-
Save tabularelf/7b82e4b95588a811620ab4924a2bd54b to your computer and use it in GitHub Desktop.
A way to execute runtime/gml functions and method functions with one script.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function __func_array_insert(_array) { | |
var _length = argument_count-2; | |
var _index = argument[1]-1; | |
var _i = 1; | |
array_copy(_array,_index+_length, _array, _index, _length); | |
repeat(_length) { | |
_array[@ ++_index] = argument[++_i]; | |
} | |
} | |
function __func_ds_list_add(_list) { | |
var _length = argument_count-1; | |
var _i = 0; | |
repeat(_length) { | |
ds_list_add(_list, argument[++_i]); | |
} | |
} | |
function __func_array_push(_array) { | |
var _length = argument_count-1; | |
var _i = 0; | |
repeat(_length) { | |
array_push(_array, argument[++_i]); | |
} | |
} | |
/// @func function_execute( function/method, [arguments_in_array]) | |
/// @desc Executes a runtime function, gml function or method, respecting method rules. | |
/// @param function/method | |
/// @param [arguments_in_array] | |
function function_execute(_funcMethod, _argsArray) { | |
var _func = _funcMethod; | |
var _args = !is_array(_argsArray) ? undefined : _argsArray; | |
var _length = !is_array(_args) ? 0 : array_length(_args); | |
switch(_length) { | |
case 0: return _func(); | |
case 1: return _func(_args[0]); | |
case 2: return _func(_args[0], _args[1]); | |
case 3: return _func(_args[0], _args[1], _args[2]); | |
case 4: return _func(_args[0], _args[1], _args[2], _args[3]); | |
case 5: return _func(_args[0], _args[1], _args[2], _args[3], _args[4]); | |
case 6: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5]); | |
case 7: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6]); | |
case 8: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7]); | |
case 9: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8]); | |
case 10: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9]); | |
case 11: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10]); | |
case 12: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11]); | |
case 13: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12]); | |
case 14: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13]); | |
case 15: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13], _args[14]); | |
case 16: return _func(_args[0], _args[1], _args[2], _args[3], _args[4], _args[5], _args[6], _args[7], _args[8], _args[9], _args[10], _args[11], _args[12], _args[13], _args[14], _args[15]); | |
default: | |
// We'll call this only if we're executing more than necessary. | |
var _self = self; | |
if is_method(_func) { | |
_self = method_get_self(_func); | |
// We'll go back to self if it's undefined. | |
if (_self == undefined) { | |
_self = self; | |
} | |
_func = method_get_index(_func); | |
} | |
// Use this switch statement to check against if it matches one of two infinite argument built in functions. | |
switch(_func) { | |
case array_insert: _func = __func_array_insert; break; | |
case ds_list_add: _func = __func_ds_list_add; break; | |
case array_push: _func = __func_array_push; break; | |
} | |
with(_self) { | |
return script_execute_ext(_func, _args); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
great