|
11 | 11 | req_access = list(access_robotics)
|
12 | 12 | circuit = /obj/item/circuitboard/mechfab
|
13 | 13 |
|
| 14 | + var/list/href_data |
| 15 | + var/topic_result |
| 16 | + |
14 | 17 | var/speed = 1
|
15 | 18 | var/mat_efficiency = 1
|
16 | 19 | materials = list(MAT_STEEL = 0, "glass" = 0, "plastic" = 0, MAT_GRAPHITE = 0, MAT_PLASTEEL = 0, "gold" = 0, "silver" = 0, MAT_LEAD = 0, "osmium" = 0, "diamond" = 0, MAT_DURASTEEL = 0, "phoron" = 0, "uranium" = 0, MAT_VERDANTIUM = 0, MAT_MORPHIUM = 0, MAT_METALHYDROGEN = 0, MAT_SUPERMATTER = 0)
|
17 | 20 | var/list/hidden_materials = list(MAT_PLASTEEL, MAT_DURASTEEL, MAT_GRAPHITE, MAT_VERDANTIUM, MAT_MORPHIUM, MAT_METALHYDROGEN, MAT_SUPERMATTER)
|
| 21 | + var/eject_lockout = FALSE |
18 | 22 | var/res_max_amount = 200000
|
19 | 23 |
|
20 | 24 | var/datum/research/files
|
|
108 | 112 | if(current)
|
109 | 113 | data["builtperc"] = round((progress / current.time) * 100)
|
110 | 114 |
|
| 115 | + href_data = data |
111 | 116 | ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
112 | 117 | if(!ui)
|
113 | 118 | ui = new(user, src, ui_key, "mechfab.tmpl", "Exosuit Fabricator UI", 800, 600)
|
|
116 | 121 | ui.set_auto_update(1)
|
117 | 122 |
|
118 | 123 | /obj/machinery/mecha_part_fabricator/Topic(href, href_list)
|
| 124 | + topic_result = href_list |
119 | 125 | if(..())
|
120 | 126 | return
|
121 | 127 |
|
|
129 | 135 | if(href_list["category"] in categories)
|
130 | 136 | category = href_list["category"]
|
131 | 137 |
|
132 |
| - if(href_list["eject"]) |
133 |
| - eject_materials(href_list["eject"], text2num(href_list["amount"])) |
| 138 | + if(href_list["eject"] && !eject_lockout) |
| 139 | + eject_materials_partial(href_list["eject"], text2num(href_list["amount"])) |
134 | 140 |
|
135 | 141 | if(href_list["sync"])
|
136 | 142 | sync()
|
|
301 | 307 | files.RefreshResearch()
|
302 | 308 | sync_message = "Sync complete."
|
303 | 309 | update_categories()
|
| 310 | + |
| 311 | +/obj/machinery/mecha_part_fabricator/proc/eject_materials_partial(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything |
| 312 | + var/recursive = amount == -1 |
| 313 | + var/matstring = lowertext(material) |
| 314 | + var/datum/material/M = get_material_by_name(matstring) |
| 315 | + if(recursive && materials[matstring] >= M.perunit) |
| 316 | + eject_material_of_type(matstring) |
| 317 | + return |
| 318 | + |
| 319 | + var/obj/item/stack/material/S = M.place_sheet(get_turf(src)) |
| 320 | + if(amount <= 0) |
| 321 | + amount = S.max_amount |
| 322 | + var/ejected = min(round(materials[matstring] / S.perunit), amount) |
| 323 | + S.amount = min(ejected, amount) |
| 324 | + if(S.amount <= 0) |
| 325 | + qdel(S) |
| 326 | + return |
| 327 | + materials[matstring] -= ejected * S.perunit |
| 328 | + update_busy() |
0 commit comments