mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 03:26:31 +01:00
Optimizes /proc/icon_exists() (#89357)
## About The Pull Request This PR reimplements https://github.com/tgstation/tgstation/pull/71538 atop `master`. Quoting the original PR: > Every `icon_exists()` call will cache the entire file. Past me didn't realise _why_ file opts were so expensive, but I do now. This is immeasurably slower on a single call, and _significantly_ faster on subsequent calls to the same file. I attempted to handle some of the review comments that were posted there, by splitting screaming functionality into its own proc. * `if(icon_state in icon_states(file))` and `if(!(icon_state in icon_states(file)))` were refactored to use `icon_exists(file, icon_state)`. * Where screaming was seemingly wanted (and where there wasn't a more descriptive error inside the `if` block), I refactored them to use `icon_exists_or_scream(file, icon_state)` * The exception to the above was under `/datum/unit_test/turf_icons/Run()` and `/datum/unit_test/worn_icons/Run()`, where `icon_states()` was being passed a mode flag. Given that this is only used in unit tests (where performance isn't a priority), I opted to leave these be. Additionally, I revised the documentation comment for `/proc/icon_exists()`, as I felt it was a bit vague currently. ## Why It's Good For The Game https://youtu.be/Z9G1Mf6TZRs ## Changelog No player-facing changes (hopefully). --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
This commit is contained in:
@@ -814,57 +814,57 @@ ADMIN_VERB(check_missing_sprites, R_DEBUG, "Debug Worn Item Sprites", "We're can
|
||||
continue
|
||||
//Is there an explicit worn_icon to pick against the worn_icon_state? Easy street expected behavior.
|
||||
if(sprite.worn_icon)
|
||||
if(!(sprite.icon_state in icon_states(sprite.worn_icon)))
|
||||
if(!icon_exists(sprite.worn_icon, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Slot Flags are [sprite.slot_flags]."), confidential = TRUE)
|
||||
else if(sprite.worn_icon_state)
|
||||
if(sprite.slot_flags & ITEM_SLOT_MASK)
|
||||
actual_file_name = 'icons/mob/clothing/mask.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_NECK)
|
||||
actual_file_name = 'icons/mob/clothing/neck.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_BACK)
|
||||
actual_file_name = 'icons/mob/clothing/back.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_HEAD)
|
||||
actual_file_name = 'icons/mob/clothing/head/default.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_BELT)
|
||||
actual_file_name = 'icons/mob/clothing/belt.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_SUITSTORE)
|
||||
actual_file_name = 'icons/mob/clothing/belt_mirror.dmi'
|
||||
if(!(sprite.worn_icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.worn_icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE)
|
||||
else if(sprite.icon_state)
|
||||
if(sprite.slot_flags & ITEM_SLOT_MASK)
|
||||
actual_file_name = 'icons/mob/clothing/mask.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Mask slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_NECK)
|
||||
actual_file_name = 'icons/mob/clothing/neck.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Neck slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_BACK)
|
||||
actual_file_name = 'icons/mob/clothing/back.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Back slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_HEAD)
|
||||
actual_file_name = 'icons/mob/clothing/head/default.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Head slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_BELT)
|
||||
actual_file_name = 'icons/mob/clothing/belt.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Belt slot."), confidential = TRUE)
|
||||
if(sprite.slot_flags & ITEM_SLOT_SUITSTORE)
|
||||
actual_file_name = 'icons/mob/clothing/belt_mirror.dmi'
|
||||
if(!(sprite.icon_state in icon_states(actual_file_name)))
|
||||
if(!icon_exists(actual_file_name, sprite.icon_state))
|
||||
to_chat(user, span_warning("ERROR sprites for [sprite.type]. Suit Storage slot."), confidential = TRUE)
|
||||
|
||||
#ifndef OPENDREAM
|
||||
|
||||
Reference in New Issue
Block a user