TGUI Virology machines

This commit is contained in:
ShadowLarkens
2020-08-11 05:24:49 -07:00
parent fa3da7fd2a
commit ee1bbbd904
16 changed files with 948 additions and 774 deletions
+57 -66
View File
@@ -26,7 +26,7 @@
O.loc = src
user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
src.attack_hand(user)
@@ -36,27 +36,32 @@
icon_state = "centrifuge_moving"
/obj/machinery/computer/centrifuge/attack_hand(var/mob/user as mob)
if(..()) return
ui_interact(user)
if(..())
return
tgui_interact(user)
/obj/machinery/computer/centrifuge/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
/obj/machinery/computer/centrifuge/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "IsolationCentrifuge", name)
ui.open()
var/data[0]
/obj/machinery/computer/centrifuge/tgui_data(mob/user)
var/list/data = list()
data["antibodies"] = null
data["pathogens"] = null
data["pathogens"] = list()
data["is_antibody_sample"] = null
data["busy"] = null
data["sample_inserted"] = !!sample
if (curing)
if(curing)
data["busy"] = "Isolating antibodies..."
else if (isolating)
else if(isolating)
data["busy"] = "Isolating pathogens..."
else
data["sample_inserted"] = !!sample
if (sample)
if(sample)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (B)
if(B)
data["antibodies"] = antigens2string(B.data["antibodies"], none=null)
var/list/pathogens[0]
@@ -65,8 +70,7 @@
var/datum/disease2/disease/V = virus[ID]
pathogens.Add(list(list("name" = V.name(), "spread_type" = V.spreadtype, "reference" = "\ref[V]")))
if (pathogens.len > 0)
data["pathogens"] = pathogens
data["pathogens"] = pathogens
else
var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list
@@ -74,103 +78,90 @@
data["antibodies"] = antigens2string(A.data["antibodies"], none=null)
data["is_antibody_sample"] = 1
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "isolation_centrifuge.tmpl", src.name, 400, 500)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/computer/centrifuge/process()
..()
if (stat & (NOPOWER|BROKEN)) return
if(stat & (NOPOWER|BROKEN)) return
if (curing)
if(curing)
curing -= 1
if (curing == 0)
if(curing == 0)
cure()
if (isolating)
if(isolating)
isolating -= 1
if(isolating == 0)
isolate()
/obj/machinery/computer/centrifuge/Topic(href, href_list)
if (..()) return 1
/obj/machinery/computer/centrifuge/tgui_act(action, params)
if(..())
return TRUE
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
add_fingerprint(user)
src.add_fingerprint(user)
if (href_list["close"])
user.unset_machine()
ui.close()
return 0
if (href_list["print"])
print(user)
return 1
if(href_list["isolate"])
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (B)
var/datum/disease2/disease/virus = locate(href_list["isolate"])
virus2 = virus.getcopy()
isolating = 40
update_icon()
return 1
switch(href_list["action"])
if ("antibody")
switch(action)
if("print")
print(user)
. = TRUE
if("isolate")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if(B)
var/datum/disease2/disease/virus = locate(params["isolate"])
virus2 = virus.getcopy()
isolating = 40
update_icon()
. = TRUE
if("antibody")
var/delay = 20
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (!B)
if(!B)
state("\The [src] buzzes, \"No antibody carrier detected.\"", "blue")
return 1
return TRUE
var/has_toxins = locate(/datum/reagent/toxin) in sample.reagents.reagent_list
var/has_radium = sample.reagents.has_reagent("radium")
if (has_toxins || has_radium)
if(has_toxins || has_radium)
state("\The [src] beeps, \"Pathogen purging speed above nominal.\"", "blue")
if (has_toxins)
if(has_toxins)
delay = delay/2
if (has_radium)
if(has_radium)
delay = delay/2
curing = round(delay)
playsound(src, 'sound/machines/juicer.ogg', 50, 1)
update_icon()
return 1
. = TRUE
if("sample")
if(sample)
sample.loc = src.loc
sample = null
return 1
. = TRUE
return 0
/obj/machinery/computer/centrifuge/proc/cure()
if (!sample) return
if(!sample) return
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (!B) return
if(!B) return
var/list/data = list("antibodies" = B.data["antibodies"])
var/amt= sample.reagents.get_reagent_amount("blood")
sample.reagents.remove_reagent("blood", amt)
sample.reagents.add_reagent("antibodies", amt, data)
SSnanoui.update_uis(src)
SStgui.update_uis(src)
update_icon()
ping("\The [src] pings, \"Antibody isolated.\"")
/obj/machinery/computer/centrifuge/proc/isolate()
if (!sample) return
if(!sample) return
var/obj/item/weapon/virusdish/dish = new/obj/item/weapon/virusdish(loc)
dish.virus2 = virus2
virus2 = null
SSnanoui.update_uis(src)
SStgui.update_uis(src)
update_icon()
ping("\The [src] pings, \"Pathogen isolated.\"")
@@ -182,20 +173,20 @@
<large><u>Sample:</u></large> [sample.name]<br>
"}
if (user)
if(user)
P.info += "<u>Generated By:</u> [user.name]<br>"
P.info += "<hr>"
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in sample.reagents.reagent_list
if (B)
if(B)
P.info += "<u>Antibodies:</u> "
P.info += antigens2string(B.data["antibodies"])
P.info += "<br>"
var/list/virus = B.data["virus2"]
P.info += "<u>Pathogens:</u> <br>"
if (virus.len > 0)
if(virus.len > 0)
for (var/ID in virus)
var/datum/disease2/disease/V = virus[ID]
P.info += "[V.name()]<br>"
@@ -204,7 +195,7 @@
else
var/datum/reagent/antibodies/A = locate(/datum/reagent/antibodies) in sample.reagents.reagent_list
if (A)
if(A)
P.info += "The following antibodies have been isolated from the blood sample: "
P.info += antigens2string(A.data["antibodies"])
P.info += "<br>"
+2
View File
@@ -254,6 +254,7 @@ var/global/list/virusDB = list()
"resistance" = resistance,
"species" = jointext(affected_species, ", "),
"symptoms" = list(),
"ref" = "\ref[src]",
)
for(var/datum/disease2/effectholder/E in effects)
@@ -272,6 +273,7 @@ var/global/list/virusDB = list()
v.fields["name"] = name()
v.fields["description"] = get_info()
v.fields["tgui_description"] = get_tgui_info()
v.fields["tgui_description"]["record"] = "\ref[v]"
v.fields["antigen"] = antigens2string(antigen)
v.fields["spread type"] = spreadtype
virusDB["[uniqueID]"] = v
+86 -86
View File
@@ -20,7 +20,7 @@
if(istype(I,/obj/item/weapon/virusdish))
var/mob/living/carbon/c = user
if (dish)
if(dish)
to_chat(user, "\The [src] is already loaded.")
return
@@ -40,36 +40,46 @@
return src.attack_hand(user)
/obj/machinery/computer/diseasesplicer/attack_hand(var/mob/user as mob)
if(..()) return
ui_interact(user)
if(..())
return TRUE
tgui_interact(user)
/obj/machinery/computer/diseasesplicer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
/obj/machinery/computer/diseasesplicer/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "DiseaseSplicer", name)
ui.open()
var/data[0]
/obj/machinery/computer/diseasesplicer/tgui_data(mob/user)
var/list/data = list()
data["dish_inserted"] = !!dish
data["growth"] = 0
data["affected_species"] = null
if (memorybank)
data["buffer"] = null
if(memorybank)
data["buffer"] = list("name" = (analysed ? memorybank.effect.name : "Unknown Symptom"), "stage" = memorybank.effect.stage)
if (species_buffer)
data["species_buffer"] = null
if(species_buffer)
data["species_buffer"] = analysed ? jointext(species_buffer, ", ") : "Unknown Species"
if (splicing)
data["effects"] = null
data["info"] = null
data["growth"] = 0
data["affected_species"] = null
data["busy"] = null
if(splicing)
data["busy"] = "Splicing..."
else if (scanning)
else if(scanning)
data["busy"] = "Scanning..."
else if (burning)
else if(burning)
data["busy"] = "Copying data to disk..."
else if (dish)
else if(dish)
data["growth"] = min(dish.growth, 100)
if (dish.virus2)
if (dish.virus2.affected_species)
data["affected_species"] = dish.analysed ? jointext(dish.virus2.affected_species, ", ") : "Unknown"
if(dish.virus2)
if(dish.virus2.affected_species)
data["affected_species"] = dish.analysed ? dish.virus2.affected_species : list()
if (dish.growth >= 50)
if(dish.growth >= 50)
var/list/effects[0]
for (var/datum/disease2/effectholder/e in dish.virus2.effects)
effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]")))
@@ -81,11 +91,7 @@
else
data["info"] = "No dish loaded."
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "disease_splicer.tmpl", src.name, 400, 600)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/computer/diseasesplicer/process()
if(stat & (NOPOWER|BROKEN))
@@ -95,100 +101,94 @@
scanning -= 1
if(!scanning)
ping("\The [src] pings, \"Analysis complete.\"")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(splicing)
splicing -= 1
if(!splicing)
ping("\The [src] pings, \"Splicing operation complete.\"")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(burning)
burning -= 1
if(!burning)
var/obj/item/weapon/diseasedisk/d = new /obj/item/weapon/diseasedisk(src.loc)
d.analysed = analysed
if(analysed)
if (memorybank)
if(memorybank)
d.name = "[memorybank.effect.name] GNA disk (Stage: [memorybank.effect.stage])"
d.effect = memorybank
else if (species_buffer)
else if(species_buffer)
d.name = "[jointext(species_buffer, ", ")] GNA disk"
d.species = species_buffer
else
if (memorybank)
if(memorybank)
d.name = "Unknown GNA disk (Stage: [memorybank.effect.stage])"
d.effect = memorybank
else if (species_buffer)
else if(species_buffer)
d.name = "Unknown Species GNA disk"
d.species = species_buffer
ping("\The [src] pings, \"Backup disk saved.\"")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
/obj/machinery/computer/diseasesplicer/Topic(href, href_list)
if(..()) return 1
/obj/machinery/computer/diseasesplicer/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
add_fingerprint(user)
src.add_fingerprint(user)
switch(action)
if("grab")
if(dish)
memorybank = locate(params["grab"])
species_buffer = null
analysed = dish.analysed
dish = null
scanning = 10
. = TRUE
if (href_list["close"])
user.unset_machine()
ui.close()
return 0
if("affected_species")
if(dish)
memorybank = null
species_buffer = dish.virus2.affected_species
analysed = dish.analysed
dish = null
scanning = 10
. = TRUE
if (href_list["grab"])
if (dish)
memorybank = locate(href_list["grab"])
species_buffer = null
analysed = dish.analysed
dish = null
scanning = 10
return 1
if("eject")
if(dish)
dish.loc = src.loc
dish = null
. = TRUE
if (href_list["affected_species"])
if (dish)
memorybank = null
species_buffer = dish.virus2.affected_species
analysed = dish.analysed
dish = null
scanning = 10
return 1
if("splice")
if(dish)
var/target = text2num(params["splice"]) // target = 1 to 4 for effects, 5 for species
if(memorybank && 0 < target && target <= 4)
if(target < memorybank.effect.stage) return // too powerful, catching this for href exploit prevention
if(href_list["eject"])
if (dish)
dish.loc = src.loc
dish = null
return 1
var/datum/disease2/effectholder/target_holder
var/list/illegal_types = list()
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
if(e.stage == target)
target_holder = e
else
illegal_types += e.effect.type
if(memorybank.effect.type in illegal_types) return
target_holder.effect = memorybank.effect
if(href_list["splice"])
if(dish)
var/target = text2num(href_list["splice"]) // target = 1 to 4 for effects, 5 for species
if(memorybank && 0 < target && target <= 4)
if(target < memorybank.effect.stage) return // too powerful, catching this for href exploit prevention
else if(species_buffer && target == 5)
dish.virus2.affected_species = species_buffer
var/datum/disease2/effectholder/target_holder
var/list/illegal_types = list()
for(var/datum/disease2/effectholder/e in dish.virus2.effects)
if(e.stage == target)
target_holder = e
else
illegal_types += e.effect.type
if(memorybank.effect.type in illegal_types) return
target_holder.effect = memorybank.effect
else
return
else if(species_buffer && target == 5)
dish.virus2.affected_species = species_buffer
splicing = 10
dish.virus2.uniqueID = rand(0,10000)
. = TRUE
else
return
if("disk")
burning = 10
. = TRUE
splicing = 10
dish.virus2.uniqueID = rand(0,10000)
return 1
if(href_list["disk"])
burning = 10
return 1
return 0
+64 -70
View File
@@ -30,7 +30,7 @@
O.loc = src
user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
src.attack_hand(user)
return
@@ -46,17 +46,23 @@
O.loc = src
user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
src.attack_hand(user)
/obj/machinery/disease2/incubator/attack_hand(mob/user as mob)
if(stat & (NOPOWER|BROKEN)) return
ui_interact(user)
if(stat & (NOPOWER|BROKEN))
return
tgui_interact(user)
/obj/machinery/disease2/incubator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
/obj/machinery/disease2/incubator/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "DishIncubator", name)
ui.set_autoupdate(FALSE)
ui.open()
/obj/machinery/disease2/incubator/tgui_data(mob/user)
var/data[0]
data["chemicals_inserted"] = !!beaker
data["dish_inserted"] = !!dish
@@ -74,23 +80,19 @@
data["can_breed_virus"] = null
data["blood_already_infected"] = null
if (beaker)
if(beaker)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list
data["can_breed_virus"] = dish && dish.virus2 && B
if (B)
if (!B.data["virus2"])
if(B)
if(!B.data["virus2"])
B.data["virus2"] = list()
var/list/virus = B.data["virus2"]
for (var/ID in virus)
data["blood_already_infected"] = virus[ID]
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "dish_incubator.tmpl", src.name, 400, 600)
ui.set_initial_data(data)
ui.open()
return data
/obj/machinery/disease2/incubator/process()
if(dish && on && dish.virus2)
@@ -105,7 +107,7 @@
foodsupply -= 1
dish.growth += 3
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(radiation)
if(radiation > 50 & prob(5))
@@ -118,90 +120,82 @@
else if(prob(5))
dish.virus2.minormutate()
radiation -= 1
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(toxins && prob(5))
dish.virus2.infectionchance -= 1
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(toxins > 50)
dish.growth = 0
dish.virus2 = null
SSnanoui.update_uis(src)
SStgui.update_uis(src)
else if(!dish)
on = 0
icon_state = "incubator"
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if(beaker)
if(foodsupply < 100 && beaker.reagents.remove_reagent("virusfood",5))
if(foodsupply + 10 <= 100)
foodsupply += 10
SSnanoui.update_uis(src)
SStgui.update_uis(src)
if (locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100)
if(locate(/datum/reagent/toxin) in beaker.reagents.reagent_list && toxins < 100)
for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list)
toxins += max(T.strength,1)
beaker.reagents.remove_reagent(T.id,1)
if(toxins > 100)
toxins = 100
break
SSnanoui.update_uis(src)
SStgui.update_uis(src)
/obj/machinery/disease2/incubator/Topic(href, href_list)
if (..()) return 1
/obj/machinery/disease2/incubator/tgui_act(action, params)
if(..())
return TRUE
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
add_fingerprint(user)
switch(action)
if("ejectchem")
if(beaker)
beaker.loc = src.loc
beaker = null
. = TRUE
src.add_fingerprint(user)
if("power")
if(dish)
on = !on
icon_state = on ? "incubator_on" : "incubator"
. = TRUE
if (href_list["close"])
user.unset_machine()
ui.close()
return 0
if("ejectdish")
if(dish)
dish.loc = src.loc
dish = null
. = TRUE
if (href_list["ejectchem"])
if(beaker)
beaker.loc = src.loc
beaker = null
return 1
if("rad")
radiation = min(100, radiation + 10)
. = TRUE
if (href_list["power"])
if (dish)
on = !on
icon_state = on ? "incubator_on" : "incubator"
return 1
if("flush")
radiation = 0
toxins = 0
foodsupply = 0
. = TRUE
if (href_list["ejectdish"])
if(dish)
dish.loc = src.loc
dish = null
return 1
if("virus")
if(!dish)
return TRUE
if (href_list["rad"])
radiation = min(100, radiation + 10)
return 1
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list
if(!B)
return TRUE
if (href_list["flush"])
radiation = 0
toxins = 0
foodsupply = 0
return 1
if(!B.data["virus2"])
B.data["virus2"] = list()
if(href_list["virus"])
if (!dish)
return 1
var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy())
B.data["virus2"] += virus
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in beaker.reagents.reagent_list
if (!B)
return 1
if (!B.data["virus2"])
B.data["virus2"] = list()
var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy())
B.data["virus2"] += virus
ping("\The [src] pings, \"Injection complete.\"")
return 1
return 0
ping("\The [src] pings, \"Injection complete.\"")
. = TRUE
+80 -106
View File
@@ -1,8 +1,3 @@
// UI menu navigation
#define HOME "home"
#define LIST "list"
#define ENTRY "entry"
/obj/machinery/disease2/isolator/
name = "pathogenic isolator"
desc = "Used to isolate and identify diseases, allowing for comparison with a remote database."
@@ -11,9 +6,7 @@
icon = 'icons/obj/virology_vr.dmi' //VOREStation Edit
icon_state = "isolator"
var/isolating = 0
var/state = HOME
var/datum/disease2/disease/virus2 = null
var/datum/data/record/entry = null
var/obj/item/weapon/reagent_containers/syringe/sample = null
/obj/machinery/disease2/isolator/update_icon()
@@ -44,71 +37,57 @@
S.loc = src
user.visible_message("[user] adds \a [O] to \the [src]!", "You add \a [O] to \the [src]!")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
update_icon()
src.attack_hand(user)
/obj/machinery/disease2/isolator/attack_hand(mob/user as mob)
if(stat & (NOPOWER|BROKEN)) return
ui_interact(user)
if(stat & (NOPOWER|BROKEN))
return
tgui_interact(user)
/obj/machinery/disease2/isolator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
user.set_machine(src)
/obj/machinery/disease2/isolator/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "PathogenicIsolator", name)
ui.open()
var/data[0]
/obj/machinery/disease2/isolator/tgui_data(mob/user)
var/list/data = list()
data["syringe_inserted"] = !!sample
data["isolating"] = isolating
data["pathogen_pool"] = null
data["state"] = state
data["entry"] = entry
data["can_print"] = (state != HOME || sample) && !isolating
data["can_print"] = !isolating
switch (state)
if (HOME)
if (sample)
var/list/pathogen_pool[0]
for(var/datum/reagent/blood/B in sample.reagents.reagent_list)
var/list/virus = B.data["virus2"]
for (var/ID in virus)
var/datum/disease2/disease/V = virus[ID]
var/datum/data/record/R = null
if (ID in virusDB)
R = virusDB[ID]
var/list/pathogen_pool = list()
if(sample)
for(var/datum/reagent/blood/B in sample.reagents.reagent_list)
var/list/virus = B.data["virus2"]
for (var/ID in virus)
var/datum/disease2/disease/V = virus[ID]
var/datum/data/record/R = null
if (ID in virusDB)
R = virusDB[ID]
var/mob/living/carbon/human/D = B.data["donor"]
pathogen_pool.Add(list(list(\
"name" = "[D.get_species()] [B.name]", \
"dna" = B.data["blood_DNA"], \
"unique_id" = V.uniqueID, \
"reference" = "\ref[V]", \
"is_in_database" = !!R, \
"record" = "\ref[R]")))
var/mob/living/carbon/human/D = B.data["donor"]
pathogen_pool.Add(list(list(\
"name" = "[D.get_species()] [B.name]", \
"dna" = B.data["blood_DNA"], \
"unique_id" = V.uniqueID, \
"reference" = "\ref[V]", \
"is_in_database" = !!R, \
"record" = "\ref[R]")))
data["pathogen_pool"] = pathogen_pool
if (pathogen_pool.len > 0)
data["pathogen_pool"] = pathogen_pool
if (LIST)
var/list/db[0]
for (var/ID in virusDB)
var/datum/data/record/r = virusDB[ID]
db.Add(list(list("name" = r.fields["name"], "record" = "\ref[r]")))
if (db.len > 0)
data["database"] = db
if (ENTRY)
if (entry)
var/desc = entry.fields["description"]
data["entry"] = list(\
"name" = entry.fields["name"], \
"description" = replacetext(desc, "\n", ""))
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "pathogenic_isolator.tmpl", src.name, 400, 500)
ui.set_initial_data(data)
ui.open()
var/list/db = list()
for(var/ID in virusDB)
var/datum/data/record/r = virusDB[ID]
db.Add(list(list("name" = r.fields["name"], "record" = "\ref[r]")))
data["database"] = db
data["modal"] = tgui_modal_data(src)
return data
/obj/machinery/disease2/isolator/process()
if (isolating > 0)
@@ -120,62 +99,54 @@
virus2 = null
ping("\The [src] pings, \"Viral strain isolated.\"")
SSnanoui.update_uis(src)
SStgui.update_uis(src)
update_icon()
/obj/machinery/disease2/isolator/Topic(href, href_list)
if (..()) return 1
/obj/machinery/disease2/isolator/tgui_act(action, list/params)
if(..())
return TRUE
var/mob/user = usr
var/datum/nanoui/ui = SSnanoui.get_open_ui(user, src, "main")
add_fingerprint(user)
. = TRUE
switch(tgui_modal_act(src, action, params))
if(TGUI_MODAL_ANSWER)
return
src.add_fingerprint(user)
switch(action)
if("view_entry")
var/datum/data/record/v = locate(params["vir"])
if(!istype(v))
return FALSE
tgui_modal_message(src, "virus", "", null, v.fields["tgui_description"])
return TRUE
if (href_list["close"])
user.unset_machine()
ui.close()
return 0
if("print")
print(user, params)
return TRUE
if (href_list[HOME])
state = HOME
return 1
if("isolate")
var/datum/disease2/disease/V = locate(params["isolate"])
if (V)
virus2 = V
isolating = 20
update_icon()
return TRUE
if (href_list[LIST])
state = LIST
return 1
if (href_list[ENTRY])
if (istype(locate(href_list["view"]), /datum/data/record))
entry = locate(href_list["view"])
state = ENTRY
return 1
if (href_list["print"])
print(user)
return 1
if(!sample) return 1
if (href_list["isolate"])
var/datum/disease2/disease/V = locate(href_list["isolate"])
if (V)
virus2 = V
isolating = 20
if("eject")
if(!sample)
return FALSE
sample.forceMove(loc)
sample = null
update_icon()
return 1
return TRUE
if (href_list["eject"])
sample.loc = src.loc
sample = null
update_icon()
return 1
/obj/machinery/disease2/isolator/proc/print(var/mob/user)
/obj/machinery/disease2/isolator/proc/print(mob/user, list/params)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper(loc)
switch (state)
if (HOME)
switch(params["type"])
if("patient_diagnosis")
if (!sample) return
P.name = "paper - Patient Diagnostic Report"
P.info = {"
@@ -207,7 +178,7 @@
<u>Additional Notes:</u>&nbsp;
"}
if (LIST)
if("virus_list")
P.name = "paper - Virus List"
P.info = {"
[virology_letterhead("Virus List")]
@@ -225,11 +196,14 @@
<u>Additional Notes:</u>&nbsp;
"}
if (ENTRY)
if("virus_record")
var/datum/data/record/v = locate(params["vir"])
if(!istype(v))
return FALSE
P.name = "paper - Viral Profile"
P.info = {"
[virology_letterhead("Viral Profile")]
[entry.fields["description"]]
[v.fields["description"]]
<hr>
<u>Additional Notes:</u>&nbsp;
"}