diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index 47e8cfff55d..c8557519682 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -420,13 +420,6 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar update_appearance(UPDATE_ICON) return ..() -// On-click handling. Turns on the computer if it's off and opens the GUI. -/obj/item/modular_computer/interact(mob/user) - if(enabled) - ui_interact(user) - else - turn_on(user) - /obj/item/modular_computer/CtrlShiftClick(mob/user) . = ..() if(.) @@ -605,7 +598,6 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar program.alert_pending = FALSE idle_threads.Remove(program) update_appearance() - updateUsrDialog() return TRUE if(!program.is_supported_by_hardware(hardware_flag, 1, user)) @@ -625,7 +617,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar active_program = program program.alert_pending = FALSE update_appearance() - updateUsrDialog() + ui_interact(user) return TRUE // Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on) diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index 8a327b5b800..fb90a50604f 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -1,20 +1,15 @@ -/obj/item/modular_computer/attack_self(mob/user) - . = ..() - ui_interact(user) +/obj/item/modular_computer/interact(mob/user) + if(enabled) + ui_interact(user) + else + turn_on(user) // Operates TGUI /obj/item/modular_computer/ui_interact(mob/user, datum/tgui/ui) - if(!enabled) + if(!enabled || !user.can_read(src, READING_CHECK_LITERACY) || !use_power()) if(ui) ui.close() return - if(!use_power()) - if(ui) - ui.close() - return - - if(!user.can_read(src, READING_CHECK_LITERACY)) - return // Robots don't really need to see the screen, their wireless connection works as long as computer is on. if(!screen_on && !issilicon(user)) @@ -22,27 +17,43 @@ ui.close() return - // If we have an active program switch to it now. - if(active_program) - if(ui) // This is the main laptop screen. Since we are switching to program's UI close it for now. - ui.close() - active_program.ui_interact(user) - return - if(honkvirus_amount > 0) // EXTRA annoying, huh! honkvirus_amount-- playsound(src, 'sound/items/bikehorn.ogg', 30, TRUE) ui = SStgui.try_update_ui(user, src, ui) - if (!ui) - ui = new(user, src, "NtosMain") - ui.set_autoupdate(TRUE) - if(ui.open()) - ui.send_asset(get_asset_datum(/datum/asset/simple/headers)) + if(!ui) + if(active_program) + ui = new(user, src, active_program.tgui_id, active_program.filedesc) + else + ui = new(user, src, "NtosMain") + ui.open() + return + + var/old_open_ui = ui.interface + if(active_program) + ui.interface = active_program.tgui_id + ui.title = active_program.filedesc + else + ui.interface = "NtosMain" + //opened a new UI + if(old_open_ui != ui.interface) + update_static_data(user, ui) + ui.send_assets() + +/obj/item/modular_computer/ui_assets(mob/user) + var/list/data = list() + data += get_asset_datum(/datum/asset/simple/headers) + if(active_program) + data += active_program.ui_assets(user) + return data /obj/item/modular_computer/ui_static_data(mob/user) . = ..() var/list/data = list() + if(active_program) + data += active_program.ui_static_data(user) + return data data["show_imprint"] = istype(src, /obj/item/modular_computer/pda) @@ -50,6 +61,9 @@ /obj/item/modular_computer/ui_data(mob/user) var/list/data = get_header_data() + if(active_program) + data += active_program.ui_data(user) + return data data["login"] = list( IDName = saved_identification || "Unknown", @@ -61,7 +75,6 @@ IDJob = computer_id_slot?.assignment, ) - data["removable_media"] = list() if(inserted_disk) data["removable_media"] += "Eject Disk" @@ -86,9 +99,8 @@ data["pai"] = inserted_pai return data - // Handles user's GUI input -/obj/item/modular_computer/ui_act(action, params) +/obj/item/modular_computer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return @@ -99,6 +111,9 @@ balloon_alert(human_user, "fingers are too big!") return TRUE + if(active_program) + active_program.ui_act(action, params, ui, state) + switch(action) if("PC_exit") kill_program() @@ -107,29 +122,28 @@ shutdown_computer() return TRUE if("PC_minimize") - var/mob/user = usr if(!active_program) return + //header programs can't be minimized. + if(active_program.header_program) + kill_program() + return TRUE idle_threads.Add(active_program) active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs active_program = null update_appearance() - if(user && istype(user)) - ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. if("PC_killprogram") var/prog = params["name"] - var/datum/computer_file/program/P = null - var/mob/user = usr - P = find_file_by_name(prog) + var/datum/computer_file/program/killed_program = find_file_by_name(prog) - if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED) + if(!istype(killed_program) || killed_program.program_state == PROGRAM_STATE_KILLED) return - P.kill_program(forced = TRUE) - to_chat(user, span_notice("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed.")) + killed_program.kill_program(forced = TRUE) + to_chat(usr, span_notice("Program [killed_program.filename].[killed_program.filetype] with PID [rand(100,999)] has been killed.")) if("PC_runprogram") open_program(usr, find_file_by_name(params["name"])) @@ -172,7 +186,7 @@ return TRUE if("ID") - if(RemoveID()) + if(RemoveID(user)) playsound(src, 'sound/machines/card_slide.ogg', 50) return TRUE @@ -192,8 +206,6 @@ if("interact") inserted_pai.attack_self(usr) return UI_UPDATE - else - return /obj/item/modular_computer/ui_host() if(physical) diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index bbc190afdff..44b35ff1975 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -143,17 +143,6 @@ to_chat(user, span_danger("\The [computer] flashes an \"Access Denied\" warning.")) return FALSE -/** - * This attempts to retrieve header data for UIs. - * - * If implementing completely new device of different type than existing ones - * always include the device here in this proc. This proc basically relays the request to whatever is running the program. - **/ -/datum/computer_file/program/proc/get_header_data() - if(computer) - return computer.get_header_data() - return list() - /** * Called on program startup. * @@ -188,62 +177,3 @@ var/obj/item/card/id/ID = computer.computer_id_slot?.GetID() generate_network_log("Connection closed -- Program ID: [filename] User:[ID ? "[ID.registered_name]" : "None"]") return TRUE - -/datum/computer_file/program/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui && tgui_id) - ui = new(user, src, tgui_id, filedesc) - if(ui.open()) - ui.send_asset(get_asset_datum(/datum/asset/simple/headers)) - -// CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC: -// Topic calls are automagically forwarded from NanoModule this program contains. -// Calls beginning with "PRG_" are reserved for programs handling. -// Calls beginning with "PC_" are reserved for computer handling (by whatever runs the program) -// ALWAYS INCLUDE PARENT CALL ..() OR DIE IN FIRE. -/datum/computer_file/program/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() - if(.) - return - - if(ishuman(usr) && !computer.allow_chunky) //in /obj/item/modular_computer/ui_act() too - var/mob/living/carbon/human/human_user = usr - if(human_user.check_chunky_fingers()) - computer.balloon_alert(human_user, "fingers are too big!") - return TRUE - - if(computer) - switch(action) - if("PC_exit") - computer.kill_program() - ui.close() - return TRUE - if("PC_shutdown") - computer.shutdown_computer() - ui.close() - return TRUE - if("PC_minimize") - var/mob/user = usr - if(!computer.active_program) - return - - computer.idle_threads.Add(computer.active_program) - program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs - - computer.active_program = null - computer.update_appearance() - ui.close() - - if(user && istype(user)) - computer.ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. - -/datum/computer_file/program/ui_host() - if(computer.physical) - return computer.physical - else - return computer - -/datum/computer_file/program/ui_status(mob/user) - if(program_state != PROGRAM_STATE_ACTIVE) // Our program was closed. Close the ui if it exists. - return UI_CLOSE - return ..() diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index f451e181ca9..1551da4df37 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -118,7 +118,7 @@ return TRUE /datum/computer_file/program/ai_restorer/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["ejectable"] = TRUE data["AI_present"] = !!stored_card?.AI diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index ad8f56d6330..7b48ad10252 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -41,7 +41,7 @@ return 1 /datum/computer_file/program/alarm_monitor/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data += alert_control.ui_data(user) return data diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 8574bacfab9..f865ff3a946 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -68,7 +68,7 @@ return TRUE /datum/computer_file/program/ntnet_dos/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["error"] = error if(target && executed) diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 98fe3fe7e05..172fdc7fc42 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -64,7 +64,7 @@ return temp /datum/computer_file/program/revelation/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["armed"] = armed diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index cabd789656a..70e12343c2f 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -82,7 +82,7 @@ ) /datum/computer_file/program/arcade/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["Hitpoints"] = boss_hp data["PlayerHitpoints"] = player_hp data["PlayerMP"] = player_mp @@ -97,7 +97,6 @@ . = ..() if(.) return - usr.played_game() var/gamerSkillLevel = 0 diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 64abf2dd9f2..3109278b9e5 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -54,7 +54,7 @@ return return_atmos_handbooks() /datum/computer_file/program/atmosscan/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/turf/turf = get_turf(computer) data["atmozphereMode"] = atmozphere_mode data["clickAtmozphereCompatible"] = (computer.hardware_flag & PROGRAM_TABLET) diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 5b041dfe9a1..aedf67dd412 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -69,7 +69,7 @@ DL_progress += 25 /datum/computer_file/program/borg_monitor/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["card"] = FALSE if(checkID()) @@ -112,20 +112,19 @@ . = ..() if(.) return - switch(action) if("messagebot") var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs if(!istype(R)) - return + return TRUE var/ID = checkID() if(!ID) - return + return TRUE if(R.stat == DEAD) //Dead borgs will listen to you no longer to_chat(usr, span_warning("Error -- Could not open a connection to unit:[R]")) var/message = tgui_input_text(usr, "Message to be sent to remote cyborg", "Send Message") if(!message) - return + return TRUE to_chat(R, "

[span_notice("Message from [ID] -- \"[message]\"")]
") to_chat(usr, "Message sent to [R]: [message]") R.logevent("Message from [ID] -- \"[message]\"") @@ -134,6 +133,7 @@ to_chat(R.connected_ai, "

[span_notice("Message from [ID] to [R] -- \"[message]\"")]
") SEND_SOUND(R.connected_ai, 'sound/machines/twobeep_high.ogg') usr.log_talk(message, LOG_PDA, tag="Cyborg Monitor Program: ID name \"[ID]\" to [R]") + return TRUE ///This proc is used to determin if a borg should be shown in the list (based on the borg's scrambledcodes var). Syndicate version overrides this to show only syndicate borgs. /datum/computer_file/program/borg_monitor/proc/evaluate_borg(mob/living/silicon/robot/R) diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm index 271ac321306..095f1a6e27b 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -19,7 +19,7 @@ var/networked = FALSE /datum/computer_file/program/bounty_board/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/list/formatted_requests = list() var/list/formatted_applicants = list() if(current_user) @@ -82,7 +82,7 @@ for(var/datum/station_request/i in GLOB.request_list) if("[i.req_number]" == "[current_user.account_id]") computer.say("Account already has active bounty.") - return + return TRUE var/datum/station_request/curr_request = new /datum/station_request(current_user.account_holder, bounty_value,bounty_text,current_user.account_id, current_user) GLOB.request_list += list(curr_request) for(var/obj/i in GLOB.allbountyboards) @@ -126,9 +126,10 @@ bounty_value = text2num(params["bountyval"]) if(!bounty_value) bounty_value = 1 + return TRUE if("bountyText") bounty_text = (params["bountytext"]) - . = TRUE + return TRUE /datum/computer_file/program/bounty_board/Destroy() GLOB.allbountyboards -= computer diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index a3ba91cd3b4..41cb1638695 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -61,8 +61,7 @@ return FALSE /datum/computer_file/program/budgetorders/ui_data() - . = ..() - var/list/data = get_header_data() + var/list/data = list() data["location"] = SSshuttle.supply.getStatusText() data["department"] = "Cargo" var/datum/bank_account/buyer = SSeconomy.get_dep_account(cargo_account) diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 769865bce01..66fa00ff577 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -77,7 +77,6 @@ . = ..() if(.) return - var/mob/user = usr var/obj/item/card/id/inserted_auth_card = computer.computer_id_slot @@ -287,7 +286,7 @@ return data /datum/computer_file/program/card_mod/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/obj/item/card/id/inserted_id = computer.computer_id_slot data["authIDName"] = inserted_id ? inserted_id.name : "-----" diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index 69932aedd1c..9e8c6430af1 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -17,7 +17,7 @@ var/cut_min = 0.01 /datum/computer_file/program/shipping/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["has_id_slot"] = !!computer.computer_id_slot data["paperamt"] = "[computer.stored_paper] / [computer.max_paper]" @@ -30,21 +30,18 @@ . = ..() if(.) return - if(!computer) - return - if(!computer.computer_id_slot) //We need an ID to successfully run - return + return FALSE switch(action) if("ejectid") computer.RemoveID(usr) if("selectid") if(!computer.computer_id_slot.registered_account) - playsound(get_turf(ui_host()), 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) - return + playsound(get_turf(computer.ui_host()), 'sound/machines/buzz-sigh.ogg', 50, TRUE, -1) + return TRUE payments_acc = computer.computer_id_slot.registered_account - playsound(get_turf(ui_host()), 'sound/machines/ping.ogg', 50, TRUE, -1) + playsound(get_turf(computer.ui_host()), 'sound/machines/ping.ogg', 50, TRUE, -1) if("resetid") payments_acc = null if("setsplit") @@ -53,11 +50,11 @@ if("print") if(computer.stored_paper <= 0) to_chat(usr, span_notice("Printer is out of paper.")) - return + return TRUE if(!payments_acc) to_chat(usr, span_notice("Software error: Please set a current user first.")) - return - var/obj/item/barcode/barcode = new /obj/item/barcode(get_turf(ui_host())) + return TRUE + var/obj/item/barcode/barcode = new /obj/item/barcode(get_turf(computer.ui_host())) barcode.payments_acc = payments_acc barcode.cut_multiplier = cut_multiplier computer.stored_paper-- diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index 345bee97d90..a69791ae4da 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -12,7 +12,7 @@ detomatix_resistance = DETOMATIX_RESIST_MAJOR /datum/computer_file/program/crew_manifest/ui_static_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["manifest"] = GLOB.manifest.get_manifest() return data @@ -20,7 +20,6 @@ . = ..() if(.) return - switch(action) if("PRG_print") if(computer) //This option should never be called if there is no printer diff --git a/code/modules/modular_computers/file_system/programs/emojipedia.dm b/code/modules/modular_computers/file_system/programs/emojipedia.dm index e4835f2da8d..277311491a7 100644 --- a/code/modules/modular_computers/file_system/programs/emojipedia.dm +++ b/code/modules/modular_computers/file_system/programs/emojipedia.dm @@ -17,7 +17,7 @@ emoji_list = sortTim(emoji_list, GLOBAL_PROC_REF(cmp_text_asc)) /datum/computer_file/program/emojipedia/ui_static_data(mob_user) - var/list/data = get_header_data() + var/list/data = list() for(var/emoji in emoji_list) data["emoji_list"] += list(list( "name" = emoji, diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index 7bb2fa34197..377f469518c 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -17,7 +17,6 @@ . = ..() if(.) return - switch(action) if("PRG_deletefile") var/datum/computer_file/file = computer.find_file_by_name(params["name"]) @@ -82,7 +81,7 @@ binary.alert_silenced = !binary.alert_silenced /datum/computer_file/program/filemanager/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() if(error) data["error"] = error if(!computer) diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index 9df43887ebe..9e33256da74 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -83,7 +83,7 @@ /datum/computer_file/program/scipaper_program/ui_data() // Program Headers: - var/list/data = get_header_data() + var/list/data = list() data["currentTab"] = current_tab data["has_techweb"] = !!linked_techweb @@ -168,7 +168,6 @@ . = ..() if (.) return - switch(action) if("et_alia") paper_to_be.et_alia = !paper_to_be.et_alia @@ -226,7 +225,7 @@ playsound(computer, 'sound/machines/ping.ogg', 25) return TRUE playsound(computer, 'sound/machines/terminal_error.ogg', 25) - return FALSE + return TRUE /// Publication and adding points. /datum/computer_file/program/scipaper_program/proc/publish() diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 0ed4886b894..8f9895ceefd 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -73,17 +73,16 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) . = ..() if(.) return - var/obj/item/card/id/user_id = computer.computer_id_slot if(!user_id || !(ACCESS_CHANGE_IDS in user_id.access)) - return + return TRUE switch(action) if("PRG_open_job") var/edit_job_target = params["target"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j || !can_open_job(j)) - return + return TRUE if(opened_positions[edit_job_target] >= 0) GLOB.time_last_changed_position = world.time / 10 j.total_positions++ @@ -95,7 +94,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/edit_job_target = params["target"] var/datum/job/j = SSjob.GetJob(edit_job_target) if(!j || !can_close_job(j)) - return + return TRUE //Allow instant closing without cooldown if a position has been opened before if(opened_positions[edit_job_target] <= 0) GLOB.time_last_changed_position = world.time / 10 @@ -108,9 +107,9 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) var/priority_target = params["target"] var/datum/job/j = SSjob.GetJob(priority_target) if(!j || !can_edit_job(j)) - return + return TRUE if(j.total_positions <= j.current_positions) - return + return TRUE if(j in SSjob.prioritized_jobs) SSjob.prioritized_jobs -= j else @@ -123,7 +122,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /datum/computer_file/program/job_management/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/authed = FALSE var/obj/item/card/id/user_id = computer.computer_id_slot diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm index c5a89fb6f59..548dda4a750 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -38,7 +38,7 @@ computer.save_photo(internal_picture.picture_image) /datum/computer_file/program/maintenance/camera/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() if(!isnull(internal_picture)) user << browse_rsc(internal_picture.picture_image, "tmp_photo[picture_number].png") @@ -52,7 +52,6 @@ . = ..() if(.) return - var/mob/living/user = usr switch(action) if("print_photo") diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm index c2141e467e2..253048eec55 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -32,18 +32,17 @@ controlled_suit = null /datum/computer_file/program/maintenance/modsuit_control/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["has_suit"] = !!controlled_suit if(controlled_suit) data += controlled_suit.ui_data() return data /datum/computer_file/program/maintenance/modsuit_control/ui_static_data(mob/user) - return controlled_suit.ui_static_data() + return controlled_suit?.ui_static_data() /datum/computer_file/program/maintenance/modsuit_control/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return - - controlled_suit.ui_act(action, params, ui) + controlled_suit.ui_act(action, params, ui, state) diff --git a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm index dd52dce439f..5162aa7ddc0 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm @@ -20,7 +20,7 @@ last_record = healthscan(user, carbon, 1, tochat = FALSE) /datum/computer_file/program/maintenance/phys_scanner/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["last_record"] = last_record return data diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index 8b422470fda..b5811636a80 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -22,7 +22,7 @@ return ..() /datum/computer_file/program/newscaster/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data += newscaster_ui.ui_data(user) return data diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index ce823c6eaa9..aa5cbf94f35 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -16,14 +16,13 @@ . = ..() if(.) return - switch(action) if("UpdateNote") written_note = params["newnote"] return UI_UPDATE /datum/computer_file/program/notepad/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["note"] = written_note diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index 31056604305..0204f704fe5 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -21,7 +21,6 @@ . = ..() if(.) return - switch(action) if("Transaction") token = params["token"] @@ -62,7 +61,7 @@ /datum/computer_file/program/nt_pay/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() current_user = computer.computer_id_slot?.registered_account || null if(!current_user) diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 2f037a8efb2..dce6dd5dd91 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -118,7 +118,7 @@ return FALSE /datum/computer_file/program/ntnetdownload/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/list/access = computer.GetAccess() data["downloading"] = !!downloaded_file diff --git a/code/modules/modular_computers/file_system/programs/ntmessenger.dm b/code/modules/modular_computers/file_system/programs/ntmessenger.dm index 3d7b5a4633d..5ec7e19b2b3 100644 --- a/code/modules/modular_computers/file_system/programs/ntmessenger.dm +++ b/code/modules/modular_computers/file_system/programs/ntmessenger.dm @@ -108,7 +108,6 @@ . = ..() if(.) return - switch(action) if("PDA_ringSet") var/new_ringtone = tgui_input_text(usr, "Enter a new ringtone", "Ringtone", ringtone, MESSENGER_RINGTONE_MAX_LENGTH) @@ -220,7 +219,7 @@ return data /datum/computer_file/program/messenger/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["messages"] = messages data["messengers"] = ScrubMessengerList() diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index 54b0402ad60..4ae73086712 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -52,7 +52,6 @@ . = ..() if(.) return - var/datum/ntnet_conversation/channel = SSmodular_computers.get_chat_channel_by_id(active_channel) var/authed = FALSE if(channel && ((channel.channel_operator == src) || netadmin_mode)) @@ -218,7 +217,7 @@ return data /datum/computer_file/program/chatclient/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() if(!SSmodular_computers.chat_channels) return data diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index a4ce9cd4dfb..1fdd91878fb 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -78,8 +78,8 @@ demand.Cut(1, 2) /datum/computer_file/program/power_monitor/ui_data() + var/list/data = list() var/datum/powernet/connected_powernet = get_powernet() - var/list/data = get_header_data() data["stored"] = record_size data["interval"] = record_interval / 10 data["attached"] = connected_powernet ? TRUE : FALSE diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 6ad369e8433..186f019dda5 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -45,7 +45,7 @@ ) /datum/computer_file/program/radar/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["selected"] = selected data["objects"] = list() data["scanning"] = (world.time < next_scan) @@ -66,7 +66,6 @@ . = ..() if(.) return - switch(action) if("selecttarget") selected = params["ref"] diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 3ba04d80166..7f3d099b719 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -64,7 +64,7 @@ /datum/computer_file/program/records/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["records"] = GetRecordsReadable() data["mode"] = mode return data diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index fe053b7cc25..9d1f1542ae7 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -22,8 +22,8 @@ ) /datum/computer_file/program/robocontrol/ui_data(mob/user) - var/list/data = get_header_data() - var/turf/current_turf = get_turf(ui_host()) + var/list/data = list() + var/turf/current_turf = get_turf(computer.ui_host()) var/list/botlist = list() var/list/mulelist = list() @@ -85,7 +85,7 @@ /datum/computer_file/program/robocontrol/ui_act(action, list/params, datum/tgui/ui) . = ..() - if(.) + if (.) return var/mob/current_user = ui.user var/obj/item/card/id/id_card = computer?.computer_id_slot @@ -124,7 +124,7 @@ GLOB.manifest.modify(id_card.registered_name, id_card.assignment, id_card.get_trim_assignment()) computer.RemoveID(usr) else - playsound(get_turf(ui_host()) , 'sound/machines/buzz-sigh.ogg', 25, FALSE) + playsound(get_turf(computer.ui_host()) , 'sound/machines/buzz-sigh.ogg', 25, FALSE) if("changedroneaccess") if(!computer || !computer.computer_id_slot || !id_card) to_chat(current_user, span_notice("No ID found, authorization failed.")) diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index dd24d739b33..b218aad9113 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -26,7 +26,7 @@ return FALSE /datum/computer_file/program/robotact/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() if(!iscyborg(user)) return data diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index 71cdeb9eb9c..67cfd6dcecb 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -72,7 +72,7 @@ return . /datum/computer_file/program/secureye/ui_data() - var/list/data = get_header_data() + var/list/data = list() data["network"] = network data["activeCamera"] = null var/obj/machinery/camera/active_camera = camera_ref?.resolve() @@ -100,7 +100,6 @@ . = ..() if(.) return - if(action == "switch_camera") var/c_tag = format_text(params["name"]) var/list/cameras = get_available_cameras() diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm index 830160118c1..a92d744e525 100644 --- a/code/modules/modular_computers/file_system/programs/signalcommander.dm +++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm @@ -24,7 +24,7 @@ SSradio.remove_object(computer, signal_frequency) /datum/computer_file/program/signal_commander/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["frequency"] = signal_frequency data["code"] = signal_code data["minFrequency"] = MIN_FREE_FREQ diff --git a/code/modules/modular_computers/file_system/programs/skill_tracker.dm b/code/modules/modular_computers/file_system/programs/skill_tracker.dm index 36eccef338b..a3ba60acde8 100644 --- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm @@ -10,7 +10,7 @@ usage_flags = PROGRAM_TABLET // Must be a handheld device to read read your chakras or whatever /datum/computer_file/program/skill_tracker/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/list/skills = list() data["skills"] = skills @@ -54,7 +54,6 @@ . = ..() if(.) return - switch(action) if("PRG_reward") var/skill_type = find_skilltype(params["skill"]) diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index ad2918b90e0..3bf0136c50b 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -31,7 +31,7 @@ /datum/computer_file/program/supermatter_monitor/proc/refresh() for(var/supermatter in supermatters) clear_supermatter(supermatter) - var/turf/user_turf = get_turf(ui_host()) + var/turf/user_turf = get_turf(computer.ui_host()) if(!user_turf) return for(var/obj/machinery/power/supermatter_crystal/sm in GLOB.machines) @@ -47,7 +47,7 @@ return data /datum/computer_file/program/supermatter_monitor/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["sm_data"] = list() for (var/obj/machinery/power/supermatter_crystal/sm as anything in supermatters) data["sm_data"] += list(sm.sm_ui_data()) @@ -58,7 +58,6 @@ . = ..() if(.) return - switch(action) if("PRG_refresh") refresh() diff --git a/code/modules/modular_computers/file_system/programs/statusdisplay.dm b/code/modules/modular_computers/file_system/programs/statusdisplay.dm index 34911e93a16..737ed0eda51 100644 --- a/code/modules/modular_computers/file_system/programs/statusdisplay.dm +++ b/code/modules/modular_computers/file_system/programs/statusdisplay.dm @@ -66,7 +66,6 @@ . = ..() if(.) return - switch(action) if("setStatusMessage") upper_text = reject_bad_text(params["upperText"] || "", MAX_STATUS_LINE_LENGTH) @@ -83,7 +82,7 @@ return data /datum/computer_file/program/status/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["upperText"] = upper_text data["lowerText"] = lower_text diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index 2e609a24374..6b370162b7a 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -41,7 +41,7 @@ // heavy data from this proc should be moved to static data when possible /datum/computer_file/program/science/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["stored_research"] = !!stored_research if(!stored_research) //lack of a research node is all we care about. return data @@ -92,7 +92,6 @@ . = ..() if (.) return - // Check if the console is locked to block any actions occuring if (locked && action != "toggleLock") computer.say("Console is locked, cannot perform further actions.") diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm index 1fa0322d472..45972a76136 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -15,7 +15,7 @@ var/list/imported_themes = list() /datum/computer_file/program/themeify/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() if(computer.obj_flags & EMAGGED) data["themes"] += list(list("theme_name" = SYNDICATE_THEME_NAME, "theme_ref" = GLOB.pda_name_to_theme[SYNDICATE_THEME_NAME])) @@ -28,7 +28,6 @@ . = ..() if(.) return - switch(action) if("PRG_change_theme") var/selected_theme = params["selected_theme"] diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index cd23656227e..f12b8949673 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -40,7 +40,7 @@ messenger_app.spam_mode = !messenger_app.spam_mode /datum/computer_file/program/ntnetmonitor/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() data["ntnetstatus"] = SSmodular_computers.check_function() data["ntnetrelays"] = SSmodular_computers.ntnet_relays.len diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index be03e118917..6c1d17d5e4f 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -103,14 +103,7 @@ )) else window.send_message("ping") - var/flush_queue = window.send_asset(get_asset_datum( - /datum/asset/simple/namespaced/fontawesome)) - flush_queue |= window.send_asset(get_asset_datum( - /datum/asset/simple/namespaced/tgfont)) - for(var/datum/asset/asset in src_object.ui_assets(user)) - flush_queue |= window.send_asset(asset) - if (flush_queue) - user.client.browse_queue_flush() + send_assets() window.send_message("update", get_payload( with_data = TRUE, with_static_data = TRUE)) @@ -120,6 +113,16 @@ return TRUE +/datum/tgui/proc/send_assets() + var/flush_queue = window.send_asset(get_asset_datum( + /datum/asset/simple/namespaced/fontawesome)) + flush_queue |= window.send_asset(get_asset_datum( + /datum/asset/simple/namespaced/tgfont)) + for(var/datum/asset/asset in src_object.ui_assets(user)) + flush_queue |= window.send_asset(asset) + if (flush_queue) + user.client.browse_queue_flush() + /** * public * diff --git a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm b/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm index 83e9faed063..c4d51757d0b 100644 --- a/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm +++ b/modular_skyrat/modules/contractor/code/datums/contractor_tablet.dm @@ -136,7 +136,7 @@ if (uplink_computer?.opfor_data) var/datum/opposing_force/opfor_data = uplink_computer.opfor_data - data += get_header_data() + data += list() if (opfor_data.contractor_hub.current_contract) data["ongoing_contract"] = TRUE diff --git a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm b/modular_skyrat/modules/lorecaster/code/archive_viewer.dm index c428c3af2e3..1594444c843 100644 --- a/modular_skyrat/modules/lorecaster/code/archive_viewer.dm +++ b/modular_skyrat/modules/lorecaster/code/archive_viewer.dm @@ -18,7 +18,7 @@ story_list = generate_stories() /datum/computer_file/program/news_archive/ui_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() return data /datum/computer_file/program/news_archive/ui_static_data(mob/user) diff --git a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm b/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm index d2603d25925..a5bf8eaacb6 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsoft_catalog.dm @@ -36,7 +36,7 @@ GLOBAL_LIST_INIT(purchasable_nifsofts, list( return data /datum/computer_file/program/nifsoft_downloader/ui_static_data(mob/user) - var/list/data = get_header_data() + var/list/data = list() var/list/product_list = list() var/mob/living/carbon/human/nif_user = user diff --git a/tgui/packages/tgui/interfaces/NtosMain.js b/tgui/packages/tgui/interfaces/NtosMain.js index 472f2d153d0..8debe5d93be 100644 --- a/tgui/packages/tgui/interfaces/NtosMain.js +++ b/tgui/packages/tgui/interfaces/NtosMain.js @@ -78,14 +78,14 @@ export const NtosMain = (props, context) => { selected={light_on} onClick={() => act('PC_toggle_light')} /> -