GLOBAL_LIST_EMPTY(status_displays)
// Status display
// (formerly Countdown timer display)
// Use to show shuttle ETA/ETD times
// Alert status
// And arbitrary messages set by comms computer
/obj/machinery/status_display
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
name = "status display"
anchored = TRUE
idle_power_consumption = 10
maptext_height = 26
maptext_y = -1
/// Status display mode
VAR_PRIVATE/mode = STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME
/// icon_state of alert picture
var/picture_state
/// Are we spooked?
var/spookymode = FALSE
/// Line 1 of a custom message, if any
var/message1
/// Line 2 of a custom message, if any
var/message2
/// Is this a supply display?
var/is_supply = FALSE
// Display indexes for scrolling messages, or 0 if non-scrolling
var/index1
var/index2
/obj/machinery/status_display/Initialize(mapload)
. = ..()
GLOB.status_displays |= src
update_icon(UPDATE_OVERLAYS)
/obj/machinery/status_display/Destroy()
GLOB.status_displays -= src
return ..()
/obj/machinery/status_display/update_overlays()
. = ..()
underlays.Cut()
if(stat & NOPOWER)
return
if(picture_state)
. += picture_state
underlays += emissive_appearance(icon, "lightmask")
/obj/machinery/status_display/power_change()
if(!..())
return
if(stat & NOPOWER)
set_light(0)
else
set_light(1, LIGHTING_MINIMUM_POWER)
update_icon(UPDATE_OVERLAYS)
// timed process
/obj/machinery/status_display/process()
if(stat & NOPOWER)
remove_display()
return
if(spookymode)
spookymode = FALSE
remove_display()
return
update()
/obj/machinery/status_display/emp_act(severity)
if(stat & (BROKEN|NOPOWER))
..(severity)
return
set_picture("ai_bsod")
..(severity)
/obj/machinery/status_display/flicker()
if(stat & (NOPOWER | BROKEN))
return FALSE
spookymode = TRUE
return TRUE
// set what is displayed
/obj/machinery/status_display/proc/update()
switch(mode)
// Blank
if(STATUS_DISPLAY_BLANK)
remove_display()
return
if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME)
var/use_warn = FALSE
if(SSshuttle.emergency && SSshuttle.emergency.timer)
use_warn = TRUE
message1 = "-[SSshuttle.emergency.getModeStr()]-"
message2 = SSshuttle.emergency.getTimerStr()
if(length(message2) > DISPLAY_CHARS_PER_LINE)
message2 = "Error!"
else
message1 = "TIME"
message2 = station_time_timestamp("hh:mm")
update_display(message1, message2, use_warn)
if(STATUS_DISPLAY_MESSAGE) //custom messages
var/line1
var/line2
if(!index1)
line1 = message1
else
line1 = copytext_char("[message1]|[message1]", index1, index1 + DISPLAY_CHARS_PER_LINE)
var/message1_len = length_char(message1)
index1 += DISPLAY_SCROLL_SPEED
if(index1 > message1_len)
index1 -= message1_len
if(!index2)
line2 = message2
else
line2 = copytext_char("[message2]|[message2]", index2, index2 + DISPLAY_CHARS_PER_LINE)
var/message2_len = length_char(message2)
index2 += DISPLAY_SCROLL_SPEED
if(index2 > message2_len)
index2 -= message2_len
update_display(line1, line2)
if(STATUS_DISPLAY_TIME)
message1 = "TIME"
message2 = station_time_timestamp("hh:mm")
update_display(message1, message2)
/obj/machinery/status_display/examine(mob/user)
. = ..()
if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT)
. += "The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]"
// Always call update() after using this
/obj/machinery/status_display/proc/set_mode(newmode)
mode = newmode
if(mode == STATUS_DISPLAY_ALERT)
// Its an alert image, clear all text
set_message(null, null)
else
// Not an alert image, clear any leftover image
set_picture(null)
/obj/machinery/status_display/proc/set_message(m1, m2)
if(m1)
index1 = (length_char(m1) > DISPLAY_CHARS_PER_LINE)
message1 = m1
else
message1 = ""
index1 = 0
if(m2)
index2 = (length_char(m2) > DISPLAY_CHARS_PER_LINE)
message2 = m2
else
message2 = ""
index2 = 0
/obj/machinery/status_display/proc/set_picture(state)
maptext = null
picture_state = state
update_icon(UPDATE_OVERLAYS)
/obj/machinery/status_display/proc/update_display(line1, line2, warning = 0)
line1 = uppertext(line1)
line2 = uppertext(line2)
var/new_text = {"