52 lines
1.4 KiB
Plaintext
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)
|