From 5b8ee570ea4e3d7ce98a4469e45ca6ce92dbb78a Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 9 Apr 2022 21:31:40 -0400 Subject: [PATCH] Refactors Newscaster cartridge to tablet app (#66035) --- code/__DEFINES/devices.dm | 15 ++--- .../newscaster/newscaster_machine.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 - .../objects/items/devices/PDA/PDA_types.dm | 1 - code/game/objects/items/devices/PDA/cart.dm | 55 +--------------- code/modules/admin/verbs/admin_newscaster.dm | 2 +- code/modules/jobs/job_types/curator.dm | 1 + .../computers/item/tablet_presets.dm | 5 ++ .../file_system/programs/newscasterapp.dm | 37 +++++++++++ tgstation.dme | 1 + tgui/packages/tgui/interfaces/Newscaster.js | 63 +++++++++---------- .../tgui/interfaces/NtosNewscaster.js | 12 ++++ .../tgui/interfaces/PhysicalNewscaster.js | 14 +++++ 13 files changed, 108 insertions(+), 102 deletions(-) create mode 100644 code/modules/modular_computers/file_system/programs/newscasterapp.dm create mode 100644 tgui/packages/tgui/interfaces/NtosNewscaster.js create mode 100644 tgui/packages/tgui/interfaces/PhysicalNewscaster.js diff --git a/code/__DEFINES/devices.dm b/code/__DEFINES/devices.dm index de17154df5c..1a17c488d71 100644 --- a/code/__DEFINES/devices.dm +++ b/code/__DEFINES/devices.dm @@ -7,13 +7,12 @@ #define CART_CLOWN (1<<5) #define CART_MIME (1<<6) #define CART_REAGENT_SCANNER (1<<7) -#define CART_NEWSCASTER (1<<8) -#define CART_REMOTE_DOOR (1<<9) -#define CART_STATUS_DISPLAY (1<<10) -#define CART_QUARTERMASTER (1<<11) -#define CART_HYDROPONICS (1<<12) -#define CART_DRONEPHONE (1<<13) -#define CART_DRONEACCESS (1<<14) +#define CART_REMOTE_DOOR (1<<8) +#define CART_STATUS_DISPLAY (1<<9) +#define CART_QUARTERMASTER (1<<10) +#define CART_HYDROPONICS (1<<11) +#define CART_DRONEPHONE (1<<12) +#define CART_DRONEACCESS (1<<13) /// PDA ui menu defines #define PDA_UI_HUB 0 @@ -40,8 +39,6 @@ #define PDA_UI_BOTS_ACCESS 48 #define PDA_UI_EMOJI_GUIDE 49 #define PDA_UI_SIGNALER 50 -#define PDA_UI_NEWSCASTER 51 -#define PDA_UI_NEWSCASTER_ERROR 52 // Used by PDA and cartridge code to reduce repetitiveness of spritesheets diff --git a/code/game/machinery/newscaster/newscaster_machine.dm b/code/game/machinery/newscaster/newscaster_machine.dm index c7c3f04a8b6..d0bc740c304 100644 --- a/code/game/machinery/newscaster/newscaster_machine.dm +++ b/code/game/machinery/newscaster/newscaster_machine.dm @@ -105,7 +105,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/newscaster, 30) . = ..() ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "Newscaster", name) + ui = new(user, src, "PhysicalNewscaster", name) ui.open() alert = FALSE //We're checking our messages! update_icon() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 7feee44b75c..62a7c09e324 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -346,8 +346,6 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • [PDAIMG(emoji)]Emoji Guidebook
  • " if (istype(cartridge.radio)) dat += "
  • [PDAIMG(signaler)]Signaler System
  • " - if (cartridge.access & CART_NEWSCASTER) - dat += "
  • [PDAIMG(notes)]Newscaster Access
  • " if (cartridge.access & CART_REAGENT_SCANNER) dat += "
  • [PDAIMG(reagent)][scanmode == 3 ? "Disable" : "Enable"] Reagent Scanner
  • " if (cartridge.access & CART_ATMOS) diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index f64e650eeaf..e4db41d2841 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -217,7 +217,6 @@ icon_alert = "pda-r-library" icon_pai = "pai_overlay_library" icon_inactive_pai = "pai_off_overlay_library" - default_cartridge = /obj/item/cartridge/curator insert_type = /obj/item/pen/fountain desc = "A portable microcomputer by Thinktronic Systems, LTD. This model is a WGW-11 series e-reader." note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!" diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 324d2889ca3..cbd3b856b36 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -92,11 +92,6 @@ access = CART_SECURITY spam_enabled = 1 -/obj/item/cartridge/curator - name = "\improper Lib-Tweet cartridge" - icon_state = "cart-s" - access = CART_NEWSCASTER - /obj/item/cartridge/roboticist name = "\improper B.O.O.P. Remote Control cartridge" desc = "Packed with heavy duty quad-bot interlink!" @@ -140,7 +135,7 @@ /obj/item/cartridge/hop name = "\improper HumanResources9001 cartridge" icon_state = "cart-h" - access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY | CART_NEWSCASTER | CART_QUARTERMASTER | CART_DRONEPHONE + access = CART_MANIFEST | CART_STATUS_DISPLAY | CART_SECURITY | CART_QUARTERMASTER | CART_DRONEPHONE bot_access = list( MULE_BOT, CLEAN_BOT, @@ -476,28 +471,6 @@ menu += "No ore silo detected!" menu = jointext(menu, "") - if (PDA_UI_NEWSCASTER) - menu = "

    [PDAIMG(notes)] Newscaster Access

    " - menu += "
    Current Newsfeed: [current_channel ? current_channel : "None"]
    " - var/datum/feed_channel/current - for(var/datum/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(!current) - menu += "
    ERROR : NO CHANNEL FOUND
    " - return menu - var/i = 1 - for(var/datum/feed_message/msg in current.messages) - menu +="-[msg.return_body(-1)]
    \[Story by [msg.return_author(-1)]\]
    " - menu +="[msg.comments.len] comment[msg.comments.len > 1 ? "s" : ""]
    " - if(msg.img) - user << browse_rsc(msg.img, "tmp_photo[i].png") - menu +="
    " - i++ - for(var/datum/feed_comment/comment in msg.comments) - menu +="[comment.body]
    [comment.author] [comment.time_stamp]
    " - menu += "
    Post Message" - if (PDA_UI_BOTS_ACCESS) menu = "

    [PDAIMG(medbot)] Bots Interlink

    " bot_control() @@ -517,9 +490,6 @@ menu += "
    To use an emoji in a pda message, refer to the guide and add \":\" around the emoji. Your PDA supports the following emoji:
    " menu += emoji_table - if (PDA_UI_NEWSCASTER_ERROR) //Newscaster message permission error - menu = "
    ERROR : NOT AUTHORIZED [host_pda.id ? "" : "- ID SLOT EMPTY"]
    " - return menu /obj/item/cartridge/Topic(href, href_list) @@ -582,29 +552,6 @@ if("Supply Orders") host_pda.ui_mode = PDA_UI_SUPPLY_RECORDS - if("Newscaster Access") - host_pda.ui_mode = PDA_UI_NEWSCASTER - - if("Newscaster Message") - var/host_pda_owner_name = host_pda.id ? "[host_pda.id.registered_name] ([host_pda.id.assignment])" : "Unknown" - var/message = host_pda.msg_input() - var/datum/feed_channel/current - for(var/datum/feed_channel/chan in GLOB.news_network.network_channels) - if (chan.channel_name == current_channel) - current = chan - if(current.locked && current.author != host_pda_owner_name) - host_pda.ui_mode = PDA_UI_NEWSCASTER_ERROR - host_pda.Topic(null,list("choice"="Refresh")) - return - GLOB.news_network.submit_article(message,host_pda.owner,current_channel) - host_pda.Topic(null,list("choice"=num2text(host_pda.ui_mode))) - return - - if("Newscaster Switch Channel") - current_channel = host_pda.msg_input() - host_pda.Topic(null,list("choice"=num2text(host_pda.ui_mode))) - return - //emoji previews if(href_list["emoji"]) var/parse = emoji_parse(":[href_list["emoji"]]:") diff --git a/code/modules/admin/verbs/admin_newscaster.dm b/code/modules/admin/verbs/admin_newscaster.dm index 921104ae5e9..5fe32960a7f 100644 --- a/code/modules/admin/verbs/admin_newscaster.dm +++ b/code/modules/admin/verbs/admin_newscaster.dm @@ -45,7 +45,7 @@ /datum/newspanel/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "Newscaster") + ui = new(user, src, "PhysicalNewscaster") ui.open() /datum/newspanel/ui_static_data(mob/user) diff --git a/code/modules/jobs/job_types/curator.dm b/code/modules/jobs/job_types/curator.dm index 599daa2d672..4b00fab0e5d 100644 --- a/code/modules/jobs/job_types/curator.dm +++ b/code/modules/jobs/job_types/curator.dm @@ -35,6 +35,7 @@ id_trim = /datum/id_trim/job/curator uniform = /obj/item/clothing/under/rank/civilian/curator backpack_contents = list( + /obj/item/modular_computer/tablet/preset/advanced/curator = 1, /obj/item/barcodescanner = 1, /obj/item/choice_beacon/hero = 1, ) diff --git a/code/modules/modular_computers/computers/item/tablet_presets.dm b/code/modules/modular_computers/computers/item/tablet_presets.dm index 2fb140be35d..bbde8533364 100644 --- a/code/modules/modular_computers/computers/item/tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/tablet_presets.dm @@ -64,6 +64,11 @@ var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive") hard_drive.store_file(new /datum/computer_file/program/radar/custodial_locator) +/obj/item/modular_computer/tablet/preset/advanced/curator/Initialize(mapload) + . = ..() + var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive") + hard_drive.store_file(new /datum/computer_file/program/newscaster) + /obj/item/modular_computer/tablet/preset/advanced/engineering/Initialize(mapload) . = ..() var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive") diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm new file mode 100644 index 00000000000..dd3fcb8d5fe --- /dev/null +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -0,0 +1,37 @@ +/datum/computer_file/program/newscaster + filename = "newscasterapp" + filedesc = "Newscaster" + required_access = list(ACCESS_LIBRARY) + category = PROGRAM_CATEGORY_CREW + program_icon_state = "computer" + extended_desc = "This program allows any user to access the Newscaster network from anywhere." + size = 2 + requires_ntnet = TRUE + available_on_ntnet = TRUE + tgui_id = "NtosNewscaster" + program_icon = "newspaper" + ///The UI we use for the newscaster + var/obj/machinery/newscaster/newscaster_ui + +/datum/computer_file/program/newscaster/New() + newscaster_ui = new() + return ..() + +/datum/computer_file/program/newscaster/Destroy() + QDEL_NULL(newscaster_ui) + return ..() + +/datum/computer_file/program/newscaster/ui_data(mob/user) + var/list/data = get_header_data() + data += newscaster_ui.ui_data(user) + return data + +/datum/computer_file/program/newscaster/ui_static_data(mob/user) + var/list/data = newscaster_ui.ui_static_data(user) + return data + +/datum/computer_file/program/newscaster/ui_act(action, params, datum/tgui/ui) + . = ..() + if(.) + return + return newscaster_ui.ui_act(action, params, ui) diff --git a/tgstation.dme b/tgstation.dme index de4055ae3b2..c1ce38d6f07 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3512,6 +3512,7 @@ #include "code\modules\modular_computers\file_system\programs\crewmanifest.dm" #include "code\modules\modular_computers\file_system\programs\file_browser.dm" #include "code\modules\modular_computers\file_system\programs\jobmanagement.dm" +#include "code\modules\modular_computers\file_system\programs\newscasterapp.dm" #include "code\modules\modular_computers\file_system\programs\ntdownloader.dm" #include "code\modules\modular_computers\file_system\programs\ntmonitor.dm" #include "code\modules\modular_computers\file_system\programs\ntnrc_client.dm" diff --git a/tgui/packages/tgui/interfaces/Newscaster.js b/tgui/packages/tgui/interfaces/Newscaster.js index b279b8ead9f..d94a1641e36 100644 --- a/tgui/packages/tgui/interfaces/Newscaster.js +++ b/tgui/packages/tgui/interfaces/Newscaster.js @@ -10,7 +10,6 @@ import { useBackend, useSharedState, useLocalState } from '../backend'; import { BountyBoardContent } from './BountyBoard'; import { UserDetails } from './Vending'; import { BlockQuote, Box, Button, Divider, LabeledList, Modal, Section, Stack, Tabs, TextArea } from '../components'; -import { Window } from '../layouts'; import { marked } from 'marked'; import { sanitizeText } from "../sanitize"; @@ -23,41 +22,37 @@ export const Newscaster = (props, context) => { const BOUNTYBOARD_SCREEN = 2; const [screenmode, setScreenmode] = useSharedState(context, 'tab_main', NEWSCASTER_SCREEN); return ( - + <> - - - - - - setScreenmode(NEWSCASTER_SCREEN)}> - Newscaster - - setScreenmode(BOUNTYBOARD_SCREEN)}> - Bounty Board - - - - - {screenmode === NEWSCASTER_SCREEN && ( - - )} - {screenmode === BOUNTYBOARD_SCREEN && ( - - )} - - - - + + + + + setScreenmode(NEWSCASTER_SCREEN)}> + Newscaster + + setScreenmode(BOUNTYBOARD_SCREEN)}> + Bounty Board + + + + + {screenmode === NEWSCASTER_SCREEN && ( + + )} + {screenmode === BOUNTYBOARD_SCREEN && ( + + )} + + + ); }; diff --git a/tgui/packages/tgui/interfaces/NtosNewscaster.js b/tgui/packages/tgui/interfaces/NtosNewscaster.js new file mode 100644 index 00000000000..3d21bc5463a --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosNewscaster.js @@ -0,0 +1,12 @@ +import { NtosWindow } from '../layouts'; +import { Newscaster } from './Newscaster'; + +export const NtosNewscaster = (props, context) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/PhysicalNewscaster.js b/tgui/packages/tgui/interfaces/PhysicalNewscaster.js new file mode 100644 index 00000000000..74d016e2a80 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PhysicalNewscaster.js @@ -0,0 +1,14 @@ +import { Newscaster } from "../interfaces/Newscaster"; +import { Window } from "../layouts"; + +export const PhysicalNewscaster = (props, context) => { + return ( + + + + + + ); +};