mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
* dmdoc + Initialize * no errors anymore * removed duplicate comment, expanded the other * changelog * gdf * fix emotes F4
65 lines
2.2 KiB
Plaintext
65 lines
2.2 KiB
Plaintext
// See 'callback-usage.txt' in this directory for instructions on how to use this.
|
|
// It used to be in this file, but Travis no likey.
|
|
|
|
/datum/callback
|
|
var/datum/object = GLOBAL_PROC
|
|
var/delegate
|
|
var/list/arguments
|
|
|
|
/datum/callback/New(thingtocall, proctocall, ...)
|
|
if (thingtocall)
|
|
object = thingtocall
|
|
delegate = proctocall
|
|
if (length(args) > 2)
|
|
arguments = args.Copy(3)
|
|
|
|
/**
|
|
* Runs a function asynchronously, setting the waitfor to zero
|
|
*
|
|
* In case of sleeps, the parent proc (aka where you call this) will continue its processing while the called proc sleeps
|
|
*
|
|
* * thingtocall - The object whose function is to be called on, will be set as `src` in said function, or `GLOBAL_PROC` if the proc is a global one
|
|
* * proctocall - The process to call, use `PROC_REF`, `TYPE_PROC_REF` or `GLOBAL_PROC_REF` according to your use case. Defines in code\__defines\byond_compat.dm
|
|
* * ... - Parameters to pass to said proc (VARIPARAM)
|
|
*/
|
|
/proc/ImmediateInvokeAsync(thingtocall, proctocall, ...)
|
|
set waitfor = FALSE
|
|
|
|
if (!thingtocall)
|
|
return
|
|
|
|
var/list/calling_arguments = length(args) > 2 ? args.Copy(3) : null
|
|
|
|
if (thingtocall == GLOBAL_PROC)
|
|
call(proctocall)(arglist(calling_arguments))
|
|
else
|
|
call(thingtocall, proctocall)(arglist(calling_arguments))
|
|
|
|
/datum/callback/proc/Invoke(...)
|
|
if (!object)
|
|
return
|
|
var/list/calling_arguments = arguments
|
|
if (length(args))
|
|
if (length(arguments))
|
|
calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
|
|
else
|
|
calling_arguments = args
|
|
if (object == GLOBAL_PROC)
|
|
return call(delegate)(arglist(calling_arguments))
|
|
return call(object, delegate)(arglist(calling_arguments))
|
|
|
|
//copy and pasted because fuck proc overhead
|
|
/datum/callback/proc/InvokeAsync(...)
|
|
set waitfor = FALSE
|
|
if (!object)
|
|
return
|
|
var/list/calling_arguments = arguments
|
|
if (length(args))
|
|
if (length(arguments))
|
|
calling_arguments = calling_arguments + args //not += so that it creates a new list so the arguments list stays clean
|
|
else
|
|
calling_arguments = args
|
|
if (object == GLOBAL_PROC)
|
|
return call(delegate)(arglist(calling_arguments))
|
|
return call(object, delegate)(arglist(calling_arguments))
|