/**********************Mineral processing unit console**************************/ /obj/machinery/mineral/processing_unit_console name = "production machine console" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "console" density = 1 anchored = 1 var/obj/machinery/mineral/processing_unit/machine = null var/machinedir = EAST /obj/machinery/mineral/processing_unit_console/New() ..() spawn(7) src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir)) if (machine) machine.CONSOLE = src else del(src) /obj/machinery/mineral/processing_unit_console/process() updateDialog() /obj/machinery/mineral/processing_unit_console/attack_hand(mob/user) add_fingerprint(user) interact(user) /obj/machinery/mineral/processing_unit_console/interact(mob/user) user.set_machine(src) var/dat = {"
| Mineral | Amount | Controls |
|---|---|---|
| [machine.ore_names[ore_id]]: | [machine.ore[ore_id]] | " if (machine.selected[ore_id]==1) dat += "Smelting" else dat += "Not smelting" dat += " |
Machine is currently "} //On or off if (machine.on==1) dat += text("On
") else dat += text("Off") else dat+="No Materials Loaded" dat+={" "} user << browse(dat, "window=console_processing_unit") onclose(user, "console_processing_unit") /obj/machinery/mineral/processing_unit_console/Topic(href, href_list) if(..()) return usr.set_machine(src) src.add_fingerprint(usr) if(href_list["toggle_select"]) if (!(href_list["toggle_select"] in machine.selected)) error("Unknown ore ID [href_list["toggle_select"]]!") machine.selected[href_list["toggle_select"]] = !machine.selected[href_list["toggle_select"]] if(href_list["set_on"]) if (href_list["set_on"] == "on") machine.on = 1 else machine.on = 0 src.updateUsrDialog() return /**********************Mineral processing unit**************************/ /obj/machinery/mineral/processing_unit name = "furnace" icon = 'icons/obj/machines/mining_machines.dmi' icon_state = "furnace" density = 1 anchored = 1.0 var/obj/machinery/mineral/input = null var/obj/machinery/mineral/output = null var/obj/machinery/mineral/CONSOLE = null // Can probably combine all 4 of these into a single datum store, but hindsight is 20/20. - N3X var/list/ore=list( "gold" = 0, "silver" = 0, "diamond" = 0, "glass" = 0, "plasma" = 0, "uranium" = 0, "iron" = 0, "clown" = 0, //"adamantine" = 0, "phazon" = 0, ) var/list/selected=list( "gold" = 0, "silver" = 0, "diamond" = 0, "glass" = 0, "plasma" = 0, "uranium" = 0, "iron" = 0, "clown" = 0, //"adamantine" = 0, "phazon" = 0, ) var/list/ore_names=list( "gold" = "Gold", "silver" = "Silver", "diamond" = "Diamond", "glass" = "Sand", "plasma" = "Plasma", "uranium" = "Uranium", "iron" = "Iron", "clown" = "Bananium", //"adamantine" = "Adamantine", "phazon" = "Phazon", ) var/list/ore_types=list( "iron" = /obj/item/weapon/ore/iron, "glass" = /obj/item/weapon/ore/glass, "diamond" = /obj/item/weapon/ore/diamond, "plasma" = /obj/item/weapon/ore/plasma, "gold" = /obj/item/weapon/ore/gold, "silver" = /obj/item/weapon/ore/silver, "uranium" = /obj/item/weapon/ore/uranium, "clown" = /obj/item/weapon/ore/clown, "phazon" = /obj/item/weapon/ore/phazon, //"adamantine" = /obj/item/weapon/ore/adamantine ) var/list/recipes=list() var/on = 0 //0 = off, 1 =... oh you know! /obj/machinery/mineral/processing_unit/New() ..() spawn( 5 ) for (var/dir in cardinal) src.input = locate(/obj/machinery/mineral/input, get_step(src, dir)) if(src.input) break for (var/dir in cardinal) src.output = locate(/obj/machinery/mineral/output, get_step(src, dir)) if(src.output) break processing_objects.Add(src) for(var/recipetype in typesof(/datum/smelting_recipe) - /datum/smelting_recipe) recipes += new recipetype return return /obj/machinery/mineral/processing_unit/process() if (src.output && src.input) var/i if(on) for (i = 0; i < 10; i++) var/located=0 var/insufficient_ore=0 // For every recipe for(var/datum/smelting_recipe/recipe in recipes) // Check if it's selected and we have the ingredients var/signal=recipe.checkIngredients(src) // If we have a matching recipe but we're out of ore, // Shut off but DO NOT spawn slag. if(signal==-1) insufficient_ore=1 break // Otherwise, if we've matched else if(signal==1) // Take ingredients for(var/ore_id in recipe.ingredients) ore[ore_id]-- // Spawn yield new recipe.yieldtype(output.loc) located=1 break if(insufficient_ore) on=0 break // If we haven't found a matching recipe, if(!located) // Turn off on=0 // Take one of every ore selected for(var/ore_id in selected) if(ore[ore_id]>0) ore[ore_id]-- // Spawn slag new /obj/item/weapon/ore/slag(output.loc) break // Collect ore even if not on. for (i = 0; i < 10; i++) var/obj/item/O O = locate(/obj/item, input.loc) if (O) for(var/ore_id in ore) if (istype(O,ore_types[ore_id])) ore[ore_id]++; O.loc = null del(O) break if(O) O.loc = src.output.loc else break return ///////////////////////////////////////////////// // Recycling Furnace /obj/machinery/mineral/processing_unit/recycle name = "recycling furnace" var/gold = 0; var/silver = 0; var/diamond = 0; var/glass = 0; var/plasma = 0; var/uranium = 0; var/iron = 0; var/clown = 0; var/adamantine = 0; var/phazon = 0; var/list/ALLOWED_TYPES=list( /obj/item, /obj/machinery/portable_atmospherics/canister, ) /obj/machinery/mineral/processing_unit/recycle/process() if (src.output && src.input) var/i //if(!(stat & (BROKEN|UNPOWERED))) for (i = 0; i < 10; i++) if (glass >= 1) glass--; new /obj/item/stack/sheet/glass(output.loc) if (gold >= 1) gold--; new /obj/item/stack/sheet/mineral/gold(output.loc) if (silver >= 1) silver--; new /obj/item/stack/sheet/mineral/silver(output.loc) if (diamond >= 1) diamond--; new /obj/item/stack/sheet/mineral/diamond(output.loc) if (plasma >= 1) plasma--; new /obj/item/stack/sheet/mineral/plasma(output.loc) if (uranium >= 1) uranium--; new /obj/item/stack/sheet/mineral/uranium(output.loc) if (iron >= 1) iron--; new /obj/item/stack/sheet/metal(output.loc) if (clown >= 1) clown--; new /obj/item/stack/sheet/mineral/clown(output.loc) if (phazon >= 1) clown--; new /obj/item/stack/sheet/mineral/phazon(output.loc) for (i = 0; i < 10; i++) var/obj/O for(O in input.loc.contents) var/allowed=0 for(var/T in ALLOWED_TYPES) if(istype(O,T)) allowed=1 break if(O && allowed) if (O.recycle(src)) del(O) else O.loc = src.output.loc /obj/machinery/mineral/processing_unit/recycle/attack_ai(var/mob/user as mob) src.add_hiddenprint(user) return src.attack_hand(user) /obj/machinery/mineral/processing_unit/recycle/attack_paw(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/mineral/processing_unit/recycle/attack_hand(var/mob/user as mob) return src.interact(user) /obj/machinery/mineral/processing_unit/recycle/interact(var/mob/user as mob) user.set_machine(src) var/found=0 var/html = {"Current Status: (Close)
(Units are sheets)
"} //"[valve_open?("Open"):("Closed")]