mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 00:22:12 +00:00
* tgui the beginning * binaries and the like * Bring in the last of it * Example radio UI * delete example * NTOS Main Menu, start on manifest, tgui states * tasks.json * gunnery ui pt 1 * okay * fix everything * scss update * oops * manifest gigablast * downloader part 1 * download prt 2 * NTOSDownloader final * mfw committing to_worlds * gunnery console pt2 * i cooked * targeting (finished) * one vueui down * voting ui almost done * MY MIND FEELS LIKE AN ARCH ENEMYYYY * voting ui down * photocopier * ntos config + download fixes * photocopier 2 * refactor define * NTOS client manager + fixes * fax machine final (it also uses toner now) * marching forwards... left behind... * ntnrc part 1 * canister * add quotes * portable pumps pt1 + more backgrounds * oops * finish the portable pump * freezers so I'll keep on pushing forward... you haven't seen the last of me... oooooooh... * doors ui pt1 * finish doors UI (forgive me wildkins it's a bit of shitcode) * vitals monitor, make things use labeled lists, new backgrounds * mais j'envoyé aucun mayday... * maglock pt1 * pour ça je me suis perdu... * infrared * fix that * prox sensor pt1 * prox sensor * signaler (this was actually pretty hard) * atmos control pt1 * atmos control pt1.1 * atmos pt 2 * fuel injector * multitool UI * jammer * list viewer * APC * portgen * targeting console updates + SMES ui * new themes, shield generator * supermatter * Add ore detector and (shitty) NTNet Relay * orderterminal pt1 * orderterminal pt2 * smartfridge * Add (air-)tank GUI update ore detector size * Adds Transfer Valves * Add AtmoScrubber * analyzer pt1 * weapons analyzer pt2 * bodyscanner pt1 * bodyscanner pt2 * fix this shitcode * seed storage * appearance changer * appearance changer final * sleeper pt1 * sleeper * gps * vehicles * chem dispenser * lily request * holopad * tgui modules pt1 * ppanel * damage menu * fixes * im here too now * follow menu, search bars * quikpay * quikpay fixes * circuit printer * ppanel * ppanel updates * pai * turret controls (i want to kill myself) * tweak * remove the boardgame * guntracker * implant tracker * penal mechs come close to me, come close to me * chem codex * pai radio * doorjack * pai directives * signaler removal, sensors * ghost spawner * spawnpoint * fixes * teleporter * one more to the chopping block * account database * remove divider * scanner, atmos * latejoin ui pt1 * latejoin * records pt1 * RECORDS UI DONE * delete interpreter & records * CHAT FUCKING CLIENT * data updates * fix some things * final UI, log * basic nanoui fix * antag panel * remove vueui * atm update * vending update * warrants, cameras * ntmonitor * time comes for all * preserve this legacy * bring that back (oops) * rcon, ui auto update for computer UIs, remove rcon computers * alarm monitoring (a bit broke and also todo: add custom alarm monitoring programs to a few consoles) * A LIKE SUPREME * a * power monitor * lights on * fuck this code, fuck nanoui modules, and fuck nanoui * LEAVE IT OH SO FAR BEHIND * fix alarm monitoring for synths * I SAW IN YOU WHAT LIFE WAS MISSING * comms console * idcard and record updates * turn the light on * arcade * pt2 * news browser * static * crusher * f * COULD I JUST SLEIGH THE GOLD FROM THE BALLS? I'M SO FRUSTRATED OH COULD YOU TELL? IF I HEAR ONE MORE VUEUI OR ONE NANOUI I'M GONNA LOSE IT SO LET ME GOOOOOOOOOOOOOOOOO * codeowners & suit sensors * html ui style removal * make lint happy * resist and disorder * i slowly get up and turn off the noise, already fed up... * pleaseeeeeeeeeeeeeee * THE CREDIT LARP IS NECESSARY * i hold the keys * RISE UP * fix that? * harry's suggestions xoxo * runtime fix pt2 * You are the only thing that I still care about * adds build workflow * Update update_tgui.yml * adds some needed steps * ATM * misc fixes and tweaks * fixes 2 * make newscasters usable and fix use power on freezers * turret control is clearer --------- Co-authored-by: John Wildkins <john.wildkins@gmail.com> Co-authored-by: Matt Atlas <liermattia@gmail.com> Co-authored-by: harryob <55142896+harryob@users.noreply.github.com> Co-authored-by: Werner <Arrow768@users.noreply.github.com> Co-authored-by: Geeves <ggrobler447@gmail.com> Co-authored-by: harryob <me@harryob.live>
256 lines
8.0 KiB
Plaintext
256 lines
8.0 KiB
Plaintext
var/datum/controller/subsystem/processing/nanoui/SSnanoui
|
|
|
|
/datum/controller/subsystem/processing/nanoui
|
|
// Subsystem stuff.
|
|
name = "NanoUI"
|
|
flags = SS_NO_INIT
|
|
priority = SS_PRIORITY_NANOUI
|
|
stat_tag = "A"
|
|
|
|
// NanoUI stuff.
|
|
var/list/open_uis = list()
|
|
|
|
/datum/controller/subsystem/processing/nanoui/New()
|
|
NEW_SS_GLOBAL(SSnanoui)
|
|
|
|
/**
|
|
* Get an open /nanoui ui for the current user, src_object and ui_key and try to update it with data
|
|
*
|
|
* @param user /mob The mob who opened/owns the ui
|
|
* @param src_object /obj|/mob The obj or mob which the ui belongs to
|
|
* @param ui_key string A string key used for the ui
|
|
* @param ui /datum/nanoui An existing instance of the ui (can be null)
|
|
* @param data list The data to be passed to the ui, if it exists
|
|
* @param force_open boolean The ui is being forced to (re)open, so close ui if it exists (instead of updating)
|
|
*
|
|
* @return /nanoui Returns the found ui, for null if none exists
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/try_update_ui(mob/user, src_object, ui_key, datum/nanoui/ui, data, force_open = FALSE)
|
|
if (!ui) // no ui has been passed, so we'll search for one
|
|
ui = get_open_ui(user, src_object, ui_key)
|
|
|
|
if (ui)
|
|
// The UI is already open
|
|
if (!force_open)
|
|
ui.push_data(data)
|
|
return ui
|
|
else
|
|
ui.reinitialise(new_initial_data=data)
|
|
return ui
|
|
|
|
return null
|
|
|
|
/**
|
|
* Get an open /nanoui ui for the current user, src_object and ui_key
|
|
*
|
|
* @param user /mob The mob who opened/owns the ui
|
|
* @param src_object /obj|/mob The obj or mob which the ui belongs to
|
|
* @param ui_key string A string key used for the ui
|
|
*
|
|
* @return /nanoui Returns the found ui, or null if none exists
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/get_open_ui(mob/user, src_object, ui_key)
|
|
var/src_object_key = SOFTREF(src_object)
|
|
if (!LAZYLEN(open_uis[src_object_key]) || !LAZYLEN(open_uis[src_object_key][ui_key]))
|
|
return null
|
|
|
|
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
|
|
if (ui.user == user)
|
|
return ui
|
|
|
|
//testing("nanomanager/get_open_ui mob [user.name] [src_object:name] [ui_key] - ui not found")
|
|
return null
|
|
|
|
/**
|
|
* Update all /nanoui uis attached to src_object
|
|
*
|
|
* @param src_object /obj|/mob The obj or mob which the uis are attached to
|
|
*
|
|
* @return int The number of uis updated
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/update_uis(src_object)
|
|
var/src_object_key = SOFTREF(src_object)
|
|
if (!LAZYLEN(open_uis[src_object_key]))
|
|
return 0
|
|
|
|
. = 0
|
|
var/list/obj_uis = open_uis[src_object_key]
|
|
for (var/ui_key in obj_uis)
|
|
for (var/thing in obj_uis[ui_key])
|
|
var/datum/nanoui/ui = thing
|
|
if(ui && ui.src_object && ui.user && ui.src_object.ui_host())
|
|
ui.process(1)
|
|
.++
|
|
|
|
/**
|
|
* Close all /nanoui uis attached to src_object
|
|
*
|
|
* @param src_object /obj|/mob The obj or mob which the uis are attached to
|
|
*
|
|
* @return int The number of uis close
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/close_uis(src_object)
|
|
var/src_object_key = SOFTREF(src_object)
|
|
if (!open_uis[src_object_key] || !islist(open_uis[src_object_key]))
|
|
return 0
|
|
|
|
. = 0
|
|
var/list/obj_uis = open_uis[src_object_key]
|
|
for (var/ui_key in obj_uis)
|
|
for (var/thing in obj_uis[ui_key])
|
|
var/datum/nanoui/ui = thing
|
|
if(ui && ui.src_object && ui.user && ui.src_object.ui_host())
|
|
ui.close()
|
|
.++
|
|
|
|
/**
|
|
* Update /nanoui uis belonging to user
|
|
*
|
|
* @param user /mob The mob who owns the uis
|
|
* @param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional)
|
|
* @param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional)
|
|
*
|
|
* @return int The number of uis updated
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/update_user_uis(mob/user, src_object, ui_key)
|
|
if (!LAZYLEN(user.open_uis))
|
|
return 0 // has no open uis
|
|
|
|
. = 0
|
|
for (var/thing in user.open_uis)
|
|
var/datum/nanoui/ui = thing
|
|
if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key))
|
|
ui.process(1)
|
|
.++
|
|
|
|
/datum/controller/subsystem/processing/nanoui/proc/close_user_uis(mob/user, src_object, ui_key)
|
|
if (!LAZYLEN(user.open_uis))
|
|
return 0
|
|
|
|
for (var/thing in user.open_uis)
|
|
var/datum/nanoui/ui = thing
|
|
if (NULL_OR_EQUAL(src_object, ui.src_object) && NULL_OR_EQUAL(ui_key, ui.ui_key))
|
|
ui.close()
|
|
.++
|
|
|
|
//testing("nanomanager/close_user_uis mob [user.name] closed [open_uis.len] of [.] uis")
|
|
|
|
/**
|
|
* Add a /nanoui ui to the list of open uis
|
|
* This is called by the /nanoui open() proc
|
|
*
|
|
* @param ui /nanoui The ui to add
|
|
*
|
|
* @return nothing
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/ui_opened(datum/nanoui/ui)
|
|
var/src_object_key = SOFTREF(ui.src_object)
|
|
LAZYINITLIST(open_uis[src_object_key])
|
|
|
|
LAZYADD(ui.user.open_uis, ui)
|
|
LAZYADD(open_uis[src_object_key][ui.ui_key], ui)
|
|
START_PROCESSING(SSnanoui, ui)
|
|
//testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
|
|
|
|
/**
|
|
* Remove a /nanoui ui from the list of open uis
|
|
* This is called by the /nanoui close() proc
|
|
*
|
|
* @param ui /nanoui The ui to remove
|
|
*
|
|
* @return int 0 if no ui was removed, 1 if removed successfully
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/ui_closed(datum/nanoui/ui)
|
|
var/src_object_key = SOFTREF(ui.src_object)
|
|
var/ui_key = ui.ui_key
|
|
var/list/obj_uis = open_uis[src_object_key]
|
|
|
|
if (!LAZYLEN(obj_uis) || !obj_uis[ui_key])
|
|
return 0 // Wasn't open.
|
|
|
|
STOP_PROCESSING(SSnanoui, ui)
|
|
if(ui.user) // Sanity check in case a user has been deleted (say a blown up borg watching the alarm interface)
|
|
LAZYREMOVE(ui.user.open_uis, ui)
|
|
|
|
obj_uis[ui_key] -= ui
|
|
|
|
if (!LAZYLEN(obj_uis[ui_key]))
|
|
obj_uis -= ui_key
|
|
|
|
if (!LAZYLEN(obj_uis))
|
|
open_uis -= src_object_key
|
|
|
|
//testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
|
|
|
|
return 1
|
|
|
|
/**
|
|
* This is called on user logout
|
|
* Closes/clears all uis attached to the user's /mob
|
|
*
|
|
* @param user /mob The user's mob
|
|
*
|
|
* @return nothing
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/user_logout(mob/user)
|
|
return close_user_uis(user)
|
|
|
|
/**
|
|
* This is called when a player transfers from one mob to another
|
|
* Transfers all open UIs to the new mob
|
|
*
|
|
* @param oldMob /mob The user's old mob
|
|
* @param newMob /mob The user's new mob
|
|
*
|
|
* @return nothing
|
|
*/
|
|
/datum/controller/subsystem/processing/nanoui/proc/user_transferred(mob/oldMob, mob/newMob)
|
|
//testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]")
|
|
if (!oldMob || !LAZYLEN(oldMob.open_uis) || !LAZYLEN(open_uis))
|
|
//testing("nanomanager/user_transferred mob [oldMob.name] has no open uis")
|
|
return 0 // has no open uis
|
|
|
|
for (var/thing in oldMob.open_uis)
|
|
var/datum/nanoui/ui = thing
|
|
ui.user = newMob
|
|
LAZYADD(newMob.open_uis, ui)
|
|
|
|
oldMob.open_uis = null
|
|
|
|
return 1 // success
|
|
|
|
/datum/asset/nanoui
|
|
var/list/common = list()
|
|
|
|
var/list/common_dirs = list(
|
|
"nano/css/",
|
|
"nano/js/",
|
|
"nano/images/",
|
|
"nano/images/status_icons/",
|
|
"nano/templates/"
|
|
)
|
|
var/list/uncommon_dirs = list()
|
|
|
|
/datum/asset/nanoui/register()
|
|
// Crawl the directories to find files.
|
|
for (var/path in common_dirs)
|
|
var/list/filenames = flist(path)
|
|
for(var/filename in filenames)
|
|
if(copytext(filename, length(filename)) != "/") // Ignore directories.
|
|
if(fexists(path + filename))
|
|
common[filename] = fcopy_rsc(path + filename)
|
|
SSassets.transport.register_asset(filename, common[filename])
|
|
for (var/path in uncommon_dirs)
|
|
var/list/filenames = flist(path)
|
|
for(var/filename in filenames)
|
|
if(copytext(filename, length(filename)) != "/") // Ignore directories.
|
|
if(fexists(path + filename))
|
|
SSassets.transport.register_asset(filename, fcopy_rsc(path + filename))
|
|
|
|
/datum/asset/nanoui/send(client, uncommon)
|
|
if(!islist(uncommon))
|
|
uncommon = list(uncommon)
|
|
|
|
SSassets.transport.send_assets(client, uncommon)
|
|
SSassets.transport.send_assets(client, common)
|