From 1e4d745ef3755778f1dccbaccc1f20743efeef07 Mon Sep 17 00:00:00 2001 From: Pinta <68373373+softcerv@users.noreply.github.com> Date: Wed, 4 Oct 2023 02:34:20 -0400 Subject: [PATCH] [MODULAR] NIFSofts with TGUI now match the TGUI theme of the NIF (#24036) * wew * Update modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> * Just fixing this Prettier complaint for you --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- .../modules/modular_implants/code/nifs_tgui.dm | 2 ++ .../modules/modular_implants/code/nifsofts.dm | 12 ++++++++++++ .../modular_implants/code/nifsofts/soul_poem.dm | 1 + .../modular_implants/code/nifsofts/soulcatcher.dm | 11 +++++++++++ .../code/soulcatcher/soulcatcher_component.dm | 2 ++ .../code/soulcatcher/soulcatcher_tgui.dm | 1 + tgui/packages/tgui/interfaces/NifSoulPoem.js | 3 ++- tgui/packages/tgui/interfaces/Soulcatcher.js | 3 ++- 8 files changed, 33 insertions(+), 2 deletions(-) diff --git a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm b/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm index 6da74c6b89f..dfc9916ab83 100644 --- a/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm +++ b/modular_skyrat/modules/modular_implants/code/nifs_tgui.dm @@ -121,6 +121,8 @@ return FALSE current_theme = target_theme + for(var/datum/nifsoft/installed_nifsoft as anything in loaded_nifsofts) + installed_nifsoft.update_theme() if("activate_nifsoft") var/datum/nifsoft/activated_nifsoft = locate(params["activated_nifsoft"]) in loaded_nifsofts diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts.dm b/modular_skyrat/modules/modular_implants/code/nifsofts.dm index 1bf551866f5..ddbff9cf86e 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts.dm @@ -18,6 +18,8 @@ var/buying_category = NIFSOFT_CATEGORY_GENERAL ///What font awesome icon is shown next to the name of the nifsoft? var/ui_icon = "floppy-disk" + ///What UI theme do we want to display to users if this NIFSoft has TGUI? + var/ui_theme = "default" ///Can the program be installed with other instances of itself? var/single_install = TRUE @@ -67,6 +69,7 @@ qdel(src) load_persistence_data() + update_theme() /datum/nifsoft/Destroy() if(active) @@ -148,6 +151,15 @@ /datum/nifsoft/ui_state(mob/user) return GLOB.conscious_state +/// Updates the theme of the NIFSoft to match the parent NIF +/datum/nifsoft/proc/update_theme() + var/obj/item/organ/internal/cyberimp/brain/nif/target_nif = parent_nif.resolve() + if(!target_nif) + return FALSE + + ui_theme = target_nif.current_theme + return TRUE + /// A disk that can upload NIFSofts to a recpient with a NIFSoft installed. /obj/item/disk/nifsoft_uploader name = "Generic NIFSoft datadisk" diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm index 4dc4434d59d..093e9e566b7 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soul_poem.dm @@ -166,6 +166,7 @@ var/list/data = list() data["messages"] = message_list + data["theme"] = ui_theme data["receiving_data"] = receiving_data data["transmitting_data"] = transmitting_data diff --git a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm index 019ff546edc..2ec95a411ef 100644 --- a/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm +++ b/modular_skyrat/modules/modular_implants/code/nifsofts/soulcatcher.dm @@ -94,6 +94,17 @@ persistence.nif_soulcatcher_rooms = list2params(room_list) return TRUE +/datum/nifsoft/soulcatcher/update_theme() + . = ..() + if(!.) + return FALSE // uhoh + + var/datum/component/soulcatcher/current_soulcatcher = linked_soulcatcher.resolve() + if(!istype(current_soulcatcher)) + stack_trace("[src] ([REF(src)]) tried to update its theme when it was missing a linked_soulcatcher component!") + return FALSE + current_soulcatcher.ui_theme = ui_theme + /datum/modular_persistence ///A param string containing soulcatcher rooms var/nif_soulcatcher_rooms = "" diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm index 03512b2c205..88cca7817a2 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_component.dm @@ -18,6 +18,8 @@ GLOBAL_LIST_EMPTY(soulcatchers) var/list/soulcatcher_rooms = list() /// What soulcatcher room are verbs sending messages to? var/datum/soulcatcher_room/targeted_soulcatcher_room + /// What theme are we using for our soulcatcher UI? + var/ui_theme = "default" /// Are ghosts currently able to join this soulcatcher? var/ghost_joinable = TRUE diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm index 0c1d11c272e..5dbd31631ec 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_tgui.dm @@ -13,6 +13,7 @@ data["ghost_joinable"] = ghost_joinable data["require_approval"] = require_approval + data["theme"] = ui_theme data["communicate_as_parent"] = communicate_as_parent data["current_soul_count"] = length(get_current_souls()) data["max_souls"] = max_souls diff --git a/tgui/packages/tgui/interfaces/NifSoulPoem.js b/tgui/packages/tgui/interfaces/NifSoulPoem.js index f815f9287f8..9ced2081865 100644 --- a/tgui/packages/tgui/interfaces/NifSoulPoem.js +++ b/tgui/packages/tgui/interfaces/NifSoulPoem.js @@ -10,9 +10,10 @@ export const NifSoulPoem = (props, context) => { messages = [], receiving_data, transmitting_data, + theme, } = data; return ( - +
{messages.map((message) => ( diff --git a/tgui/packages/tgui/interfaces/Soulcatcher.js b/tgui/packages/tgui/interfaces/Soulcatcher.js index f91f5fabef8..0c8c4f6e66b 100644 --- a/tgui/packages/tgui/interfaces/Soulcatcher.js +++ b/tgui/packages/tgui/interfaces/Soulcatcher.js @@ -12,10 +12,11 @@ export const Soulcatcher = (props, context) => { max_souls, removable, communicate_as_parent, + theme, } = data; return ( - + {current_rooms.map((room) => (