Methods


HookSystem.hook(target: table, name: string, hook: fun( fun(...any), ...any), exact_func: boolean?)

Replaces a function within a class with a new function.
Also allows calling the original function, allowing you to add code to the beginning or end of existing functions.
HookSystem.hook() should always be called in Mod:init(). An example of how to hook a function is as follows:

-- this code will hook 'Object:setPosition(x, y)', and will be run whenever that function is called
-- all class functions receive the object instance as the first argument. in this function, i name that argument 'obj', and it refers to whichever object is calling 'setPosition()'
HookSystem.hook(Object, "setPosition", function(orig, obj, x, y)
    -- calls the original code (setting its position as normal)
    orig(obj, x, y)
    
    -- sets 'new_x' and 'new_y' variables for the object instance
    obj.new_x = x
    obj.new_y = y
end)

@param target — The class variable containing the function you want to hook.

@param name — The name of the function to hook.

@param hook — The function containing the new code to replace the old code with. Receives the original function as an argument, followed by the arguments the original function receives.

@param exact_func(Used internally) Whether the function should be replaced exactly, or whether it should be replaced with a function that calls the hook function. Should not be specified by users.

Arguments:

target: table

The class variable containing the function you want to hook.

name: string

The name of the function to hook.

hook: fun( fun(...any), ...any)

The function containing the new code to replace the old code with. Receives the original function as an argument, followed by the arguments the original function receives.

exact_func: boolean?

(Used internally) Whether the function should be replaced exactly, or whether it should be replaced with a function that calls the hook function. Should not be specified by users.



HookSystem.hookScript(include: (string|function|Class>|<T>)?)

@param include — The class to extend from. If passed as a string, will be looked up from the current registry (e.g. scripts/data/actors if creating an actor) or the global namespace.

@return class — The new class, extended from include if provided.

@return super — Allows calling methods from the base class. self must be passed as the first argument to each method.

Arguments:

include: (string|function|Class>|<T>)?

The class to extend from. If passed as a string, will be looked up from the current registry (e.g. scripts/data/actors if creating an actor) or the global namespace.

Returns:

class: function|Class>

The new class, extended from include if provided.

super: function|Class>|function|Class>>

Allows calling methods from the base class. self must be passed as the first argument to each method.



HookSystem.override(old_func: function, new_func: fun( <T))

Returns a function that calls a new function, giving it an older function as an argument.
Essentially, it's a version of HookSystem.hook() that works with local functions.

@param old_func — The function to be passed into the new function.

@param new_func — The new function that will be called by the result function.

@return result_func — A function that will call the new function, providing the original function as an argument, followed by any other arguments that this function receives.

Arguments:

old_func: function

The function to be passed into the new function.

new_func: fun( <T)

The new function that will be called by the result function.

Returns:

result_func: function

A function that will call the new function, providing the original function as an argument, followed by any other arguments that this function receives.




Fields



Undocumented