Reduce vending spritesheet init time (#16176)

This commit is contained in:
Wildkins
2023-04-11 06:01:09 -04:00
committed by GitHub
parent ef0ee50f03
commit b347304ccd
2 changed files with 42 additions and 26 deletions

View File

@@ -537,51 +537,61 @@ var/list/asset_datums = list()
name = "vending"
/datum/asset/spritesheet/vending/register()
var/list/vending_products = list()
for(var/v_type in typesof(/obj/machinery/vending))
var/obj/machinery/vending/V = new v_type
for(var/list/p in list(V.products, V.contraband, V.premium))
for(var/k in p)
vending_products += k
var/vending_products = list()
for(var/obj/machinery/vending/vendor as anything in typesof(/obj/machinery/vending))
vendor = new vendor()
for(var/each in list(vendor.products, vendor.contraband, vendor.premium))
vending_products |= each
qdel(vendor)
for(var/path in vending_products)
var/obj/O = new path
var/icon_file = O.icon
var/icon_state = O.icon_state
var/icon/I
var/atom/item = path
if(!ispath(item, /atom))
continue
var/icon_file = initial(item.icon)
var/icon_state = initial(item.icon_state)
#ifdef UNIT_TEST
var/icon_states_list = icon_states(icon_file)
if(icon_state in icon_states_list)
I = icon(icon_file, icon_state, SOUTH)
var/c = O.color
if(!isnull(c) && c != "#FFFFFF")
I.Blend(c, ICON_MULTIPLY)
else
if(!(icon_state in icon_states_list))
var/icon_states_string
for(var/s in icon_states_list)
if(!icon_states_string)
icon_states_string = "[json_encode(s)](\ref[s])"
else
icon_states_string += ", [json_encode(s)](\ref[s])"
log_error("[O] has an invalid icon state, icon=[icon_file], icon_state=[json_encode(icon_state)](\ref[icon_state]), icon_states=[icon_states_string]")
I = icon('icons/turf/floors.dmi', "", SOUTH)
var/imgid = ckey("[path]")
stack_trace("[item] has an invalid icon state, icon=[icon_file], icon_state=[json_encode(icon_state)](\ref[icon_state]), icon_states=[icon_states_string]")
continue
#endif
if(istype(O, /obj/item/seeds))
var/icon/I = icon(icon_file, icon_state, SOUTH)
var/c = initial(item.color)
if(!isnull(c) && c != "#FFFFFF")
I.Blend(c, ICON_MULTIPLY)
var/imgid = ckey("[item]")
item = new item()
if(ispath(item, /obj/item/seeds))
// thanks seeds for being overlays defined at runtime
var/obj/item/seeds/S = O
var/obj/item/seeds/S = item
if(!S.seed && S.seed_type && !isnull(SSplants.seeds) && SSplants.seeds[S.seed_type])
S.seed = SSplants.seeds[S.seed_type]
I = S.update_appearance(TRUE)
Insert(imgid, I, forced=I)
else
O.update_icon()
if(O.overlay_queued)
O.compile_overlays()
if(O.overlays.len)
I = getFlatIcon(O) // forgive me for my performance sins
item.update_icon()
if(item.overlay_queued)
item.compile_overlays()
if(item.overlays.len)
I = getFlatIcon(item) // forgive me for my performance sins
Insert(imgid, I, forced=I)
else
Insert(imgid, I)
qdel(item)
return ..()
/datum/asset/spritesheet/chem_master