Files
Yogstation/code/modules/research/nanites/nanite_program_hub.dm
kevinz000 bcf88a2064 Techwebs Backend Refactor - Removes references from techwebs and uses IDs instead (#40596)
Yeah yeah I know no opening too many WIP PRs but this one's [ready] and I want to make sure any furthur techweb development doesn't keep using the old reference system which will make refactoring it harder, and this makes it easier for coders to do stuff in theory (at least for me), standardizes getting a node/design, and makes stuff actually GC properly.
2018-10-05 19:51:10 +01:00

118 lines
3.6 KiB
Plaintext

/obj/machinery/nanite_program_hub
name = "nanite program hub"
desc = "Compiles nanite programs from the techweb servers and downloads them into disks."
icon = 'icons/obj/machines/research.dmi'
icon_state = "nanite_program_hub"
circuit = /obj/item/circuitboard/machine/nanite_program_hub
use_power = IDLE_POWER_USE
anchored = TRUE
density = TRUE
var/obj/item/disk/nanite_program/disk
var/datum/techweb/linked_techweb
var/current_category = "Main"
var/detail_view = FALSE
var/categories = list(
list(name = "Utility Nanites"),
list(name = "Medical Nanites"),
list(name = "Sensor Nanites"),
list(name = "Augmentation Nanites"),
list(name = "Suppression Nanites"),
list(name = "Weaponized Nanites")
)
/obj/machinery/nanite_program_hub/Initialize()
. = ..()
linked_techweb = SSresearch.science_tech
/obj/machinery/nanite_program_hub/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/disk/nanite_program))
var/obj/item/disk/nanite_program/N = I
if(disk)
eject(user)
if(user.transferItemToLoc(N, src))
to_chat(user, "<span class='notice'>You insert [N] into [src]</span>")
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
disk = N
else
..()
/obj/machinery/nanite_program_hub/proc/eject(mob/living/user)
if(!disk)
return
if(!istype(user) || !Adjacent(user) || !user.put_in_active_hand(disk))
disk.forceMove(drop_location())
disk = null
/obj/machinery/nanite_program_hub/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "nanite_program_hub", name, 500, 700, master_ui, state)
ui.set_autoupdate(FALSE) //to avoid making the whole program list every second
ui.open()
/obj/machinery/nanite_program_hub/ui_data()
var/list/data = list()
if(disk)
data["has_disk"] = TRUE
var/list/disk_data = list()
var/datum/nanite_program/P = disk.program
if(P)
data["has_program"] = TRUE
disk_data["name"] = P.name
disk_data["desc"] = P.desc
data["disk"] = disk_data
data["detail_view"] = detail_view
data["category"] = current_category
if(current_category != "Main")
var/list/program_list = list()
for(var/i in linked_techweb.researched_designs)
var/datum/design/nanites/D = SSresearch.techweb_design_by_id(i)
if(!istype(D))
continue
if(current_category in D.category)
var/list/program_design = list()
program_design["id"] = D.id
program_design["name"] = D.name
program_design["desc"] = D.desc
program_list += list(program_design)
data["program_list"] = program_list
else
data["categories"] = categories
return data
/obj/machinery/nanite_program_hub/ui_act(action, params)
if(..())
return
switch(action)
if("eject")
eject(usr)
. = TRUE
if("download")
if(!disk)
return
var/datum/design/nanites/downloaded = linked_techweb.isDesignResearchedID(params["program_id"]) //check if it's a valid design
if(!istype(downloaded))
return
if(disk.program)
qdel(disk.program)
disk.program = new downloaded.program_type
disk.name = "[initial(disk.name)] \[[disk.program.name]\]"
playsound(src, 'sound/machines/terminal_prompt.ogg', 25, 0)
. = TRUE
if("set_category")
var/new_category = params["category"]
current_category = new_category
. = TRUE
if("toggle_details")
detail_view = !detail_view
. = TRUE
if("clear")
if(disk && disk.program)
qdel(disk.program)
disk.program = null
disk.name = initial(disk.name)
. = TRUE