mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Signed-off-by: Mloc-Hibernia <colmohici@gmail.com> Conflicts: code/game/machinery/computer/crew.dm
138 lines
4.0 KiB
Plaintext
138 lines
4.0 KiB
Plaintext
/obj/machinery/computer/crew
|
|
name = "Crew monitoring computer"
|
|
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
|
|
icon_state = "crew"
|
|
use_power = 1
|
|
idle_power_usage = 250
|
|
active_power_usage = 500
|
|
circuit = "/obj/item/weapon/circuitboard/crew"
|
|
var/list/tracked = list( )
|
|
|
|
|
|
/obj/machinery/computer/crew/New()
|
|
tracked = list()
|
|
..()
|
|
|
|
|
|
/obj/machinery/computer/crew/attack_ai(mob/user)
|
|
attack_hand(user)
|
|
ui_interact(user)
|
|
|
|
|
|
/obj/machinery/computer/crew/attack_hand(mob/user)
|
|
add_fingerprint(user)
|
|
if(stat & (BROKEN|NOPOWER))
|
|
return
|
|
ui_interact(user)
|
|
|
|
|
|
/obj/machinery/computer/crew/update_icon()
|
|
|
|
if(stat & BROKEN)
|
|
icon_state = "crewb"
|
|
else
|
|
if(stat & NOPOWER)
|
|
src.icon_state = "c_unpowered"
|
|
stat |= NOPOWER
|
|
else
|
|
icon_state = initial(icon_state)
|
|
stat &= ~NOPOWER
|
|
|
|
|
|
/obj/machinery/computer/crew/Topic(href, href_list)
|
|
if(..()) return
|
|
if (src.z > 6)
|
|
usr << "\red <b>Unable to establish a connection</b>: \black You're too far away from the station!"
|
|
return 0
|
|
if( href_list["close"] )
|
|
var/mob/user = usr
|
|
var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main")
|
|
usr.unset_machine()
|
|
ui.close()
|
|
return 0
|
|
if(href_list["update"])
|
|
src.updateDialog()
|
|
return 1
|
|
|
|
/obj/machinery/computer/crew/interact(mob/user)
|
|
ui_interact(user)
|
|
|
|
/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
|
if(stat & (BROKEN|NOPOWER))
|
|
return
|
|
user.set_machine(src)
|
|
src.scan()
|
|
|
|
var/data[0]
|
|
var/list/crewmembers = list()
|
|
|
|
for(var/obj/item/clothing/under/C in src.tracked)
|
|
|
|
|
|
var/turf/pos = get_turf(C)
|
|
|
|
if((C) && (C.has_sensor) && (pos) && (pos.z == src.z) && C.sensor_mode)
|
|
if(istype(C.loc, /mob/living/carbon/human))
|
|
|
|
var/mob/living/carbon/human/H = C.loc
|
|
|
|
var/list/crewmemberData = list()
|
|
|
|
crewmemberData["sensor_type"] = C.sensor_mode
|
|
crewmemberData["dead"] = H.stat > 1
|
|
crewmemberData["oxy"] = round(H.getOxyLoss(), 1)
|
|
crewmemberData["tox"] = round(H.getToxLoss(), 1)
|
|
crewmemberData["fire"] = round(H.getFireLoss(), 1)
|
|
crewmemberData["brute"] = round(H.getBruteLoss(), 1)
|
|
|
|
crewmemberData["name"] = "Unknown"
|
|
crewmemberData["rank"] = "Unknown"
|
|
if(H.wear_id && istype(H.wear_id, /obj/item/weapon/card/id) )
|
|
var/obj/item/weapon/card/id/I = H.wear_id
|
|
crewmemberData["name"] = I.name
|
|
crewmemberData["rank"] = I.rank
|
|
else if(H.wear_id && istype(H.wear_id, /obj/item/device/pda) )
|
|
var/obj/item/device/pda/P = H.wear_id
|
|
crewmemberData["name"] = (P.id ? P.id.name : "Unknown")
|
|
crewmemberData["rank"] = (P.id ? P.id.rank : "Unknown")
|
|
|
|
var/area/A = get_area(H)
|
|
crewmemberData["area"] = sanitize(A.name)
|
|
crewmemberData["x"] = pos.x
|
|
crewmemberData["y"] = pos.y
|
|
|
|
// Works around list += list2 merging lists; it's not pretty but it works
|
|
crewmembers += "temporary item"
|
|
crewmembers[crewmembers.len] = crewmemberData
|
|
|
|
crewmembers = sortByKey(crewmembers, "name")
|
|
|
|
data["crewmembers"] = crewmembers
|
|
|
|
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800)
|
|
|
|
// adding a template with the key "mapContent" enables the map ui functionality
|
|
ui.add_template("mapContent", "crew_monitor_map_content.tmpl")
|
|
// adding a template with the key "mapHeader" replaces the map header content
|
|
ui.add_template("mapHeader", "crew_monitor_map_header.tmpl")
|
|
|
|
// we want to show the map by default
|
|
ui.set_show_map(1)
|
|
|
|
ui.set_initial_data(data)
|
|
ui.open()
|
|
|
|
// should make the UI auto-update; doesn't seem to?
|
|
ui.set_auto_update(1)
|
|
|
|
|
|
/obj/machinery/computer/crew/proc/scan()
|
|
for(var/mob/living/carbon/human/H in mob_list)
|
|
if(istype(H.w_uniform, /obj/item/clothing/under))
|
|
var/obj/item/clothing/under/C = H.w_uniform
|
|
if (C.has_sensor)
|
|
tracked |= C
|
|
return 1
|