Skip to content

Commit

Permalink
[PORT] Implements icon size caching to avoid unnecessary load in upda…
Browse files Browse the repository at this point in the history
  • Loading branch information
Absolucy authored Dec 8, 2024
1 parent a19f58e commit 3404e4f
Show file tree
Hide file tree
Showing 11 changed files with 56 additions and 79 deletions.
6 changes: 2 additions & 4 deletions code/datums/components/life_link.dm
Original file line number Diff line number Diff line change
Expand Up @@ -129,16 +129,14 @@
if(isnull(holder))
return
holder.icon_state = "hud[RoundHealth(host)]"
var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir)
holder.pixel_y = size_check.Height() - world.icon_size
holder.pixel_y = mob_parent.get_cached_height() - world.icon_size

/// Update our vital status on the medical hud
/datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent)
var/image/holder = mob_parent.hud_list?[STATUS_HUD]
if(isnull(holder))
return
var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir)
holder.pixel_y = size_check.Height() - world.icon_size
holder.pixel_y = mob_parent.get_cached_height() - world.icon_size
if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH))
holder.icon_state = "huddead"
else
Expand Down
3 changes: 1 addition & 2 deletions code/datums/components/seethrough_mob.dm
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,8 @@
for(var/atom/movable/screen/plane_master/seethrough as anything in our_hud.get_true_plane_masters(SEETHROUGH_PLANE))
seethrough.unhide_plane(fool)

var/icon/current_mob_icon = icon(fool.icon, fool.icon_state)
render_source_atom.pixel_x = -fool.pixel_x
render_source_atom.pixel_y = ((current_mob_icon.Height() - 32) * 0.5)
render_source_atom.pixel_y = ((fool.get_cached_height() - world.icon_size) * 0.5)

initial_render_target_value = fool.render_target
fool.render_target = "*transparent_bigmob[personal_uid]"
Expand Down
3 changes: 1 addition & 2 deletions code/datums/status_effects/stacking_effect.dm
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,7 @@
if(underlay_file)
status_underlay = mutable_appearance(underlay_file, "[underlay_state][stacks]")

var/icon/I = icon(owner.icon, owner.icon_state, owner.dir)
var/icon_height = I.Height()
var/icon_height = owner.get_cached_height()

if(status_overlay)
status_overlay.pixel_x = -owner.pixel_x
Expand Down
90 changes: 41 additions & 49 deletions code/game/data_huds.dm
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,7 @@ Medical HUD! Basic mode needs suit sensors on.
return

holder.icon_state = "hud[RoundHealth(src)]"
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size

//for carbon suit sensors
/mob/living/carbon/med_hud_set_health()
Expand All @@ -208,8 +207,7 @@ Medical HUD! Basic mode needs suit sensors on.
if (isnull(holder))
return

var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
if(sensors)
SET_PLANE_EXPLICIT(sensors, ABOVE_LIGHTING_PLANE, src)
Expand All @@ -225,9 +223,8 @@ Medical HUD! Basic mode needs suit sensors on.
if (isnull(holder))
return

var/icon/I = icon(icon, icon_state, dir)
var/virus_threat = check_virus()
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(HAS_TRAIT(src, TRAIT_XENO_HOST))
holder.icon_state = "hudxeno"
else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH)))
Expand Down Expand Up @@ -263,8 +260,7 @@ FAN HUDs! For identifying other fans on-sight.

/mob/living/carbon/human/proc/fan_hud_set_fandom()
var/image/holder = hud_list[FAN_HUD]
var/icon/hud_icon = icon(icon, icon_state, dir)
holder.pixel_y = hud_icon.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hudfan_no"

var/obj/item/clothing/under/undershirt = w_uniform
Expand Down Expand Up @@ -294,16 +290,15 @@ Security HUDs! Basic mode shows only the job.

/mob/living/carbon/human/proc/sec_hud_set_ID()
var/image/holder = hud_list[ID_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
var/sechud_icon_state = wear_id?.get_sechud_job_icon_state()
if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN))
sechud_icon_state = "hudno_id"
holder.icon_state = sechud_icon_state
sec_hud_set_security_status()
//monkestation edit start
var/image/permit_holder = hud_list[PERMIT_HUD]
permit_holder.pixel_y = I.Height() - world.icon_size
permit_holder.pixel_y = get_cached_height() - world.icon_size
var/permit_icon_state = wear_id?.get_gun_permit_iconstate()
if(!permit_icon_state)
permit_icon_state = "hudfan_no"
Expand All @@ -320,29 +315,25 @@ Security HUDs! Basic mode shows only the job.
for(var/obj/item/implant/I in implants)
if(istype(I, /obj/item/implant/tracking))
holder = hud_list[IMPTRACK_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_tracking"
set_hud_image_active(IMPTRACK_HUD)

else if(istype(I, /obj/item/implant/chem))
holder = hud_list[IMPCHEM_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_chem"
set_hud_image_active(IMPCHEM_HUD)

if(HAS_TRAIT(src, TRAIT_MINDSHIELD))
holder = hud_list[IMPLOYAL_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "hud_imp_loyal"
set_hud_image_active(IMPLOYAL_HUD)

/mob/living/carbon/human/proc/sec_hud_set_security_status()
var/image/holder = hud_list[WANTED_HUD]
var/icon/sec_icon = icon(icon, icon_state, dir)
holder.pixel_y = sec_icon.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
var/perp_name = get_face_name(get_id_name(""))

if(!perp_name || !GLOB.manifest)
Expand Down Expand Up @@ -376,8 +367,7 @@ Diagnostic HUDs!

/mob/living/proc/hud_set_nanite_indicator()
var/image/holder = hud_list[NANITE_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = null
if(HAS_TRAIT(src, TRAIT_NANITE_MONITORING))
holder.icon_state = "nanite_ping"
Expand All @@ -403,17 +393,15 @@ Diagnostic HUDs!
//Sillycone hooks
/mob/living/silicon/proc/diag_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD)
holder.icon_state = "huddiagdead"
else
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"

/mob/living/silicon/proc/diag_hud_set_status()
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
switch(stat)
if(CONSCIOUS)
holder.icon_state = "hudstat"
Expand All @@ -425,8 +413,7 @@ Diagnostic HUDs!
//Borgie battery tracking!
/mob/living/silicon/robot/proc/diag_hud_set_borgcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = (cell.charge/cell.maxcharge)
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
Expand All @@ -436,8 +423,7 @@ Diagnostic HUDs!
//borg-AI shell tracking
/mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech
var/image/holder = hud_list[DIAG_TRACK_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(!shell) //Not an AI shell
holder.icon_state = null
set_hud_image_inactive(DIAG_TRACK_HUD)
Expand All @@ -451,8 +437,7 @@ Diagnostic HUDs!
//AI side tracking of AI shell control
/mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech
var/image/holder = hud_list[DIAG_TRACK_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(!deployed_shell)
holder.icon_state = null
set_hud_image_inactive(DIAG_TRACK_HUD)
Expand All @@ -465,15 +450,13 @@ Diagnostic HUDs!
~~~~~~~~~~~~~~~~~~~~~*/
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth()
var/image/holder = hud_list[DIAG_MECH_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(atom_integrity/max_integrity)]"


/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = cell.charge/cell.maxcharge
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
Expand All @@ -482,8 +465,7 @@ Diagnostic HUDs!

/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat()
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(internal_damage)
holder.icon_state = "hudwarn"
set_hud_image_active(DIAG_STAT_HUD)
Expand All @@ -494,8 +476,7 @@ Diagnostic HUDs!
///Shows tracking beacons on the mech
/obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking()
var/image/holder = hud_list[DIAG_TRACK_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
var/new_icon_state //This var exists so that the holder's icon state is set only once in the event of multiple mech beacons.
for(var/obj/item/mecha_parts/mecha_tracking/T in trackers)
if(T.ai_beacon) //Beacon with AI uplink
Expand All @@ -508,8 +489,7 @@ Diagnostic HUDs!
///Shows inbuilt camera on the mech; if the camera's view range was affected by an EMP, shows a red blip while it's affected
/obj/vehicle/sealed/mecha/proc/diag_hud_set_camera()
var/image/holder = hud_list[DIAG_CAMERA_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(chassis_camera.is_emp_scrambled)
holder.icon_state = "hudcamera_empd"
return
Expand All @@ -520,14 +500,12 @@ Diagnostic HUDs!
~~~~~~~~~~*/
/mob/living/simple_animal/bot/proc/diag_hud_set_bothealth()
var/image/holder = hud_list[DIAG_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"

/mob/living/simple_animal/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(bot_mode_flags & BOT_MODE_ON)
holder.icon_state = "hudstat"
else if(stat) //Generally EMP causes this
Expand All @@ -537,8 +515,7 @@ Diagnostic HUDs!

/mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation
var/image/holder = hud_list[DIAG_BOT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(client) //If the bot is player controlled, it will not be following mode logic!
holder.icon_state = "hudsentient"
return
Expand All @@ -559,8 +536,7 @@ Diagnostic HUDs!

/mob/living/simple_animal/bot/mulebot/proc/diag_hud_set_mulebotcell()
var/image/holder = hud_list[DIAG_BATT_HUD]
var/icon/I = icon(icon, icon_state, dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(cell)
var/chargelvl = (cell.charge/cell.maxcharge)
holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]"
Expand All @@ -577,3 +553,19 @@ Diagnostic HUDs!
var/image/holder = hud_list[DIAG_AIRLOCK_HUD]
holder.icon_state = "electrified"
set_hud_image_active(DIAG_AIRLOCK_HUD)

#define CACHED_WIDTH_INDEX "width"
#define CACHED_HEIGHT_INDEX "height"
/atom/proc/get_cached_width()
if (isnull(icon))
return 0
var/list/dimensions = get_icon_dimensions(icon)
return dimensions[CACHED_WIDTH_INDEX]

/atom/proc/get_cached_height()
if (isnull(icon))
return 0
var/list/dimensions = get_icon_dimensions(icon)
return dimensions[CACHED_HEIGHT_INDEX]
#undef CACHED_WIDTH_INDEX
#undef CACHED_HEIGHT_INDEX
3 changes: 1 addition & 2 deletions code/game/objects/effects/temporary_visuals/miscellaneous.dm
Original file line number Diff line number Diff line change
Expand Up @@ -447,8 +447,7 @@
var/size_matrix = matrix()
if(size_calc_target)
layer = size_calc_target.layer + 0.01
var/icon/I = icon(size_calc_target.icon, size_calc_target.icon_state, size_calc_target.dir)
size_matrix = matrix() * (I.Height()/world.icon_size)
size_matrix = matrix() * (size_calc_target.get_cached_height() /world.icon_size)
transform = size_matrix //scale the bleed overlay's size based on the target's icon size
var/matrix/M = transform
if(shrink)
Expand Down
3 changes: 1 addition & 2 deletions code/modules/antagonists/abductor/equipment/gland.dm
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,7 @@
if(!owner)
return
var/image/holder = owner.hud_list[GLAND_HUD]
var/icon/I = icon(owner.icon, owner.icon_state, owner.dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = owner.get_cached_height() - world.icon_size
if(active_mind_control)
holder.icon_state = "hudgland_active"
else if(mind_control_uses)
Expand Down
3 changes: 1 addition & 2 deletions code/modules/antagonists/changeling/powers/transform.dm
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,7 @@
. = ..()
if(hud_icon)
var/image/holder = user.hud_list[ID_HUD]
var/icon/I = icon(user.icon, user.icon_state, user.dir)
holder.pixel_y = I.Height() - world.icon_size
holder.pixel_y = user.get_cached_height() - world.icon_size
holder.icon_state = hud_icon

/**
Expand Down
9 changes: 3 additions & 6 deletions code/modules/mob/living/basic/bots/bot_hud.dm
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
/mob/living/basic/bot/proc/diag_hud_set_bothealth()
var/image/holder = hud_list[DIAG_HUD]
var/icon/icon_image = icon(icon, icon_state, dir)
holder.pixel_y = icon_image.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"

/mob/living/basic/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/our_icon = icon(icon, icon_state, dir)
holder.pixel_y = our_icon.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(bot_mode_flags & BOT_MODE_ON)
holder.icon_state = "hudstat"
return
Expand All @@ -18,8 +16,7 @@

/mob/living/basic/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation
var/image/holder = hud_list[DIAG_BOT_HUD]
var/icon/icon_image = icon(icon, icon_state, dir)
holder.pixel_y = icon_image.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(client) //If the bot is player controlled, it will not be following mode logic!
holder.icon_state = "hudsentient"
return
Expand Down
6 changes: 2 additions & 4 deletions code/modules/mob/living/basic/drone/_drone.dm
Original file line number Diff line number Diff line change
Expand Up @@ -214,14 +214,12 @@

/mob/living/basic/drone/med_hud_set_health()
var/image/holder = hud_list[DIAG_HUD]
var/icon/hud_icon = icon(icon, icon_state, dir)
holder.pixel_y = hud_icon.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]"

/mob/living/basic/drone/med_hud_set_status()
var/image/holder = hud_list[DIAG_STAT_HUD]
var/icon/hud_icon = icon(icon, icon_state, dir)
holder.pixel_y = hud_icon.Height() - world.icon_size
holder.pixel_y = get_cached_height() - world.icon_size
if(stat == DEAD)
holder.icon_state = "huddead2"
else if(incapacitated())
Expand Down
6 changes: 2 additions & 4 deletions code/modules/mob/living/living.dm
Original file line number Diff line number Diff line change
Expand Up @@ -712,9 +712,7 @@

/// Returns what the body_position_pixel_y_offset should be if the current size were `value`
/mob/living/proc/get_pixel_y_offset_standing(value)
var/icon/living_icon = icon(icon)
var/height = living_icon.Height()
return (value-1) * height * 0.5
return (value - 1) * get_cached_height() * 0.5

/mob/living/proc/update_density()
if(HAS_TRAIT(src, TRAIT_UNDENSE))
Expand Down Expand Up @@ -804,7 +802,7 @@
if(!livingdoll.filtered)
livingdoll.filtered = TRUE
var/icon/mob_mask = icon(icon, icon_state)
if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size)
if(get_cached_height() > world.icon_size || get_cached_width() > world.icon_size)
var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite"
mob_mask = icon('icons/hud/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll
livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask))
Expand Down
Loading

0 comments on commit 3404e4f

Please sign in to comment.