Upgrades the research console to TGUI and adds the material silo (#22987)

This updates the research console to be a TGUI and fixes several bugs
with it.
It now uses a material silo for materials, while the acid for the
circuit imprinter is still given directly to the machine.
Mech fabricators now also need to be linked to a research console.
It is also capable of connecting to multiple fabricators and distribute
tasks between them.

The sprite originates from TG station.

Unit tests were also made to ensure there is no fabricators missing
consoles and no console missing material silos.

<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/b2076036-18e5-4518-9af1-3ac3698b3924"
/>
<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/e954e1e4-cf2d-4472-8386-10d8993ac375"
/>
<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/df690b93-c7ff-49a3-a1b3-002f6807981b"
/>
<img width="1200" height="800" alt="image"
src="https://github.com/user-attachments/assets/ff10ef88-e1d9-4b6f-9643-309d919a601f"
/>
This commit is contained in:
Casper3667
2026-08-06 09:34:34 +00:00
committed by GitHub
parent 42bba7fa3c
commit 2f5d7e8422
46 changed files with 3094 additions and 2026 deletions
+40
View File
@@ -495,5 +495,45 @@
return test_status
/datum/unit_test/map_test/research_fabricator_connections
name = "MAP: Research fabricator connections"
/datum/unit_test/map_test/research_fabricator_connections/start_test()
var/fabricator_count = 0
var/console_count = 0
var/fabricators_without_console = 0
var/consoles_without_silo = 0
var/test_status = UNIT_TEST_PASSED
for(var/obj/structure/machinery/r_n_d/fabricator/fabricator in world)
fabricator_count++
var/obj/structure/machinery/computer/rdconsole/nearby_console = locate() in range(7, fabricator)
if(nearby_console)
continue
fabricators_without_console++
TEST_FAIL("[fabricator.name] at ([fabricator.x], [fabricator.y], [fabricator.z]) in [get_area(fabricator)] has no research console within 7 turfs.")
for(var/obj/structure/machinery/computer/rdconsole/console in world)
if(QDELETED(console) || !is_station_level(console.z))
continue
console_count++
var/obj/structure/machinery/r_n_d/material_silo/nearby_silo = locate() in range(7, console)
if(nearby_silo)
continue
consoles_without_silo++
TEST_FAIL("[console.name] at ([console.x], [console.y], [console.z]) in [get_area(console)] has no material silo within 7 turfs.")
if(fabricators_without_console || consoles_without_silo)
test_status = TEST_FAIL("\[[fabricators_without_console] / [fabricator_count]\] research fabricators lacked a nearby research console. \[[consoles_without_silo] / [console_count]\] research consoles lacked a nearby material silo.")
else
TEST_PASS("All [fabricator_count] research fabricators had a nearby research console, and all [console_count] research consoles had a nearby material silo.")
return test_status
#undef SUCCESS
#undef FAILURE