diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index df78fd5df8f..44037305dda 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -188,4 +188,4 @@ #define ui_mech_deco1_f "WEST+2:-7, SOUTH+8" #define ui_mech_deco2_f "WEST+2:-7, SOUTH+9" -#define ui_crafting "EAST-4:22,SOUTH:5" \ No newline at end of file +#define ui_smallquad "EAST-4:22,SOUTH:5" \ No newline at end of file diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 4ff5dadb7c0..9f39990afd9 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -504,4 +504,4 @@ name = "crafting menu" icon = 'icons/mob/screen/midnight.dmi' icon_state = "craft" - screen_loc = ui_crafting \ No newline at end of file + screen_loc = ui_smallquad \ No newline at end of file diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index b8a42321964..3f5e0b3344b 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -50,11 +50,11 @@ . += "tgui Window Mode: [(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
" . += "tgui Window Placement: [(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]
" if(can_select_ooc_color(user)) - . += "OOC Color:�" + . += "OOC Color:" if(pref.ooccolor == initial(pref.ooccolor)) . += "Using Default
" else - . += "[pref.ooccolor] [color_square(hex = pref.ooccolor)]�reset
" + . += "[pref.ooccolor] [color_square(hex = pref.ooccolor)]reset
" /datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["select_style"]) diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index 1fd3503d41c..aa2d1a99f59 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -102,9 +102,6 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Draw me yo. update_icon() - if(!our_statclick) - our_statclick = new(null, "Open", src) - //Destructor cleans up references /obj/item/device/nif/Destroy() human = null @@ -127,6 +124,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable human.nif = src stat = NIF_INSTALLING H.verbs |= /mob/living/carbon/human/proc/set_nif_examine + menu = H.AddComponent(/datum/component/nif_menu) if(starting_software) for(var/path in starting_software) new path(src) @@ -169,6 +167,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable stat = NIF_PREINSTALL vis_update() H.verbs -= /mob/living/carbon/human/proc/set_nif_examine + qdel_null(menu) H.nif = null human = null install_done = null diff --git a/code/modules/nifsoft/nif_statpanel.dm b/code/modules/nifsoft/nif_statpanel.dm deleted file mode 100644 index 00e928429fb..00000000000 --- a/code/modules/nifsoft/nif_statpanel.dm +++ /dev/null @@ -1,79 +0,0 @@ -/mob/living/carbon/human/Stat() - . = ..() - if(nif && statpanel("NIF")) - SetupNifStat() - -/mob/living/carbon/human/proc/SetupNifStat() - var/nif_status = "" - var/nif_percent = round((nif.durability/initial(nif.durability))*100) - switch(nif.stat) - if(NIF_WORKING) - if(nif_percent < 20) - nif_status = "Service Needed Soon" - else - nif_status = "Operating Normally" - if(NIF_POWFAIL) - nif_status = "Insufficient Energy!" - if(NIF_TEMPFAIL) - nif_status = "System Failure!" - if(NIF_INSTALLING) - nif_status = "Adapting To User" - else - nif_status = "Unknown - Error" - nif_status += " (Condition: [nif_percent]%)" - stat("NIF Status", nif_status) - stat("UI", nif.our_statclick) // TGUI Hook - - if(nif.stat == NIF_WORKING) - stat("- Modules -", "LMB: Toggle, Shift+LMB: Info/Uninstall") - for(var/nifsoft in nif.nifsofts) - if(!nifsoft) continue - var/datum/nifsoft/NS = nifsoft - var/obj/effect/nif_stat/stat_line = NS.stat_line - stat("[stat_line.nifsoft_name]",stat_line.atom_button_text()) - -/////////////////// -// Stat Line Object -/obj/effect/nif_stat - name = "" - var/nifsoft_name //Prevents deeper lookups, and the name won't change - var/datum/nifsoft/nifsoft //Reference to our nifsoft - var/toggleable = FALSE //Won't change, prevents looking it up deeper - -/obj/effect/nif_stat/New(var/datum/nifsoft/new_soft) - ..() - nifsoft = new_soft - nifsoft_name = new_soft.name - name = new_soft.name - -/obj/effect/nif_stat/Destroy() - nifsoft = null - return ..() - -/obj/effect/nif_stat/proc/atom_button_text() - name = nifsoft.stat_text() - return src - -/obj/effect/nif_stat/Click(var/location, var/control, var/params) - if(usr != nifsoft.nif.human) return - - var/list/clickprops = params2list(params) - var/opts = clickprops["shift"] - - if(opts) - var/choice = alert("Select an option","[nifsoft_name]","Display Info","Cancel","Uninstall") - switch(choice) - if("Display Info") - nifsoft.nif.notify("[nifsoft_name]: [nifsoft.desc] - It consumes [nifsoft.p_drain] energy units \ - while installed, and [nifsoft.a_drain] additionally while active. It is [nifsoft.illegal ? "NOT " : ""]\ - a legal software package. The MSRP of the package is [nifsoft.cost] Thalers. The difficulty to construct \ - the associated implant is Rating [nifsoft.wear].") - if("Uninstall") - var/confirm = alert("Really uninstall [nifsoft_name]?","Are you sure?","Cancel","Uninstall","Cancel") - if(confirm == "Uninstall") - nifsoft.uninstall() - else if(nifsoft.activates) - if(nifsoft.active) - nifsoft.deactivate() - else - nifsoft.activate() diff --git a/code/modules/nifsoft/nif_tgui.dm b/code/modules/nifsoft/nif_tgui.dm index 23d8102f793..b3d3aa00a7a 100644 --- a/code/modules/nifsoft/nif_tgui.dm +++ b/code/modules/nifsoft/nif_tgui.dm @@ -15,15 +15,75 @@ "retro", "syndicate" ) - var/tmp/obj/effect/statclick/nif_open/our_statclick var/tmp/last_notification + var/tmp/datum/component/nif_menu/menu /** - * Special stat button for the interface + * Small helper component to manage the HUD icon */ -/obj/effect/statclick/nif_open -/obj/effect/statclick/nif_open/Click(location, control, params) - var/obj/item/device/nif/N = target +/datum/component/nif_menu + var/obj/screen/nif/screen_icon + +/datum/component/nif_menu/Initialize() + if(!ismob(parent)) + return COMPONENT_INCOMPATIBLE + . = ..() + +/datum/component/nif_menu/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_MOB_CLIENT_LOGIN, .proc/create_mob_button) + var/mob/owner = parent + if(owner.client) + create_mob_button(parent) + +/datum/component/nif_menu/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_MOB_CLIENT_LOGIN) + if(ismob(parent)) + var/mob/owner = parent + if(screen_icon) + owner?.client?.screen -= screen_icon + UnregisterSignal(screen_icon, COMSIG_CLICK) + qdel_null(screen_icon) + if(ishuman(parent)) + owner.verbs -= /mob/living/carbon/human/proc/nif_menu + + +/datum/component/nif_menu/proc/create_mob_button(mob/user) + var/datum/hud/HUD = user.hud_used + if(!screen_icon) + screen_icon = new() + screen_icon.icon = HUD.ui_style + HUD.other += screen_icon + user.client?.screen += screen_icon + + user.verbs |= /mob/living/carbon/human/proc/nif_menu + + RegisterSignal(screen_icon, COMSIG_CLICK, .proc/nif_menu_click) + +/datum/component/nif_menu/proc/nif_menu_click(atom/movable/screen/nif/image, location, control, params, user) + var/mob/living/carbon/human/H = user + if(istype(H) && H.nif) + INVOKE_ASYNC(H.nif, .proc/tgui_interact, user) + +/** + * Screen object for NIF menu access + */ +/obj/screen/nif + name = "nif menu" + icon = 'icons/mob/screen/midnight.dmi' + icon_state = "nif" + screen_loc = ui_smallquad + +/** + * Verb to open the interface + */ +/mob/living/carbon/human/proc/nif_menu() + set name = "NIF Menu" + set category = "IC" + set desc = "Open the NIF user interface." + + var/obj/item/device/nif/N = nif if(istype(N)) N.tgui_interact(usr) @@ -111,4 +171,4 @@ return TRUE if("dismissNotification") last_notification = null - return TRUE \ No newline at end of file + return TRUE diff --git a/code/modules/nifsoft/nifsoft.dm b/code/modules/nifsoft/nifsoft.dm index ca1d0199a69..951e2932183 100644 --- a/code/modules/nifsoft/nifsoft.dm +++ b/code/modules/nifsoft/nifsoft.dm @@ -39,15 +39,11 @@ var/list/incompatible_with = null // List of NIFSofts that are disabled when this one is enabled - var/obj/effect/nif_stat/stat_line // The stat line in the statpanel for this NIFSoft - - //Constructor accepts the NIF it's being loaded into /datum/nifsoft/New(var/obj/item/device/nif/nif_load) ASSERT(nif_load) nif = nif_load - stat_line = new(src) if(!install(nif)) qdel(src) @@ -56,7 +52,6 @@ if(nif) uninstall() nif = null - QDEL_NULL(stat_line) return ..() //Called when the software is installed in the NIF @@ -138,7 +133,7 @@ /datum/nifsoft/proc/disk_install(var/mob/living/carbon/human/target,var/mob/living/carbon/human/user) return TRUE -//Stat-line clickable text +//Status text for menu /datum/nifsoft/proc/stat_text() if(activates) return "[active ? "Active" : "Disabled"]" diff --git a/icons/mob/screen/holo.dmi b/icons/mob/screen/holo.dmi index a0fff5d7819..8acd77b9b26 100644 Binary files a/icons/mob/screen/holo.dmi and b/icons/mob/screen/holo.dmi differ diff --git a/icons/mob/screen/midnight.dmi b/icons/mob/screen/midnight.dmi index b1f37cb2239..db6197abd9e 100644 Binary files a/icons/mob/screen/midnight.dmi and b/icons/mob/screen/midnight.dmi differ diff --git a/icons/mob/screen/minimalist.dmi b/icons/mob/screen/minimalist.dmi index a60c9b196ae..48ff4008640 100644 Binary files a/icons/mob/screen/minimalist.dmi and b/icons/mob/screen/minimalist.dmi differ diff --git a/icons/mob/screen/old-noborder.dmi b/icons/mob/screen/old-noborder.dmi index ddc72353ee3..b11c0b0d529 100644 Binary files a/icons/mob/screen/old-noborder.dmi and b/icons/mob/screen/old-noborder.dmi differ diff --git a/icons/mob/screen/old.dmi b/icons/mob/screen/old.dmi index f165b01b5bf..93d51e042a4 100644 Binary files a/icons/mob/screen/old.dmi and b/icons/mob/screen/old.dmi differ diff --git a/icons/mob/screen/orange.dmi b/icons/mob/screen/orange.dmi index d0b52d10d4a..c50d41b49b5 100644 Binary files a/icons/mob/screen/orange.dmi and b/icons/mob/screen/orange.dmi differ diff --git a/icons/mob/screen/white.dmi b/icons/mob/screen/white.dmi index 0a1a31bc31e..cf232ae5c36 100644 Binary files a/icons/mob/screen/white.dmi and b/icons/mob/screen/white.dmi differ diff --git a/vorestation.dme b/vorestation.dme index b883ec6234e..aac8ba93e52 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3157,7 +3157,6 @@ #include "code\modules\news\newspaper_layout.dm" #include "code\modules\nifsoft\nif.dm" #include "code\modules\nifsoft\nif_softshop.dm" -#include "code\modules\nifsoft\nif_statpanel.dm" #include "code\modules\nifsoft\nif_tgui.dm" #include "code\modules\nifsoft\nifsoft.dm" #include "code\modules\nifsoft\software\01_vision.dm"