diff a/code/datums/callback.dm b/code/datums/callback.dm (rejected hunks) @@ -100,60 +100,3 @@ if (object == GLOBAL_PROC) return call(delegate)(arglist(calling_arguments)) return call(object, delegate)(arglist(calling_arguments)) - - -/datum/callback_select - var/list/finished - var/pendingcount - var/total - -/datum/callback_select/New(count, savereturns) - total = count - if (savereturns) - finished = new(count) - - -/datum/callback_select/proc/invoke_callback(index, datum/callback/callback, list/callback_args, savereturn = TRUE) - set waitfor = FALSE - if (!callback || !istype(callback)) - //This check only exists because the alternative is callback_select would block forever if given invalid data - CRASH("invalid callback passed to invoke_callback") - if (!length(callback_args)) - callback_args = list() - pendingcount++ - debug_usr("calling callback") - var/rtn = callback.Invoke(arglist(callback_args)) - debug_usr("callback returned") - pendingcount-- - if (savereturn) - finished[index] = rtn - - - - -//runs a list of callbacks asynchronously, returning once all of them return. -//callbacks can be repeated. -//callbacks-args is a optional list of argument lists, in the same order as the callbacks, -// the inner lists will be sent to the callbacks when invoked() as additional args. -//can optionly save and return a list of return values, in the same order as the original list of callbacks -//resolution is the number of byond ticks between checks. -/proc/callback_select(list/callbacks, list/callback_args, savereturns = TRUE, resolution = 1) - if (!callbacks) - return - var/count = length(callbacks) - if (!count) - return - if (!callback_args) - callback_args = list() - - callback_args.len = count - - var/datum/callback_select/CS = new(count, savereturns) - for (var/i in 1 to count) - CS.invoke_callback(i, callbacks[i], callback_args[i], savereturns) - debug_usr("starting callbacks: [CS.pendingcount]") - while(CS.pendingcount) - debug_usr("callbacks: [CS.pendingcount]") - sleep(resolution*world.tick_lag) - return CS.finished -