mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
* Creating new objects is cheap, in fact comparable to the cost of getting it out of the pool, so it doesn't help there. * Placing items in the pool is far more expensive than letting them garbage collect due to the resetting of vars and such.
118 lines
2.8 KiB
Plaintext
118 lines
2.8 KiB
Plaintext
#define FULLSCREEN_LAYER 18
|
|
#define DAMAGE_LAYER FULLSCREEN_LAYER + 0.1
|
|
#define BLIND_LAYER DAMAGE_LAYER + 0.1
|
|
#define CRIT_LAYER BLIND_LAYER + 0.1
|
|
|
|
/mob
|
|
var/list/screens = list()
|
|
|
|
/mob/proc/set_fullscreen(condition, screen_name, screen_type, arg)
|
|
condition ? overlay_fullscreen(screen_name, screen_type, arg) : clear_fullscreen(screen_name)
|
|
|
|
/mob/proc/overlay_fullscreen(category, type, severity)
|
|
var/obj/screen/fullscreen/screen = screens[category]
|
|
|
|
if(screen)
|
|
if(screen.type != type)
|
|
clear_fullscreen(category, FALSE)
|
|
screen = null
|
|
else if(!severity || severity == screen.severity)
|
|
return null
|
|
|
|
if(!screen)
|
|
screen = new type()
|
|
|
|
screen.icon_state = "[initial(screen.icon_state)][severity]"
|
|
screen.severity = severity
|
|
|
|
screens[category] = screen
|
|
if(client && stat != DEAD)
|
|
client.screen += screen
|
|
return screen
|
|
|
|
/mob/proc/clear_fullscreen(category, animated = 10)
|
|
var/obj/screen/fullscreen/screen = screens[category]
|
|
if(!screen)
|
|
return
|
|
|
|
screens -= category
|
|
|
|
if(animated)
|
|
spawn(0)
|
|
animate(screen, alpha = 0, time = animated)
|
|
sleep(animated)
|
|
if(client)
|
|
client.screen -= screen
|
|
qdel(screen)
|
|
else
|
|
if(client)
|
|
client.screen -= screen
|
|
qdel(screen)
|
|
|
|
/mob/proc/clear_fullscreens()
|
|
for(var/category in screens)
|
|
clear_fullscreen(category)
|
|
|
|
/mob/proc/hide_fullscreens()
|
|
if(client)
|
|
for(var/category in screens)
|
|
client.screen -= screens[category]
|
|
|
|
/mob/proc/reload_fullscreen()
|
|
if(client && stat != DEAD) //dead mob do not see any of the fullscreen overlays that he has.
|
|
for(var/category in screens)
|
|
client.screen |= screens[category]
|
|
|
|
/obj/screen/fullscreen
|
|
icon = 'icons/mob/screen_full.dmi'
|
|
icon_state = "default"
|
|
screen_loc = "CENTER-7,CENTER-7"
|
|
layer = FULLSCREEN_LAYER
|
|
mouse_opacity = 0
|
|
var/severity = 0
|
|
|
|
/obj/screen/fullscreen/Destroy()
|
|
severity = 0
|
|
return ..()
|
|
|
|
/obj/screen/fullscreen/brute
|
|
icon_state = "brutedamageoverlay"
|
|
layer = DAMAGE_LAYER
|
|
|
|
/obj/screen/fullscreen/oxy
|
|
icon_state = "oxydamageoverlay"
|
|
layer = DAMAGE_LAYER
|
|
|
|
/obj/screen/fullscreen/crit
|
|
icon_state = "passage"
|
|
layer = CRIT_LAYER
|
|
|
|
/obj/screen/fullscreen/blind
|
|
icon_state = "blackimageoverlay"
|
|
layer = BLIND_LAYER
|
|
|
|
/obj/screen/fullscreen/impaired
|
|
icon_state = "impairedoverlay"
|
|
|
|
/obj/screen/fullscreen/blurry
|
|
icon = 'icons/mob/screen1.dmi'
|
|
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
|
icon_state = "blurry"
|
|
|
|
/obj/screen/fullscreen/flash
|
|
icon = 'icons/mob/screen1.dmi'
|
|
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
|
icon_state = "flash"
|
|
|
|
/obj/screen/fullscreen/flash/noise
|
|
icon_state = "noise"
|
|
|
|
/obj/screen/fullscreen/high
|
|
icon = 'icons/mob/screen1.dmi'
|
|
screen_loc = "WEST,SOUTH to EAST,NORTH"
|
|
icon_state = "druggy"
|
|
|
|
#undef FULLSCREEN_LAYER
|
|
#undef BLIND_LAYER
|
|
#undef DAMAGE_LAYER
|
|
#undef CRIT_LAYER |