Skip to content

Commit

Permalink
Fab update
Browse files Browse the repository at this point in the history
  • Loading branch information
hex37 committed Jun 17, 2023
1 parent c4f28d8 commit 4c4f37e
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 42 deletions.
17 changes: 16 additions & 1 deletion code/game/machinery/machinery.dm
Original file line number Diff line number Diff line change
Expand Up @@ -486,4 +486,19 @@ Class Procs:
S.amount = round(materials[mat] / S.perunit)
else
qdel(S) //Prevents stacks smaller than 1
return
return

/obj/machinery/proc/eject_material_of_type(var/incoming_material) //Used for autolathe, protolathe, mechfab, exofab. Stuff that takes materials, basically.
if(LAZYLEN(materials))
for(var/mat in materials)
if(mat != incoming_material)
continue
var/datum/material/M = get_material_by_name(mat)
if(!istype(M) || materials[mat] == 0)
continue
var/obj/item/stack/material/S = new M.stack_type(get_turf(src))
if(materials[mat] >= S.perunit)
S.amount = round(materials[mat] / S.perunit)
else
qdel(S) //Prevents stacks smaller than 1
return
38 changes: 20 additions & 18 deletions code/game/mecha/mech_fabricator.dm
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
req_access = list(access_robotics)
circuit = /obj/item/circuitboard/mechfab

var/list/href_data
var/topic_result

var/speed = 1
var/mat_efficiency = 1
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)
Expand Down Expand Up @@ -109,6 +112,7 @@
if(current)
data["builtperc"] = round((progress / current.time) * 100)

href_data = data
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
if(!ui)
ui = new(user, src, ui_key, "mechfab.tmpl", "Exosuit Fabricator UI", 800, 600)
Expand All @@ -117,6 +121,7 @@
ui.set_auto_update(1)

/obj/machinery/mecha_part_fabricator/Topic(href, href_list)
topic_result = href_list
if(..())
return

Expand All @@ -131,7 +136,7 @@
category = href_list["category"]

if(href_list["eject"] && !eject_lockout)
eject_materials_partial(href_list["eject"], href_list["mat_type"], text2num(href_list["amount"]))
eject_materials_partial(href_list["eject"], text2num(href_list["amount"]))

if(href_list["sync"])
sync()
Expand Down Expand Up @@ -288,7 +293,7 @@
hidden_mat = TRUE
continue
if(!hidden_mat)
. += list(list("mat" = capitalize(T), "amt" = materials[T], "type" = T?.type))
. += list(list("mat" = capitalize(T), "amt" = materials[T]))

/obj/machinery/mecha_part_fabricator/proc/sync()
sync_message = "Error: no console found."
Expand All @@ -303,24 +308,21 @@
sync_message = "Sync complete."
update_categories()

/obj/machinery/mecha_part_fabricator/proc/eject_materials_partial(var/material, var/mattype, var/amount)
material = lowertext(material)
var/obj/item/stack/material/S = new mattype(loc)
eject_lockout = TRUE
if(amount == 0)
amount = S.max_amount
if(amount == -1)
var/new_amount = input("Enter how many units of [material] to eject.", "Eject Material", 1) as num|null
if(!new_amount)
return
else
amount = min(new_amount, S.max_amount)
eject_lockout = FALSE
/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
var/recursive = amount == -1 ? 1 : 0
var/matstring = lowertext(material)
var/datum/material/M = get_material_by_name(matstring)
if(recursive && materials[matstring] >= M.perunit)
eject_material_of_type(matstring)
return

world << "[materials[material]] | [S.perunit]"
var/ejected = min(round(materials[material] / S.perunit), amount)
var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
if(amount <= 0)
amount = S.max_amount
var/ejected = min(round(materials[matstring] / S.perunit), amount)
S.amount = min(ejected, amount)
if(S.amount <= 0)
qdel(S)
return
materials[material] -= ejected * S.perunit
materials[matstring] -= ejected * S.perunit
update_busy()
34 changes: 16 additions & 18 deletions code/game/mecha/mech_prosthetics.dm
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
manufacturer = href_list["manufacturer"]

if(href_list["eject"] && !eject_lockout)
eject_materials_partial(href_list["eject"], href_list["mat_type"], text2num(href_list["amount"]))
eject_materials_partial(href_list["eject"], text2num(href_list["amount"]))

if(href_list["sync"])
sync()
Expand Down Expand Up @@ -326,7 +326,7 @@
hidden_mat = TRUE
continue
if(!hidden_mat)
. += list(list("mat" = capitalize(T), "amt" = materials[T], "type" = T?.type))
. += list(list("mat" = capitalize(T), "amt" = materials[T]))

/obj/machinery/pros_fabricator/proc/sync()
sync_message = "Error: no console found."
Expand All @@ -341,24 +341,22 @@
sync_message = "Sync complete."
update_categories()

/obj/machinery/pros_fabricator/proc/eject_materials_partial(var/material, var/mattype, var/amount)
material = lowertext(material)
var/obj/item/stack/material/S = new mattype(loc)
eject_lockout = TRUE
if(amount == 0)
amount = S.max_amount
if(amount == -1)
var/new_amount = input("Enter how many units of [material] to eject.", "Eject Material", 1) as num|null
if(!new_amount)
return
else
amount = min(new_amount, S.max_amount)
eject_lockout = FALSE
/obj/machinery/pros_fabricator/proc/eject_materials_partial(var/material, var/amount) // 0 amount = 0 means ejecting a full stack; -1 means eject everything
var/recursive = amount == -1 ? 1 : 0
var/matstring = lowertext(material)
var/datum/material/M = get_material_by_name(matstring)

world << "[materials[material]] | [S.perunit]"
var/ejected = min(round(materials[material] / S.perunit), amount)
if(recursive && materials[matstring] >= M.perunit)
eject_material_of_type(matstring)
return

var/obj/item/stack/material/S = M.place_sheet(get_turf(src))
if(amount <= 0)
amount = S.max_amount
var/ejected = min(round(materials[matstring] / S.perunit), amount)
S.amount = min(ejected, amount)
if(S.amount <= 0)
qdel(S)
return
materials[material] -= ejected * S.perunit
materials[matstring] -= ejected * S.perunit
update_busy()
2 changes: 2 additions & 0 deletions code/modules/materials/materials/_materials.dm
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,8 @@ var/global/list/name_to_material
var/radiation_resistance = 0 // Radiation resistance, which is added on top of a material's weight for blocking radiation. Needed to make lead special without superrobust weapons.
var/supply_conversion_value // Supply points per sheet that this material sells for.

var/perunit = SHEET_MATERIAL_AMOUNT //How much stacks of translate from sheet to amount

// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
var/created_fulltile_window
Expand Down
10 changes: 5 additions & 5 deletions nano/templates/mechfab.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,11 @@
{{:value.mat}}: {{:value.amt}}/{{:data.maxres}}
</div>
<div class="itemContentMedium">
{{:helper.link('x1', null, {'eject' : value.mat, 'mat_type' : value.type, 'amount' : 1,}, value.amt > 2000 ? null : 'disabled')}}
{{:helper.link('x5', null, {'eject' : value.mat, 'mat_type' : value.type, 'amount' : 5}, value.amt > 10000 ? null : 'disabled')}}
{{:helper.link('x10', null, {'eject' : value.mat, 'mat_type' : value.type, 'amount' : 10}, value.amt > 20000 ? null : 'disabled')}}
{{:helper.link('Custom', null, {'eject' : value.mat, 'mat_type' : value.type, 'amount' : -1})}}
{{:helper.link('Stack', null, {'eject' : value.mat, 'mat_type' : value.type, 'amount' : 0})}}
{{:helper.link('x1', null, {'eject' : value.mat, 'amount' : 1}, value.amt > 2000 ? null : 'disabled')}}
{{:helper.link('x5', null, {'eject' : value.mat, 'amount' : 5}, value.amt > 10000 ? null : 'disabled')}}
{{:helper.link('x10', null, {'eject' : value.mat, 'amount' : 10}, value.amt > 20000 ? null : 'disabled')}}
{{:helper.link('Stack', null, {'eject' : value.mat, 'amount' : 0})}}
{{:helper.link('All', null, {'eject' : value.mat, 'amount' : -1})}}
</div>
</div>
{{/for}}
Expand Down

0 comments on commit 4c4f37e

Please sign in to comment.