mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-20 22:54:46 +00:00
* Make spritesheets cacheable by default, killing a lot of overtime in the round start spike (#80522) ## About The Pull Request Makes all spritesheets cache by default. This wasn't the case originally because some spritesheets like vending machines relied on in world state, but none of them do anymore because that's whack. Also fixes a bug that would cause half completed caches to break other stuff. This didn't happen in real gameplay, but would've happened if you tried to change cachable on anything while you already had a tmp folder. ## Changelog 🆑 fix: Cut down a significant amount of time that caused the start of rounds to lag. /🆑 * Make spritesheets cacheable by default, killing a lot of overtime in the round start spike --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
64 lines
2.1 KiB
Plaintext
64 lines
2.1 KiB
Plaintext
/// Assets generated from `/datum/preference` icons
|
|
/datum/asset/spritesheet/preferences
|
|
name = "preferences"
|
|
early = TRUE
|
|
|
|
/datum/asset/spritesheet/preferences/create_spritesheets()
|
|
var/list/to_insert = list()
|
|
|
|
for (var/preference_key in GLOB.preference_entries_by_key)
|
|
var/datum/preference/choiced/preference = GLOB.preference_entries_by_key[preference_key]
|
|
if (!istype(preference))
|
|
continue
|
|
|
|
if (!preference.should_generate_icons)
|
|
continue
|
|
|
|
for (var/preference_value in preference.get_choices())
|
|
var/create_icon_of = preference.icon_for(preference_value)
|
|
|
|
var/icon/icon
|
|
var/icon_state
|
|
|
|
if (ispath(create_icon_of, /atom))
|
|
var/atom/atom_icon_source = create_icon_of
|
|
icon = initial(atom_icon_source.icon)
|
|
icon_state = initial(atom_icon_source.icon_state)
|
|
else if (isicon(create_icon_of))
|
|
icon = create_icon_of
|
|
else
|
|
CRASH("[create_icon_of] is an invalid preference value (from [preference_key]:[preference_value]).")
|
|
|
|
to_insert[preference.get_spritesheet_key(preference.serialize(preference_value))] = list(icon, icon_state)
|
|
|
|
for (var/spritesheet_key in to_insert)
|
|
var/list/inserting = to_insert[spritesheet_key]
|
|
Insert(spritesheet_key, inserting[1], inserting[2])
|
|
|
|
/// Returns the key that will be used in the spritesheet for a given value.
|
|
/datum/preference/proc/get_spritesheet_key(value)
|
|
return "[savefile_key]___[sanitize_css_class_name(value)]"
|
|
|
|
/// Sends information needed for shared details on individual preferences
|
|
/datum/asset/json/preferences
|
|
name = "preferences"
|
|
|
|
/datum/asset/json/preferences/generate()
|
|
var/list/preference_data = list()
|
|
|
|
for (var/middleware_type in subtypesof(/datum/preference_middleware))
|
|
var/datum/preference_middleware/middleware = new middleware_type
|
|
var/data = middleware.get_constant_data()
|
|
if (!isnull(data))
|
|
preference_data[middleware.key] = data
|
|
|
|
qdel(middleware)
|
|
|
|
for (var/preference_type in GLOB.preference_entries)
|
|
var/datum/preference/preference_entry = GLOB.preference_entries[preference_type]
|
|
var/data = preference_entry.compile_constant_data()
|
|
if (!isnull(data))
|
|
preference_data[preference_entry.savefile_key] = data
|
|
|
|
return preference_data
|