diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index d4b2641b22f..9fe8c781c09 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -314,7 +314,7 @@ if(state_open) if(store_item(I, user)) update_icon() - updateUsrDialog() + SStgui.update_uis(src) to_chat(user, "You load the [I] into the storage compartment.") else to_chat(user, "You can't fit [I] into [src]!") @@ -366,6 +366,7 @@ helmet = null suit = null mask = null + boots = null storage = null occupant = null @@ -409,8 +410,6 @@ if(uv_cycles) uv_cycles-- uv = TRUE - locked = TRUE - update_icon() if(occupant) var/mob/living/mob_occupant = occupant if(uv_super) @@ -422,7 +421,6 @@ else uv_cycles = initial(uv_cycles) uv = FALSE - locked = FALSE for(var/atom/A in contents) A.clean_blood(radiation_clean = FALSE) // we invoke the radiation cleaning proc directly A.clean_radiation(12) // instead of letting clean_blood do it @@ -451,9 +449,10 @@ else visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") playsound(src, 'sound/machines/airlock_close.ogg', 25, 1) - open_machine(FALSE) if(occupant) dump_contents() + update_icon() + SStgui.update_uis(src) /obj/machinery/suit_storage_unit/relaymove(mob/user) if(locked) @@ -502,7 +501,7 @@ if(drop) dropContents() update_icon() - updateUsrDialog() + SStgui.update_uis(src) /obj/machinery/suit_storage_unit/dropContents() var/turf/T = get_turf(src) @@ -532,132 +531,81 @@ if(target && !target.has_buckled_mobs() && (!isliving(target) || !mobtarget.buckled)) occupant = target target.forceMove(src) - updateUsrDialog() + SStgui.update_uis(src) update_icon() //////// -/obj/machinery/suit_storage_unit/attack_hand(mob/user) - var/dat - if(shocked && !(stat & NOPOWER)) - if(shock(user, 100)) - return - if(stat & NOPOWER) - return - if(..()) - return - if(panel_open) //The maintenance panel is open. Time for some shady stuff - wires.Interact(user) - if(uv) //The thing is running its cauterisation cycle. You have to wait. - dat += "Suit storage unit" - dat+= "Unit is cauterising contents with selected UV ray intensity. Please wait.
" - else - if(!broken) - dat+= "Welcome to the Unit control panel.
" - dat+= text("Helmet storage compartment: []
",(helmet ? helmet.name : "No helmet detected.") ) - if(helmet && state_open) - dat+="Dispense helmet
" - dat+= text("Suit storage compartment: []
",(suit ? suit.name : "
No exosuit detected.") ) - if(suit && state_open) - dat+="Dispense suit
" - dat+= text("Breathmask storage compartment: []
",(mask ? mask.name : "
No breathmask detected.") ) - if(mask && state_open) - dat+="Dispense mask
" - dat+= text("Magboots storage compartment: []
",(boots ? boots.name : "
No magboots detected.") ) - if(boots && state_open) - dat+="Dispense magboots
" - dat+= text("Tank storage compartment: []
",(storage ? storage.name : "
No storage item detected.") ) - if(storage && state_open) - dat+="Dispense storage item
" - if(occupant) - dat+= "
WARNING: Biological entity detected inside the Unit's storage. Please remove.
" - dat+= "Eject extra load" - dat+= text("
Unit is: [] - [] Unit ",(state_open ? "Open" : "Closed"),(state_open ? "Close" : "Open")) - if(state_open) - dat+="
" - else - dat+= text(" - *[] Unit*
",(locked ? "Unlock" : "Lock") ) - dat+= text("Unit status: []",(locked? "**LOCKED**
" : "**UNLOCKED**
") ) - dat+= "Start Disinfection cycle
" - dat += "

Close control panel" - else //Ohhhh shit it's dirty or broken! Let's inform the guy. - dat+= "Suit storage unit" - dat+= "Unit chamber is too contaminated to continue usage. Please call for a qualified individual to perform maintenance.

" - dat+= "
Close control panel" - - - var/datum/browser/popup = new(user, "suit_storage_unit", name, 400, 500) - popup.set_content(dat) - popup.open(0) - onclose(user, "suit_storage_unit") - return - /obj/machinery/suit_storage_unit/proc/check_allowed(user) if(!(allowed(user) || !secure)) to_chat(user, "Access denied.") return FALSE return TRUE -/obj/machinery/suit_storage_unit/Topic(href, href_list) +/obj/machinery/suit_storage_unit/attack_hand(mob/user) + if(..() || (stat & NOPOWER)) + return + if(shocked && shock(user, 100)) + return + if(panel_open) //The maintenance panel is open. Time for some shady stuff + wires.Interact(user) + ui_interact(user) + +/obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, 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, "SuitStorage", name, 402, 268, master_ui, state) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/suit_storage_unit/ui_data(mob/user) + var/list/data = list( + "locked" = locked, + "open" = state_open, + "broken" = broken, + "helmet" = helmet ? helmet.name : null, + "suit" = suit ? suit.name : null, + "magboots" = boots ? boots.name : null, + "mask" = mask ? mask.name : null, + "storage" = storage ? storage.name : null, + "uv" = uv + ) + return data + +/obj/machinery/suit_storage_unit/ui_act(action, list/params) if(..()) - return 1 + return + add_fingerprint(usr) if(shocked && !(stat & NOPOWER)) if(shock(usr, 100)) - return - if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) - usr.set_machine(src) - if(href_list["toggleUV"]) - toggleUV() - updateUsrDialog() - update_icon() - if(href_list["togglesafeties"]) - togglesafeties() - updateUsrDialog() - update_icon() - if(href_list["dispense_helmet"]) - dispense_helmet() - updateUsrDialog() - update_icon() - if(href_list["dispense_suit"]) - dispense_suit() - updateUsrDialog() - update_icon() - if(href_list["dispense_mask"]) - dispense_mask() - updateUsrDialog() - update_icon() - if(href_list["dispense_magboots"]) - dispense_magboots() - updateUsrDialog() - update_icon() - if(href_list["dispense_storage"]) - dispense_storage() - updateUsrDialog() - update_icon() - if(href_list["toggle_open"]) - if(!check_allowed(usr)) - return - toggle_open(usr) - updateUsrDialog() - update_icon() - if(href_list["toggle_lock"]) - if(!check_allowed(usr)) - return - toggle_lock(usr) - updateUsrDialog() - update_icon() - if(href_list["cook"]) - cook() - updateUsrDialog() - update_icon() - if(href_list["eject_guy"]) - eject_occupant(usr) - updateUsrDialog() - update_icon() - add_fingerprint(usr) - return + return FALSE + . = TRUE + switch(action) + if("dispense_helmet") + dispense_helmet() + if("dispense_suit") + dispense_suit() + if("dispense_mask") + dispense_mask() + if("dispense_boots") + dispense_boots() + if("dispense_storage") + dispense_storage() + if("toggle_open") + if(!check_allowed(usr)) + return FALSE + toggle_open(usr) + if("toggle_lock") + if(!check_allowed(usr)) + return FALSE + toggle_lock(usr) + if("cook") + cook() + if("eject_occupant") + eject_occupant(usr) + update_icon() /obj/machinery/suit_storage_unit/proc/toggleUV() if(!panel_open) @@ -692,7 +640,7 @@ mask.forceMove(loc) mask = null -/obj/machinery/suit_storage_unit/proc/dispense_magboots() +/obj/machinery/suit_storage_unit/proc/dispense_boots() if(!boots) return else @@ -754,7 +702,7 @@ return eject_occupant(usr) add_fingerprint(usr) - updateUsrDialog() + SStgui.update_uis(src) update_icon() return @@ -785,7 +733,7 @@ update_icon() add_fingerprint(usr) - updateUsrDialog() + SStgui.update_uis(src) return else occupant = null diff --git a/tgui/packages/tgui/interfaces/SuitStorage.js b/tgui/packages/tgui/interfaces/SuitStorage.js new file mode 100644 index 00000000000..00737cb60e6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/SuitStorage.js @@ -0,0 +1,140 @@ +import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Box, Button, Dimmer, Divider, Flex, Icon, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +export const SuitStorage = (props, context) => { + const { data } = useBackend(context); + const { uv } = data; + return ( + + + {!!uv && ( + + + +
+ Disinfection of contents in progress... +
+
+
+ )} + + +
+
+ ); +}; + +const StoredItems = (props, context) => { + const { act, data } = useBackend(context); + const { + helmet, + suit, + magboots, + mask, + storage, + open, + locked, + } = data; + return ( +
+
+ ); +}; + +const ItemRow = (props, context) => { + const { act, data } = useBackend(context); + const { + object, + label, + missingText, + eject, + } = props; + return ( + + + {object ? ( +