diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index f5a6e9fac49..35659803c46 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -37,7 +37,7 @@ /obj/machinery/mecha_part_fabricator/New() ..() files = new /datum/research(src) //Setup the research data holder. - materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM)) + materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE)) var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null) B.apply_default_parts(src) @@ -430,22 +430,13 @@ return 1 if(istype(W, /obj/item/stack/sheet)) - if(panel_open) - to_chat(user, "You can't load [src] while it's opened!") - return 1 - if(being_built) - to_chat(user, "\The [src] is currently processing! Please wait until completion.") + + if(!is_insertion_ready(user)) return 1 var/material_amount = materials.get_item_material_amount(W) - if(!material_amount) - to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].") - return 1 - if(!materials.has_space(material_amount)) - to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.") - return 1 - if(!user.temporarilyRemoveItemFromInventory(W)) - to_chat(user, "\The [W] is stuck to you and cannot be placed into [src].") + + if(!try_insert(user, W, material_amount)) return 1 var/inserted = materials.insert_item(W) @@ -457,7 +448,31 @@ var/mat_overlay = "fab-load-[material2name(W.materials[1])]" add_overlay(mat_overlay) sleep(10) - cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted + if(!QDELETED(src)) + cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted + + updateUsrDialog() + + else if(istype(W, /obj/item/weapon/ore/bluespace_crystal)) + + if(!is_insertion_ready(user)) + return 1 + + var/material_amount = materials.get_item_material_amount(W) + + if(!try_insert(user, W, material_amount)) + return 1 + + var/inserted = materials.insert_item(W) + if(inserted) + to_chat(user, "You add [W] to the [src].") + if(W && W.materials.len) + qdel(W) + var/mat_overlay = "fab-load-bluespace" + add_overlay(mat_overlay) + sleep(10) + if(!QDELETED(src)) + cut_overlay(mat_overlay) updateUsrDialog() @@ -466,3 +481,27 @@ /obj/machinery/mecha_part_fabricator/proc/material2name(ID) return copytext(ID,2) + +/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user) + if(panel_open) + to_chat(user, "You can't load [src] while it's opened!") + return FALSE + if(being_built) + to_chat(user, "\The [src] is currently processing! Please wait until completion.") + return FALSE + + return TRUE + + +/obj/machinery/mecha_part_fabricator/proc/try_insert(mob/user, obj/item/I, material_amount) + if(!material_amount) + to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].") + return FALSE + if(!materials.has_space(material_amount)) + to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.") + return FALSE + if(!user.temporarilyRemoveItemFromInventory(I)) + to_chat(user, "\The [I] is stuck to you and cannot be placed into [src].") + return FALSE + + return TRUE \ No newline at end of file diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi index c53e7823cab..d59a4c8f8d2 100644 Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ