diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 3ef80aa27b..3de2943265 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -39,10 +39,8 @@ if(!sleeper) findsleeper() - if(sleeper) - return sleeper.ui_interact(user) - else if(sleeper) - return sleeper.ui_interact(user) + if(sleeper) + return ui_interact(user) else to_chat(user, "Sleeper not found!") @@ -59,6 +57,94 @@ else icon_state = initial(icon_state) +/obj/machinery/sleep_console/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state) + var/data[0] + + var/obj/machinery/sleeper/S = sleeper + var/mob/living/carbon/human/occupant = sleeper.occupant + + data["power"] = S.stat & (NOPOWER|BROKEN) ? 0 : 1 + + var/list/reagents = list() + for(var/T in S.available_chemicals) + var/list/reagent = list() + reagent["id"] = T + reagent["name"] = S.available_chemicals[T] + if(occupant) + reagent["amount"] = occupant.reagents.get_reagent_amount(T) + reagents += list(reagent) + data["reagents"] = reagents.Copy() + + if(occupant) + data["occupant"] = 1 + switch(occupant.stat) + if(CONSCIOUS) + data["stat"] = "Conscious" + if(UNCONSCIOUS) + data["stat"] = "Unconscious" + if(DEAD) + data["stat"] = "Dead" + data["health"] = occupant.health + data["maxHealth"] = occupant.getMaxHealth() + if(iscarbon(occupant)) + var/mob/living/carbon/C = occupant + data["pulse"] = C.get_pulse(GETPULSE_TOOL) + data["brute"] = occupant.getBruteLoss() + data["burn"] = occupant.getFireLoss() + data["oxy"] = occupant.getOxyLoss() + data["tox"] = occupant.getToxLoss() + else + data["occupant"] = 0 + if(S.beaker) + data["beaker"] = S.beaker.reagents.get_free_space() + else + data["beaker"] = -1 + data["filtering"] = S.filtering + + var/stasis_level_name = "Error!" + for(var/N in S.stasis_choices) + if(S.stasis_choices[N] == S.stasis_level) + stasis_level_name = N + break + data["stasis"] = stasis_level_name + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + +/obj/machinery/sleep_console/Topic(href, href_list) + if(..()) + return 1 + + var/obj/machinery/sleeper/S = sleeper + + if(usr == S.occupant) + to_chat(usr, "You can't reach the controls from the inside.") + return + + add_fingerprint(usr) + + if(href_list["eject"]) + S.go_out() + if(href_list["beaker"]) + S.remove_beaker() + if(href_list["sleeper_filter"]) + if(S.filtering != text2num(href_list["sleeper_filter"])) + S.toggle_filter() + if(href_list["chemical"] && href_list["amount"]) + if(S.occupant && S.occupant.stat != DEAD) + if(href_list["chemical"] in S.available_chemicals) // Your hacks are bad and you should feel bad + S.inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"])) + if(href_list["change_stasis"]) + var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in S.stasis_choices + if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE) + S.stasis_level = S.stasis_choices[new_stasis] + + return 1 + /obj/machinery/sleeper name = "sleeper" desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner." @@ -121,89 +207,6 @@ /obj/machinery/sleeper/update_icon() icon_state = "sleeper_[occupant ? "1" : "0"]" -/obj/machinery/sleeper/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state) - var/data[0] - - data["power"] = stat & (NOPOWER|BROKEN) ? 0 : 1 - - var/list/reagents = list() - for(var/T in available_chemicals) - var/list/reagent = list() - reagent["id"] = T - reagent["name"] = available_chemicals[T] - if(occupant) - reagent["amount"] = occupant.reagents.get_reagent_amount(T) - reagents += list(reagent) - data["reagents"] = reagents.Copy() - - if(occupant) - data["occupant"] = 1 - switch(occupant.stat) - if(CONSCIOUS) - data["stat"] = "Conscious" - if(UNCONSCIOUS) - data["stat"] = "Unconscious" - if(DEAD) - data["stat"] = "Dead" - data["health"] = occupant.health - data["maxHealth"] = occupant.getMaxHealth() - if(iscarbon(occupant)) - var/mob/living/carbon/C = occupant - data["pulse"] = C.get_pulse(GETPULSE_TOOL) - data["brute"] = occupant.getBruteLoss() - data["burn"] = occupant.getFireLoss() - data["oxy"] = occupant.getOxyLoss() - data["tox"] = occupant.getToxLoss() - else - data["occupant"] = 0 - if(beaker) - data["beaker"] = beaker.reagents.get_free_space() - else - data["beaker"] = -1 - data["filtering"] = filtering - - var/stasis_level_name = "Error!" - for(var/N in stasis_choices) - if(stasis_choices[N] == stasis_level) - stasis_level_name = N - break - data["stasis"] = stasis_level_name - - ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state) - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) - -/obj/machinery/sleeper/Topic(href, href_list) - if(..()) - return 1 - - if(usr == occupant) - to_chat(usr, "You can't reach the controls from the inside.") - return - - add_fingerprint(usr) - - if(href_list["eject"]) - go_out() - if(href_list["beaker"]) - remove_beaker() - if(href_list["sleeper_filter"]) - if(filtering != text2num(href_list["sleeper_filter"])) - toggle_filter() - if(href_list["chemical"] && href_list["amount"]) - if(occupant && occupant.stat != DEAD) - if(href_list["chemical"] in available_chemicals) // Your hacks are bad and you should feel bad - inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"])) - if(href_list["change_stasis"]) - var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in stasis_choices - if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE) - stasis_level = stasis_choices[new_stasis] - - return 1 - /obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user) add_fingerprint(user) if(istype(I, /obj/item/weapon/grab))