Files
2024-09-13 01:50:58 -04:00

52 lines
1.4 KiB
Plaintext

//Ported from virgo, with some touch ups to make it work with our code.
/mob/living
var/list/status_indicators = null // Will become a list as needed.
/mob/living/proc/add_status_indicator(mutable_appearance/thing)
if(get_status_indicator(thing))
return
if(!istype(thing, /mutable_appearance))
thing = mutable_appearance('hyperstation/icons/mob/status_indicators.dmi', icon_state = thing)
LAZYADD(status_indicators, thing)
handle_status_indicators()
/mob/living/proc/remove_status_indicator(mutable_appearance/thing)
thing = get_status_indicator(thing)
cut_overlay(thing)
LAZYREMOVE(status_indicators, thing)
handle_status_indicators()
/mob/living/proc/get_status_indicator(mutable_appearance/thing)
if(!istype(thing, /mutable_appearance))
for(var/mutable_appearance/I in status_indicators)
if(I.icon_state == thing)
return I
return LAZYACCESS(status_indicators, LAZYFIND(status_indicators, thing))
/mob/living/proc/handle_status_indicators()
// First, get rid of all the overlays.
for(var/thing in status_indicators)
cut_overlay(thing)
if(!LAZYLEN(status_indicators))
return
if(stat == DEAD)
return
// Now the indicator row can actually be built.
for(var/thing in status_indicators)
var/mutable_appearance/I = thing
I.appearance_flags = PIXEL_SCALE|KEEP_APART
I.mouse_opacity = MOUSE_OPACITY_TRANSPARENT
I.plane = HUD_PLANE
I.layer = ABOVE_FLY_LAYER
I.pixel_y = 18
I.pixel_x = 18
add_overlay(I)