mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-21 08:36:57 +01:00
modifies the hollow metrics API; that'll probably be implemented soon adds init stages changes SSatoms to not abuse its `initialized` variable closes #6858
85 lines
2.9 KiB
Plaintext
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 ..()
|