mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-20 03:30:01 +01:00
Verb PR broke the dreamseeker debug launch option and will spew runtimes until the debugger chokes and crashes. A lot of our devs use this option so this is pretty high prio.
39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
SUBSYSTEM_DEF(verbs)
|
|
name = "Verbs"
|
|
ss_flags = SS_NO_FIRE
|
|
init_stage = INITSTAGE_EARLY
|
|
var/list/datum/verb_metadata/verbs_by_type = list()
|
|
|
|
/datum/controller/subsystem/verbs/Initialize()
|
|
if (!length(verbs_by_type))
|
|
initialize_verb_types()
|
|
initialized = TRUE
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/verbs/proc/initialize_verb_types()
|
|
for(var/datum/verb_metadata/verb_type as anything in subtypesof(/datum/verb_metadata))
|
|
verbs_by_type[verb_type] = new verb_type
|
|
|
|
/datum/controller/subsystem/verbs/proc/invoke(target, datum/verb_metadata/verb_type, ...)
|
|
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
|
|
if(isnull(meta))
|
|
CRASH("Attempted to invoke unknown verb '[verb_type]'.")
|
|
var/list/invoke_args = args.Copy(3)
|
|
call(target, meta.body_path)(arglist(invoke_args))
|
|
|
|
/datum/controller/subsystem/verbs/proc/assign_verb(target, datum/verb_metadata/verb_type)
|
|
// When launching via dreamseeker and not dreamdaemon, client is created first before any of the subsystems init
|
|
// This can only happen in dev environments so its not a big deal
|
|
if (!initialized)
|
|
initialize_verb_types()
|
|
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
|
|
if(isnull(meta))
|
|
CRASH("Attempted to assign unknown verb '[verb_type]'.")
|
|
meta.assign_to(target)
|
|
|
|
/datum/controller/subsystem/verbs/proc/unassign_verb(target, datum/verb_metadata/verb_type)
|
|
var/datum/verb_metadata/meta = verbs_by_type[verb_type]
|
|
if(isnull(meta))
|
|
CRASH("Attempted to unassign unknown verb '[verb_type]'.")
|
|
meta.unassign_from(target)
|