* sync (#3) * shuttle auto call * Merge /vore into /master (#39) * progress * Compile errors fixed No idea if it's test worthy tho as conflicts with race overhaul and narky removal. * Update admins.txt * efforts continue Fuck grab code, seriously * grab code is cancer * Execute the Narkism Do not hesitate. Show no mercy. * holy shit grab code is awful * have I bitched about grab code My bitching, let me show you it * código de agarre es una mierda No really it is * yeah I don't even know anymore. * Lolnope. Fuck grab code * I'm not even sure what to fix anymore * Self eating is not an acceptable fate * Taste the void, son. * My code doesn't pass it's own sanity check. Maybe it's a sign of things to come. * uncommented and notes * It Works and I Don't Know Why (#38) * shuttle auto call * it works and I don't know why * Subsystem 12/21 Most Recent TG subsystem folder * globalvars 12/21 Tossed out the flavor_misc and parallax files * Onclick 12/21 as well as .dme updates * _defines 12/21 ommited old _MC.dm * _HELPERS 12/21 Preserved snowflake placement of furry sprites * _defeines/genetics reapplied narkism holdover for snowflake races. * Oops forgot mutant colors * modules porting 12/21 + Sounds/icons Admin, Client and most of mob life files ommitted * enviroment file * Admin optimizations ahelp log system kept * Mob ports 12/21 Flavor text preserved * datums ported 12/21 * Game ported 12/21 * batch of duplicate fixes/dogborg work Dogborgs need to be modernized to refractored borg standards. * moar fixes * Maps and futher compile fixes
109 lines
2.7 KiB
Plaintext
109 lines
2.7 KiB
Plaintext
var/datum/subsystem/timer/SStimer
|
|
|
|
/datum/subsystem/timer
|
|
name = "Timer"
|
|
wait = 2 //SS_TICKER subsystem, so wait is in ticks
|
|
init_order = 1
|
|
display_order = 3
|
|
can_fire = 0 //start disabled
|
|
flags = SS_FIRE_IN_LOBBY|SS_TICKER|SS_POST_FIRE_TIMING|SS_NO_INIT
|
|
|
|
var/list/datum/timedevent/processing
|
|
var/list/hashes
|
|
|
|
|
|
/datum/subsystem/timer/New()
|
|
processing = list()
|
|
hashes = list()
|
|
NEW_SS_GLOBAL(SStimer)
|
|
|
|
|
|
/datum/subsystem/timer/stat_entry(msg)
|
|
..("P:[processing.len]")
|
|
|
|
/datum/subsystem/timer/fire()
|
|
if(!processing.len)
|
|
can_fire = 0 //nothing to do, lets stop firing.
|
|
return
|
|
for(var/datum/timedevent/event in processing)
|
|
if(!event.thingToCall || qdeleted(event.thingToCall))
|
|
qdel(event)
|
|
if(event.timeToRun <= world.time)
|
|
runevent(event)
|
|
qdel(event)
|
|
if (MC_TICK_CHECK)
|
|
return
|
|
|
|
/datum/subsystem/timer/proc/runevent(datum/timedevent/event)
|
|
set waitfor = 0
|
|
if(event.thingToCall == GLOBAL_PROC && istext(event.procToCall))
|
|
call("/proc/[event.procToCall]")(arglist(event.argList))
|
|
else
|
|
call(event.thingToCall, event.procToCall)(arglist(event.argList))
|
|
|
|
/datum/subsystem/timer/Recover()
|
|
processing |= SStimer.processing
|
|
hashes |= SStimer.hashes
|
|
|
|
/datum/timedevent
|
|
var/thingToCall
|
|
var/procToCall
|
|
var/timeToRun
|
|
var/argList
|
|
var/id
|
|
var/hash
|
|
var/static/nextid = 1
|
|
|
|
/datum/timedevent/New()
|
|
id = nextid++
|
|
|
|
/datum/timedevent/Destroy()
|
|
SStimer.processing -= src
|
|
SStimer.hashes -= hash
|
|
return QDEL_HINT_IWILLGC
|
|
|
|
/proc/addtimer(thingToCall, procToCall, wait, unique = TIMER_NORMAL, ...)
|
|
if (!thingToCall || !procToCall)
|
|
return
|
|
if (!SStimer.can_fire)
|
|
SStimer.can_fire = 1
|
|
|
|
var/datum/timedevent/event = new()
|
|
event.thingToCall = thingToCall
|
|
event.procToCall = procToCall
|
|
event.timeToRun = world.time + wait
|
|
var/hashlist = args.Copy()
|
|
|
|
hashlist[1] = "[thingToCall](\ref[thingToCall])"
|
|
event.hash = jointext(hashlist, null)
|
|
|
|
var/bad_args = unique != TIMER_NORMAL && unique != TIMER_UNIQUE
|
|
if(args.len > 4 || bad_args)
|
|
if(bad_args)
|
|
stack_trace("Invalid arguments in call to addtimer! Attempt to call [thingToCall] proc [procToCall]")
|
|
event.argList = args.Copy(4)
|
|
else
|
|
event.argList = args.Copy(5)
|
|
|
|
// Check for dupes if unique = 1.
|
|
if(!bad_args && unique != TIMER_NORMAL) //faster than checking if(unique == TIMER_UNIQUE)
|
|
var/datum/timedevent/hash_event = SStimer.hashes[event.hash]
|
|
if(hash_event)
|
|
return hash_event.id
|
|
SStimer.hashes[event.hash] = event
|
|
if (wait <= 0)
|
|
SStimer.runevent(event)
|
|
SStimer.hashes -= event.hash
|
|
return
|
|
// If we are unique (or we're not checking that), add the timer and return the id.
|
|
SStimer.processing += event
|
|
|
|
return event.id
|
|
|
|
/proc/deltimer(id)
|
|
for(var/datum/timedevent/event in SStimer.processing)
|
|
if(event.id == id)
|
|
qdel(event)
|
|
return 1
|
|
return 0
|