diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index d9493d6f..8e29859a 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -556,6 +556,11 @@ GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put var/restingpwr = 1 + 4 * resting + if(!client) + add_status_indicator("ssd") + else + remove_status_indicator("ssd") + //Dizziness if(dizziness) var/client/C = client diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index d7ce4dce..0c6b6f0d 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -52,5 +52,6 @@ GLOBAL_LIST_EMPTY(typing_indicator_overlays) mouse_opacity = MOUSE_OPACITY_TRANSPARENT icon = 'icons/mob/talk.dmi' icon_state = "normal_typing" + appearance_flags = RESET_COLOR | TILE_BOUND | PIXEL_SCALE layer = ABOVE_FLY_LAYER diff --git a/hyperstation/code/modules/mob/living/status_indicators.dm b/hyperstation/code/modules/mob/living/status_indicators.dm new file mode 100644 index 00000000..b22337df --- /dev/null +++ b/hyperstation/code/modules/mob/living/status_indicators.dm @@ -0,0 +1,51 @@ +//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) diff --git a/hyperstation/icons/mob/status_indicators.dmi b/hyperstation/icons/mob/status_indicators.dmi new file mode 100644 index 00000000..23b55ae1 Binary files /dev/null and b/hyperstation/icons/mob/status_indicators.dmi differ diff --git a/tgstation.dme b/tgstation.dme index aee9875b..082aeadc 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3086,6 +3086,7 @@ #include "hyperstation\code\modules\economy\account.dm" #include "hyperstation\code\modules\integrated_electronics\input.dm" #include "hyperstation\code\modules\mob\mob_helpers.dm" +#include "hyperstation\code\modules\mob\living\status_indicators.dm" #include "hyperstation\code\modules\patreon\patreon.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\food_reagents.dm" #include "hyperstation\code\modules\reagents\chemistry\reagents\hydroponics_reactions.dm"