diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 2e7f360830c..630bae796e1 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -7,6 +7,11 @@ #define NEGATE_MUTATION_THRESHOLD 30 // Occupants with over ## percent radiation threshold will not gain mutations +#define PAGE_UI "ui" +#define PAGE_SE "se" +#define PAGE_BUFFER "buffer" +#define PAGE_REJUVENATORS "rejuvenators" + //list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), /datum/dna2/record var/datum/dna/dna = null @@ -335,7 +340,7 @@ var/injector_ready = FALSE //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete var/obj/machinery/dna_scannernew/connected = null var/obj/item/disk/data/disk = null - var/selected_menu_key = "ui" + var/selected_menu_key = PAGE_UI anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 10 @@ -410,7 +415,6 @@ if(!ui) ui = new(user, src, ui_key, "DNAModifier", name, 660, 700, master_ui, state) ui.open() - ui.set_autoupdate(TRUE) /obj/machinery/computer/scan_consolenew/tgui_data(mob/user) var/data[0] @@ -510,7 +514,7 @@ switch(action) if("selectMenuKey") var/key = params["key"] - if(!(key in list("ui", "se", "buffer", "rejuvenators"))) + if(!(key in list(PAGE_UI, PAGE_SE, PAGE_BUFFER, PAGE_REJUVENATORS))) return selected_menu_key = key if("toggleLock") @@ -780,14 +784,12 @@ * * copy_buffer - Whether the injector should copy the buffer contents */ /obj/machinery/computer/scan_consolenew/proc/create_injector(buffer_id, copy_buffer = FALSE) - set waitfor = FALSE if(buffer_id < 1 || buffer_id > length(buffers)) return // Cooldown injector_ready = FALSE - spawn(30 SECONDS) - injector_ready = TRUE + addtimer(CALLBACK(src, .proc/injector_cooldown_finish), 30 SECONDS) // Create it var/datum/dna2/record/buf = buffers[buffer_id] @@ -800,6 +802,12 @@ I.damage_coeff = connected.damage_coeff return I +/** + * Called when the injector creation cooldown finishes + */ +/obj/machinery/computer/scan_consolenew/proc/injector_cooldown_finish() + injector_ready = TRUE + /** * Called in tgui_act() to process modal actions * @@ -834,4 +842,10 @@ else return FALSE + +#undef PAGE_UI +#undef PAGE_SE +#undef PAGE_BUFFER +#undef PAGE_REJUVENATORS + /////////////////////////// DNA MACHINES diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 85c00ae6585..e9d1ca693e4 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -140,9 +140,8 @@ /obj/machinery/sleeper/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "Sleeper", "Sleeper", 550, 770) + ui = new(user, src, ui_key, "Sleeper", "Sleeper", 550, 775) ui.open() - ui.set_autoupdate(TRUE) /obj/machinery/sleeper/tgui_data(mob/user) var/data[0] diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index f87c48b326f..31d98826ac3 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -58,7 +58,6 @@ if(!ui) ui = new(user, src, ui_key, "OperatingComputer", "Patient Monitor", 650, 455, master_ui, state) ui.open() - ui.set_autoupdate(TRUE) /obj/machinery/computer/operating/tgui_data(mob/user) var/data[0] diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 089787c2e9f..db39c40501c 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -256,7 +256,7 @@ realname = sanitize(active_record.dna.real_name), unidentity = active_record.dna.uni_identity, strucenzymes = active_record.dna.struc_enzymes, - ); + ) tgui_modal_message(src, action, "", null, payload) else active_record = null diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index 5e2f5006c4a..7ad38e59993 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -4,8 +4,8 @@ #define MED_DATA_V_DATA 5 // Virus database #define MED_DATA_MEDBOT 6 // Medbot monitor -#define FIELD(N, V, Q, QC, E) list(field = N, value = V, question = Q, question_choices = QC, edit = E) -#define MED_FIELD(N, V, Q, QC, E, LB) list(field = N, value = V, question = Q, question_choices = QC, edit = E, line_break = LB) +#define FIELD(N, V, E) list(field = N, value = V, edit = E) +#define MED_FIELD(N, V, E, LB) list(field = N, value = V, edit = E, line_break = LB) /obj/machinery/computer/med_data //TODO:SANITY name = "medical records console" @@ -22,10 +22,43 @@ var/datum/data/record/active2 = null var/list/temp = null var/printing = null - var/list/questionmodal = null + // The below are used to make modal generation more convenient + var/static/list/field_edit_questions + var/static/list/field_edit_choices light_color = LIGHT_COLOR_DARKBLUE +/obj/machinery/computer/med_data/Initialize() + ..() + field_edit_questions = list( + // General + "sex" = "Please select new sex:", + "age" = "Please input new age:", + "fingerprint" = "Please input new fingerprint hash:", + "p_stat" = "Please select new physical status:", + "m_stat" = "Please select new mental status:", + // Medical + "blood_type" = "Please select new blood type:", + "b_dna" = "Please input new DNA:", + "mi_dis" = "Please input new minor disabilities:", + "mi_dis_d" = "Please summarize minor disabilities:", + "ma_dis" = "Please input new major disabilities:", + "ma_dis_d" = "Please summarize major disabilities:", + "alg" = "Please input new allergies:", + "alg_d" = "Please summarize allergies:", + "cdi" = "Please input new current diseases:", + "cdi_d" = "Please summarize current diseases:", + "notes" = "Please input new important notes:", + ) + field_edit_choices = list( + // General + "sex" = list("Male", "Female"), + "p_stat" = list("*Deceased*", "*SSD*", "Active", "Physically Unfit", "Disabled"), + "m_stat" = list("*Insane*", "*Unstable*", "*Watch*", "Stable"), + // Medical + "blood_type" = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"), + ) + /obj/machinery/computer/med_data/Destroy() active1 = null active2 = null @@ -52,9 +85,9 @@ /obj/machinery/computer/med_data/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "MedData", name, 800, 380, master_ui, state) + ui = new(user, src, ui_key, "MedicalRecords", "Medical Records", 800, 380, master_ui, state) ui.open() - ui.set_autoupdate(TRUE) + ui.set_autoupdate(FALSE) /obj/machinery/computer/med_data/tgui_data(mob/user) var/data[0] @@ -64,7 +97,6 @@ data["screen"] = screen data["printing"] = printing if(authenticated) - data["questionmodal"] = questionmodal switch(screen) if(MED_DATA_R_LIST) if(!isnull(GLOB.data_core.general)) @@ -78,26 +110,17 @@ if(istype(active1, /datum/data/record) && GLOB.data_core.general.Find(active1)) var/list/fields = list() general["fields"] = fields - fields[++fields.len] = FIELD("Name", active1.fields["name"], null, null, null) - fields[++fields.len] = FIELD("ID", active1.fields["id"], null, null, null) - fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "Please input new sex:", list("Male", "Female"), "sex") - fields[++fields.len] = FIELD("Age", active1.fields["age"], "Please input new age:", null, "age") - fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "Please input new fingerprint hash:", null, "fingerprint") - fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], "Please input new physical status:", list("*Deceased*", "*SSD*", "Active", "Physically Unfit", "Disabled"), "p_stat") - fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], "Please input new mental status:", list("*Insane*", "*Unstable*", "*Watch*", "Stable"), "m_stat") + fields[++fields.len] = FIELD("Name", active1.fields["name"], null) + fields[++fields.len] = FIELD("ID", active1.fields["id"], null) + fields[++fields.len] = FIELD("Sex", active1.fields["sex"], "sex") + fields[++fields.len] = FIELD("Age", active1.fields["age"], "age") + fields[++fields.len] = FIELD("Fingerprint", active1.fields["fingerprint"], "fingerprint") + fields[++fields.len] = FIELD("Physical Status", active1.fields["p_stat"], "p_stat") + fields[++fields.len] = FIELD("Mental Status", active1.fields["m_stat"], "m_stat") var/list/photos = list() general["photos"] = photos - // Disabled for now - ByondGui need improving - // var/icon/photoSouth = icon(active1.fields["photo-south-icon"]) - // var/icon/photoWest = icon(active1.fields["photo-west-icon"]) - // photoSouth.Scale(128, 128) - // photoWest.Scale(128, 128) - // photoSouth = fcopy_rsc(photoSouth) - // photoWest = fcopy_rsc(photoWest) - // user << browse_rsc(photoSouth); - // user << browse_rsc(photoWest); - // photos[++photos.len] = list("photo" = "\ref[photoSouth]") - // photos[++photos.len] = list("photo" = "\ref[photoWest]") + photos[++photos.len] = active1.fields["photo-south"] + photos[++photos.len] = active1.fields["photo-west"] general["has_photos"] = (active1.fields["photo-south"] || active1.fields["photo-west"] ? 1 : 0) general["empty"] = 0 else @@ -108,17 +131,17 @@ if(istype(active2, /datum/data/record) && GLOB.data_core.medical.Find(active2)) var/list/fields = list() medical["fields"] = fields - fields[++fields.len] = MED_FIELD("Blood Type", active2.fields["blood_type"], "Please input new blood type:", list("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-"), "blood_type", FALSE) - fields[++fields.len] = MED_FIELD("DNA", active2.fields["b_dna"], "Please input new blood type:", null, "b_dna", TRUE) - fields[++fields.len] = MED_FIELD("Minor Disabilities", active2.fields["mi_dis"], "Please input new minor disabilities:", null, "mi_dis", FALSE) - fields[++fields.len] = MED_FIELD("Details", active2.fields["mi_dis_d"], "Please summarize minor disabilities:", null, "mi_dis_d", TRUE) - fields[++fields.len] = MED_FIELD("Major Disabilities", active2.fields["ma_dis"], "Please input new major disabilities:", null, "ma_dis", FALSE) - fields[++fields.len] = MED_FIELD("Details", active2.fields["ma_dis_d"], "Please summarize major disabilities:", null, "ma_dis_d", TRUE) - fields[++fields.len] = MED_FIELD("Allergies", active2.fields["alg"], "Please input new allergies:", null, "alg", FALSE) - fields[++fields.len] = MED_FIELD("Details", active2.fields["alg_d"], "Please summarize allergies:", null, "alg_d", TRUE) - fields[++fields.len] = MED_FIELD("Current Diseases", active2.fields["cdi"], "Please input new current diseases:", null, "cdi", FALSE) - fields[++fields.len] = MED_FIELD("Details", active2.fields["cdi_d"], "Please summarize current diseases:", null, "cdi_d", TRUE) - fields[++fields.len] = MED_FIELD("Important Notes", active2.fields["notes"], "Please input new important notes:", null, "notes", FALSE) + fields[++fields.len] = MED_FIELD("Blood Type", active2.fields["blood_type"], "blood_type", FALSE) + fields[++fields.len] = MED_FIELD("DNA", active2.fields["b_dna"], "b_dna", TRUE) + fields[++fields.len] = MED_FIELD("Minor Disabilities", active2.fields["mi_dis"], "mi_dis", FALSE) + fields[++fields.len] = MED_FIELD("Details", active2.fields["mi_dis_d"], "mi_dis_d", TRUE) + fields[++fields.len] = MED_FIELD("Major Disabilities", active2.fields["ma_dis"], "ma_dis", FALSE) + fields[++fields.len] = MED_FIELD("Details", active2.fields["ma_dis_d"], "ma_dis_d", TRUE) + fields[++fields.len] = MED_FIELD("Allergies", active2.fields["alg"], "alg", FALSE) + fields[++fields.len] = MED_FIELD("Details", active2.fields["alg_d"], "alg_d", TRUE) + fields[++fields.len] = MED_FIELD("Current Diseases", active2.fields["cdi"], "cdi", FALSE) + fields[++fields.len] = MED_FIELD("Details", active2.fields["cdi_d"], "cdi_d", TRUE) + fields[++fields.len] = MED_FIELD("Important Notes", active2.fields["notes"], "notes", TRUE) if(!active2.fields["comments"] || !islist(active2.fields["comments"])) active2.fields["comments"] = list() medical["comments"] = active2.fields["comments"] @@ -155,6 +178,8 @@ else medbot["use_beaker"] = 0 data["medbots"] += list(medbot) + + data["modal"] = tgui_modal_data(src) return data /obj/machinery/computer/med_data/tgui_act(action, params) @@ -166,10 +191,13 @@ if(!GLOB.data_core.medical.Find(active2)) active2 = null + . = TRUE + if(tgui_act_modal(action, params)) + return + switch(action) if("cleartemp") temp = null - . = TRUE if("scan") if(scan) scan.forceMove(loc) @@ -182,7 +210,6 @@ usr.drop_item() I.forceMove(src) scan = I - . = TRUE if("login") if(isAI(usr)) authenticated = usr.name @@ -195,17 +222,18 @@ if(check_access(scan)) authenticated = scan.registered_name rank = scan.assignment - if(authenticated) active1 = null active2 = null screen = MED_DATA_R_LIST - . = TRUE + else + . = FALSE if(.) return if(authenticated) + . = TRUE switch(action) if("logout") if(scan) @@ -217,40 +245,35 @@ screen = null active1 = null active2 = null - . = TRUE if("screen") - screen = clamp(text2num(params["screen"]) || MED_DATA_R_LIST, MED_DATA_R_LIST, MED_DATA_MEDBOT) + screen = clamp(text2num(params["screen"]) || 0, MED_DATA_R_LIST, MED_DATA_MEDBOT) active1 = null active2 = null - . = TRUE if("vir") - . = TRUE var/type = text2path(params["vir"] || "") if(!ispath(type, /datum/disease)) return var/datum/disease/D = new type(0) - set_temp(list( + var/list/payload = list( name = D.name, max_stages = D.max_stages, spread_text = D.spread_text, cure = D.cure_text || "None", desc = D.desc, severity = D.severity - ), "virus") + ); + tgui_modal_message(src, "virus", "", null, payload) qdel(D) if("del_all") - . = TRUE for(var/datum/data/record/R in GLOB.data_core.medical) qdel(R) set_temp("All medical records deleted.") if("del_r") - . = TRUE if(active2) set_temp("Medical record deleted.") qdel(active2) if("d_rec") - . = TRUE var/datum/data/record/general_record = locate(params["d_rec"] || "") if(!GLOB.data_core.general.Find(general_record)) set_temp("Record not found.", "danger") @@ -285,7 +308,6 @@ GLOB.data_core.medical += R active2 = R screen = MED_DATA_RECORD - . = TRUE set_temp("Medical record created.", "success") if("del_c") var/index = text2num(params["del_c"] || "") @@ -296,9 +318,7 @@ index = clamp(index, 1, length(comments)) if(comments[index]) comments.Cut(index, index + 1) - . = TRUE if("search") - . = TRUE active1 = null active2 = null var/t1 = lowertext(params["t1"] || "") @@ -322,99 +342,111 @@ printing = TRUE playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) SStgui.update_uis(src) - sleep(5 SECONDS) - var/obj/item/paper/P = new /obj/item/paper(loc) - P.info = "