diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index ca2f6e1cb6..af11be2e5b 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -1,74 +1,72 @@ -/obj/machinery/computer/operating - name = "operating computer" - desc = "Used to monitor the vitals of a patient during surgery." - icon_screen = "crew" - icon_keyboard = "med_key" - circuit = /obj/item/circuitboard/computer/operating - var/mob/living/carbon/human/patient - var/obj/structure/table/optable/table - - light_color = LIGHT_COLOR_BLUE - -/obj/machinery/computer/operating/Initialize() - . = ..() - find_table() - -/obj/machinery/computer/operating/proc/find_table() - for(var/dir in GLOB.cardinals) - table = locate(/obj/structure/table/optable, get_step(src, dir)) - if(table) - table.computer = src - break - - -/obj/machinery/computer/operating/attack_hand(mob/user) - if(..()) - return - interact(user) - -/obj/machinery/computer/operating/interact(mob/user) - var/dat = "" - if(table) - dat += "Patient information:
" - if(table.check_patient()) - patient = table.patient - dat += get_patient_info() - else - patient = null - dat += "No patient detected" - else - dat += "Operating table not found." - - var/datum/browser/popup = new(user, "op", "Operating Computer", 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/computer/operating/proc/get_patient_info() - var/dat = {" -
Patient:
[patient.stat ? "Non-Responsive" : "Stable"]
-
Blood Type:
[patient.dna.blood_type] - -
-
Health:
[patient.health]%
-
\> Brute Damage:
[patient.getBruteLoss()]%
-
\> Resp. Damage:
[patient.getOxyLoss()]%
-
\> Toxin Content:
[patient.getToxLoss()]%
-
\> Burn Severity:
[patient.getFireLoss()]%
- - "} - if(patient.surgeries.len) - dat += "

Initiated Procedures
" - for(var/datum/surgery/procedure in patient.surgeries) - dat += "[capitalize(procedure.name)]
" - var/datum/surgery_step/surgery_step = procedure.get_surgery_step() - dat += "Next step: [capitalize(surgery_step.name)]" - if(surgery_step.repeatable) - dat += " or " - var/datum/surgery_step/next_step = procedure.get_surgery_next_step() - if(next_step) - dat += "[capitalize(next_step.name)]" - else - dat += "finish operation" - dat += "
" - dat += "
" - return dat +/obj/machinery/computer/operating + name = "operating computer" + desc = "Used to monitor the vitals of a patient during surgery." + icon_screen = "crew" + icon_keyboard = "med_key" + circuit = /obj/item/circuitboard/computer/operating + var/mob/living/carbon/human/patient + var/obj/structure/table/optable/table + light_color = LIGHT_COLOR_BLUE + +/obj/machinery/computer/operating/Initialize() + . = ..() + find_table() + +/obj/machinery/computer/operating/proc/find_table() + for(var/dir in GLOB.cardinals) + table = locate(/obj/structure/table/optable, get_step(src, dir)) + if(table) + table.computer = src + break + +/obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "operating_computer", name, 350, 470, master_ui, state) + ui.open() + +/obj/machinery/computer/operating/ui_data(mob/user) + var/list/data = list() + data["table"] = table + if(table) + data["patient"] = list() + if(table.check_patient()) + patient = table.patient + switch(patient.stat) + if(CONSCIOUS) + data["patient"]["stat"] = "Conscious" + data["patient"]["statstate"] = "good" + if(SOFT_CRIT) + data["patient"]["stat"] = "Conscious" + data["patient"]["statstate"] = "average" + if(UNCONSCIOUS) + data["patient"]["stat"] = "Unconscious" + data["patient"]["statstate"] = "average" + if(DEAD) + data["patient"]["stat"] = "Dead" + data["patient"]["statstate"] = "bad" + data["patient"]["health"] = patient.health + data["patient"]["blood_type"] = patient.dna.blood_type + data["patient"]["maxHealth"] = patient.maxHealth + data["patient"]["minHealth"] = HEALTH_THRESHOLD_DEAD + data["patient"]["bruteLoss"] = patient.getBruteLoss() + data["patient"]["fireLoss"] = patient.getFireLoss() + data["patient"]["toxLoss"] = patient.getToxLoss() + data["patient"]["oxyLoss"] = patient.getOxyLoss() + if(patient.surgeries.len) + data["procedures"] = list() + for(var/datum/surgery/procedure in patient.surgeries) + var/datum/surgery_step/surgery_step = procedure.get_surgery_step() + var/alternative_step + if(surgery_step.repeatable) + var/datum/surgery_step/next_step = procedure.get_surgery_next_step() + if(next_step) + alternative_step = capitalize(next_step.name) + else + alternative_step = "Finish operation" + data["procedures"] += list(list( + "name" = capitalize(procedure.name), + "next_step" = capitalize(surgery_step.name), + "alternative_step" = alternative_step + )) + return data diff --git a/tgui/src/interfaces/operating_computer.ract b/tgui/src/interfaces/operating_computer.ract new file mode 100644 index 0000000000..f445427ba8 --- /dev/null +++ b/tgui/src/interfaces/operating_computer.ract @@ -0,0 +1,46 @@ +{{#unless data.table}} + + No table detected! + +{{/unless}} + + + {{#if data.patient}} + + {{data.patient.stat}} + + + {{data.patient.blood_type}} + + + {{Math.round(adata.patient.health)}} + + {{#each [{label: "Brute", type: "bruteLoss"}, {label: "Burn", type: "fireLoss"}, {label: "Toxin", type: "toxLoss"}, {label: "Respiratory", type: "oxyLoss"}]}} + + {{Math.round(adata.patient[type])}} + + {{/each}} + {{else}} + No patient detected. + {{/if}} + + + {{#if data.procedures}} + {{#each data.procedures}} + + + {{next_step}} + + {{#if alternative_step}} + + {{alternative_step}} + + {{/if}} + + {{/each}} + {{else}} + No active procedures. + {{/if}} + +