mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
* Always contracts lists when VVing GLOB (#76091) ## About The Pull Request This takes render times from like 20 seconds to maybe 2 Most of the time appears to be clientside rn, so the best we could do further would be reducing the amount of shit that actually needs to render So like, removing the E C M buttons (or at least adding a toggle to render them), that sort of thing ## Why It's Good For The Game A glob vv you can actually use  ## Changelog 🆑 admin: VV for global vars will now load MUCH faster, in exchange lists are now perma contracted in that particular pane /🆑 * Always contracts lists when VVing GLOB --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
65 lines
2.3 KiB
Plaintext
65 lines
2.3 KiB
Plaintext
// See initialization order in /code/game/world.dm
|
|
GLOBAL_REAL(GLOB, /datum/controller/global_vars)
|
|
|
|
/datum/controller/global_vars
|
|
name = "Global Variables"
|
|
|
|
var/static/list/gvars_datum_protected_varlist
|
|
var/list/gvars_datum_in_built_vars
|
|
var/list/gvars_datum_init_order
|
|
|
|
/datum/controller/global_vars/New()
|
|
if(GLOB)
|
|
CRASH("Multiple instances of global variable controller created")
|
|
GLOB = src
|
|
|
|
var/datum/controller/exclude_these = new
|
|
gvars_datum_in_built_vars = exclude_these.vars + list(NAMEOF(src, gvars_datum_protected_varlist), NAMEOF(src, gvars_datum_in_built_vars), NAMEOF(src, gvars_datum_init_order))
|
|
QDEL_IN(exclude_these, 0) //signal logging isn't ready
|
|
|
|
Initialize()
|
|
|
|
/datum/controller/global_vars/Destroy(force)
|
|
// This is done to prevent an exploit where admins can get around protected vars
|
|
SHOULD_CALL_PARENT(FALSE)
|
|
return QDEL_HINT_IWILLGC
|
|
|
|
/datum/controller/global_vars/stat_entry(msg)
|
|
msg = "Edit"
|
|
return msg
|
|
|
|
/datum/controller/global_vars/vv_edit_var(var_name, var_value)
|
|
if(gvars_datum_protected_varlist[var_name])
|
|
return FALSE
|
|
return ..()
|
|
|
|
/datum/controller/global_vars/vv_get_var(var_name)
|
|
switch(var_name)
|
|
if (NAMEOF(src, vars))
|
|
return debug_variable(var_name, list(), 0, src)
|
|
return debug_variable(var_name, vars[var_name], 0, src, display_flags = VV_ALWAYS_CONTRACT_LIST)
|
|
|
|
/datum/controller/global_vars/Initialize()
|
|
gvars_datum_init_order = list()
|
|
gvars_datum_protected_varlist = list(NAMEOF(src, gvars_datum_protected_varlist) = TRUE)
|
|
var/list/global_procs = typesof(/datum/controller/global_vars/proc)
|
|
var/expected_len = vars.len - gvars_datum_in_built_vars.len
|
|
if(global_procs.len != expected_len)
|
|
warning("Unable to detect all global initialization procs! Expected [expected_len] got [global_procs.len]!")
|
|
if(global_procs.len)
|
|
var/list/expected_global_procs = vars - gvars_datum_in_built_vars
|
|
for(var/I in global_procs)
|
|
expected_global_procs -= replacetext("[I]", "InitGlobal", "")
|
|
log_world("Missing procs: [expected_global_procs.Join(", ")]")
|
|
|
|
for(var/I in global_procs)
|
|
var/start_tick = world.time
|
|
call(src, I)()
|
|
var/end_tick = world.time
|
|
if(end_tick - start_tick)
|
|
warning("Global [replacetext("[I]", "InitGlobal", "")] slept during initialization!")
|
|
|
|
// Someone make it so this call isn't necessary
|
|
make_datum_reference_lists()
|
|
|