Files
siliconsandGitHub 9d6a141e5b mc update: init stages, better subsystem init tracking, etc (#6857)
modifies the hollow metrics API; that'll probably be implemented soon
adds init stages
changes SSatoms to not abuse its `initialized` variable

closes #6858
2024-11-15 14:41:25 -07:00

85 lines
2.9 KiB
Plaintext

SUBSYSTEM_DEF(preferences)
name = "Preferences"
init_order = INIT_ORDER_PREFERENCES
init_stage = INIT_STAGE_EARLY
subsystem_flags = SS_NO_FIRE
var/list/datum/game_preference_entry/entries_by_key
var/list/datum/game_preference_toggle/toggles_by_key
var/static/list/datum/game_preferences/preferences_by_key = list()
/datum/controller/subsystem/preferences/Initialize()
init_preference_entries()
init_preference_toggles()
for(var/key in preferences_by_key)
var/datum/game_preferences/prefs = preferences_by_key[key]
prefs.initialize()
return SS_INIT_SUCCESS
/datum/controller/subsystem/preferences/proc/resolve_preference_entry(datum/game_preference_entry/entrylike)
if(ispath(entrylike))
entrylike = initial(entrylike.key)
entrylike = entries_by_key[entrylike]
else if(istype(entrylike))
else
entrylike = entries_by_key[entrylike]
return entrylike
/datum/controller/subsystem/preferences/proc/resolve_preference_toggle(datum/game_preference_toggle/togglelike)
if(ispath(togglelike))
togglelike = initial(togglelike.key)
togglelike = toggles_by_key[togglelike]
else if(istype(togglelike))
else
togglelike = toggles_by_key[togglelike]
return togglelike
/datum/controller/subsystem/preferences/proc/init_preference_entries()
. = list()
for(var/datum/game_preference_entry/casted as anything in subtypesof(/datum/game_preference_entry))
if(initial(casted.abstract_type) == casted)
continue
casted = new casted
if(!casted.key || !istext(casted.key))
STACK_TRACE("bad key: [casted.key]")
continue
if(!isnull(.[casted.key]))
STACK_TRACE("dupe key between [casted.type] and [.[casted.key]:type]")
continue
.[casted.key] = casted
entries_by_key = .
/datum/controller/subsystem/preferences/proc/init_preference_toggles()
. = list()
for(var/datum/game_preference_toggle/casted as anything in subtypesof(/datum/game_preference_toggle))
if(initial(casted.abstract_type) == casted)
continue
casted = new casted
if(!casted.key || !istext(casted.key))
STACK_TRACE("bad key: [casted.key]")
continue
if(!isnull(.[casted.key]))
STACK_TRACE("dupe key between [casted.type] and [.[casted.key]:type]")
continue
.[casted.key] = casted
toggles_by_key = .
/datum/controller/subsystem/preferences/proc/resolve_game_preferences(key, ckey)
if(!istype(preferences_by_key[ckey], /datum/game_preferences))
var/datum/game_preferences/initializing = new(key, ckey)
preferences_by_key[ckey] = initializing
if(initialized)
initializing.initialize()
var/datum/game_preferences/found = preferences_by_key[ckey]
if(initialized && !found.initialized)
found.initialize()
return found
/datum/controller/subsystem/preferences/on_sql_reconnect()
for(var/ckey in SSpreferences.preferences_by_key)
var/datum/game_preferences/preferences = SSpreferences.preferences_by_key[ckey]
if(!istype(preferences))
continue
preferences.oops_sql_came_back_perform_a_reload()
return ..()