mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
POLARIS: Varset Callback
This commit is contained in:
@@ -1467,11 +1467,21 @@ var/mob/dview/dview_mob = new
|
||||
if(337.5)
|
||||
return "North-Northwest"
|
||||
|
||||
//This is used to force compiletime errors if you incorrectly supply variable names. Crafty!
|
||||
#define NAMEOF(datum, X) (#X || ##datum.##X)
|
||||
|
||||
//Creates a callback with the specific purpose of setting a variable
|
||||
#define VARSET_CALLBACK(datum, var, var_value) CALLBACK(GLOBAL_PROC, /proc/___callbackvarset, weakref(##datum), NAMEOF(##datum, ##var), ##var_value)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Helper for the above
|
||||
/proc/___callbackvarset(list_or_datum, var_name, var_value)
|
||||
if(isweakref(list_or_datum))
|
||||
var/weakref/wr = list_or_datum
|
||||
list_or_datum = wr.resolve()
|
||||
if(!list_or_datum)
|
||||
return
|
||||
if(length(list_or_datum))
|
||||
list_or_datum[var_name] = var_value
|
||||
return
|
||||
var/datum/D = list_or_datum
|
||||
D.vars[var_name] = var_value
|
||||
|
||||
@@ -58,6 +58,9 @@
|
||||
/proc/schedule_task_in(var/in_time, var/procedure, var/list/arguments = list())
|
||||
return schedule_task(world.time + in_time, procedure, arguments)
|
||||
|
||||
/proc/schedule_callback_in(var/in_time, var/datum/callback)
|
||||
return schedule_callback(world.time + in_time, callback)
|
||||
|
||||
/proc/schedule_task_with_source_in(var/in_time, var/source, var/procedure, var/list/arguments = list())
|
||||
return schedule_task_with_source(world.time + in_time, source, procedure, arguments)
|
||||
|
||||
@@ -66,6 +69,11 @@
|
||||
scheduler.schedule(st)
|
||||
return st
|
||||
|
||||
/proc/schedule_callback(var/trigger_time, var/datum/callback)
|
||||
var/datum/scheduled_task/callback/st = new/datum/scheduled_task/callback(trigger_time, callback, /proc/destroy_scheduled_task, list())
|
||||
scheduler.schedule(st)
|
||||
return st
|
||||
|
||||
/proc/schedule_task_with_source(var/trigger_time, var/source, var/procedure, var/list/arguments)
|
||||
var/datum/scheduled_task/st = new/datum/scheduled_task/source(trigger_time, source, procedure, arguments, /proc/destroy_scheduled_task, list())
|
||||
scheduler.schedule(st)
|
||||
@@ -125,6 +133,15 @@
|
||||
/datum/scheduled_task/proc/trigger_task_in(var/trigger_in)
|
||||
src.trigger_time = world.time + trigger_in
|
||||
|
||||
/datum/scheduled_task/callback
|
||||
var/datum/callback/callback
|
||||
|
||||
/datum/scheduled_task/callback/New(var/trigger_time, var/datum/callback, var/proc/task_after_process, var/list/task_after_process_args)
|
||||
..(trigger_time = trigger_time, task_after_process = task_after_process, task_after_process_args = task_after_process_args)
|
||||
|
||||
/datum/scheduled_task/callback/process()
|
||||
callback.Invoke()
|
||||
|
||||
/datum/scheduled_task/source
|
||||
var/datum/source
|
||||
|
||||
|
||||
Reference in New Issue
Block a user