Update SSOverlays (ported from Baystation) (#19051)

Our SSOverlays system is outdated, and is likely the cause of many of
the issues seen in #18895. It has also been linked to a massive server
performance decrease.

This brings an updated system from Baystation, hopefully with speed
increases.

Should be testmerged, ideally with #18895.

---------

Co-authored-by: Cody Brittain <cbrittain10@live.com>
This commit is contained in:
Cody Brittain
2024-05-01 07:46:27 +00:00
committed by GitHub
co-authored by Cody Brittain
parent 405a05b819
commit 9983fca311
350 changed files with 1626 additions and 1498 deletions
@@ -7,11 +7,11 @@
/obj/item/bee_pack/Initialize()
. = ..()
add_overlay("bee_pack-full")
AddOverlays("bee_pack-full")
/obj/item/bee_pack/update_icon()
cut_overlays()
add_overlay("bee_pack-[full ? "full" : "empty"]")
ClearOverlays()
AddOverlays("bee_pack-[full ? "full" : "empty"]")
/obj/item/bee_pack/proc/empty()
name = "empty bee pack"
@@ -29,22 +29,22 @@
var/list/owned_bee_swarms = list()
/obj/machinery/beehive/update_icon()
cut_overlays()
ClearOverlays()
icon_state = "beehive"
if(closed)
add_overlay("lid")
AddOverlays("lid")
if(frames)
add_overlay("empty[frames]")
AddOverlays("empty[frames]")
if(honeycombs >= 100)
add_overlay("full[round(honeycombs / 100)]")
AddOverlays("full[round(honeycombs / 100)]")
if(!smoked)
switch(bee_count)
if(1 to 40)
add_overlay("bees1")
AddOverlays("bees1")
if(41 to 80)
add_overlay("bees2")
AddOverlays("bees2")
if(81 to 100)
add_overlay("bees3")
AddOverlays("bees3")
/obj/machinery/beehive/get_examine_text(mob/user, distance, is_adjacent, infix, suffix)
. = ..()
@@ -13,4 +13,4 @@
/obj/item/honey_frame/filled/Initialize()
. = ..()
add_overlay("honeycomb")
AddOverlays("honeycomb")
+4 -4
View File
@@ -129,7 +129,7 @@
/obj/item/reagent_containers/food/snacks/grown/update_icon()
if(!seed || !SSplants || !SSplants.plant_icon_cache)
return
cut_overlays()
ClearOverlays()
var/image/plant_icon
var/icon_key = "fruit-[seed.get_trait(TRAIT_PRODUCT_ICON)]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]-[seed.get_trait(TRAIT_PLANT_COLOUR)]"
if(SSplants.plant_icon_cache[icon_key])
@@ -144,7 +144,7 @@
fruit_leaves.color = "[seed.get_trait(TRAIT_PLANT_COLOUR)]"
plant_icon.overlays |= fruit_leaves
SSplants.plant_icon_cache[icon_key] = plant_icon
add_overlay(plant_icon)
AddOverlays(plant_icon)
/obj/item/reagent_containers/food/snacks/grown/Crossed(var/mob/living/M)
if(seed && seed.get_trait(TRAIT_JUICY) == 2)
@@ -377,12 +377,12 @@ var/list/fruit_icon_cache = list()
var/image/I = image(icon,"fruit_rind")
I.color = rind_colour
fruit_icon_cache["rind-[rind_colour]"] = I
add_overlay(fruit_icon_cache["rind-[rind_colour]"])
AddOverlays(fruit_icon_cache["rind-[rind_colour]"])
if(!fruit_icon_cache["slice-[rind_colour]"])
var/image/I = image(icon,"fruit_slice")
I.color = flesh_colour
fruit_icon_cache["slice-[rind_colour]"] = I
add_overlay(fruit_icon_cache["slice-[rind_colour]"])
AddOverlays(fruit_icon_cache["slice-[rind_colour]"])
/obj/item/reagent_containers/food/snacks/grown/konyang_tea
name = "sencha leaves"
+1 -1
View File
@@ -908,7 +908,7 @@ GLOBAL_LIST_INIT(seed_icon_cache, list())
leaves_image.color = leaves_color
leaves_image.appearance_flags = RESET_COLOR
//Add ourself as overlays to the generated image
generated_image.add_overlay(leaves_image)
generated_image.AddOverlays(leaves_image)
//Store the image in the cache, so we won't have to keep generating it
GLOB.seed_icon_cache[SEED_ICON_CACHE_KEY(icon_file_to_request, icon_state_to_request, color_to_request, leaves_overlay_to_request)] = generated_image
+3 -3
View File
@@ -27,7 +27,7 @@ GLOBAL_LIST_EMPTY(plant_seed_sprites)
return
// Update icon.
cut_overlays()
ClearOverlays()
var/is_seeds = ((seed.seed_noun in list(SEED_NOUN_SEEDS, SEED_NOUN_PITS, SEED_NOUN_NODES)) ? 1 : 0)
var/image/seed_mask
var/seed_base_key = "base-[is_seeds ? seed.get_trait(TRAIT_PLANT_COLOUR) : SEED_NOUN_SPORES]"
@@ -48,8 +48,8 @@ GLOBAL_LIST_EMPTY(plant_seed_sprites)
seed_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
GLOB.plant_seed_sprites[seed_overlay_key] = seed_overlay
add_overlay(seed_mask)
add_overlay(seed_overlay)
AddOverlays(seed_mask)
AddOverlays(seed_overlay)
if(is_seeds)
src.name = "packet of [seed.seed_name] [seed.seed_noun]"
@@ -185,7 +185,7 @@
if(!istype(our_icon))
crash_with("The plant didn't return an icon!")
add_overlay(our_icon)
AddOverlays(our_icon)
if(growth>2 && growth == max_growth)
layer = (seed && seed.force_layer) ? seed.force_layer : 5
@@ -70,10 +70,10 @@
drop_sound = 'sound/weapons/jug_empty_impact.ogg'
/obj/item/reagent_containers/glass/fertilizer/update_icon()
cut_overlays()
ClearOverlays()
if(!is_open_container())
add_overlay("lid_jug")
AddOverlays("lid_jug")
/obj/item/reagent_containers/glass/fertilizer/ez
name = "jug of E-Z-Nutrient"
@@ -12,12 +12,12 @@
if(labelled)
name += " ([labelled])"
cut_overlays()
ClearOverlays()
// Updates the plant overlay.
if(!isnull(seed))
if(mechanical && health <= (seed.get_trait(TRAIT_ENDURANCE) / 2))
add_overlay("over_lowhealth3")
AddOverlays("over_lowhealth3")
if(dead)
var/ikey = "[seed.get_trait(TRAIT_PLANT_ICON)]-dead"
@@ -25,7 +25,7 @@
if(!dead_overlay)
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
dead_overlay.color = DEAD_PLANT_COLOUR
add_overlay(dead_overlay)
AddOverlays(dead_overlay)
else
if(!seed.growth_stages)
seed.update_growth_stages()
@@ -41,7 +41,7 @@
maturation = 1
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
var/image/plant_overlay = seed.get_icon(overlay_stage)
add_overlay(plant_overlay)
AddOverlays(plant_overlay)
if(harvest && overlay_stage == seed.growth_stages)
var/ikey = "[seed.get_trait(TRAIT_PRODUCT_ICON)]"
@@ -50,22 +50,22 @@
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
harvest_overlay.color = seed.get_trait(TRAIT_PRODUCT_COLOUR)
SSplants.plant_icon_cache["product-[ikey]-[seed.get_trait(TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
add_overlay(harvest_overlay)
AddOverlays(harvest_overlay)
//Draw the cover.
if(closed_system)
add_overlay("hydrocover")
AddOverlays("hydrocover")
//Updated the various alert icons.
if(mechanical)
if(waterlevel <= 10)
add_overlay("over_lowwater3")
AddOverlays("over_lowwater3")
if(nutrilevel <= 2)
add_overlay("over_lownutri3")
AddOverlays("over_lownutri3")
if(pestlevel >= 5 || toxins >= 40) // Hydroponics trays no longer face issues with weeds. GET OUTTA HERE.
add_overlay("over_alert3")
AddOverlays("over_alert3")
if(harvest)
add_overlay("over_harvest3")
AddOverlays("over_harvest3")
if(seed && seed.get_trait(TRAIT_LARGE))
density = TRUE