/**********************Mint**************************/
/obj/machinery/mineral/mint
name = "coin press"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "coinpress0"
density = 1
anchored = 1
machine_flags = SCREWTOGGLE | CROWDESTROY | WRENCHMOVE | FIXED2WORK
var/atom/movable/mover //see ore processing_unit, it's for input/output
starting_materials = list() //makes the new empty datum
var/coins_per_sheet = 5 //Related to part quality
var/newCoins = 0 //how many coins the machine made last run
var/processing = 0
var/chosen = null //which material will be used to make coins
var/coinsToProduce = 10
var/in_dir = WEST // Sheets go in
var/out_dir = EAST //Coins come out.
/obj/machinery/mineral/mint/New()
..()
component_parts = newlist(
/obj/item/weapon/circuitboard/coin_press,
/obj/item/weapon/stock_parts/matter_bin,
/obj/item/weapon/stock_parts/manipulator,
/obj/item/weapon/stock_parts/manipulator,
/obj/item/weapon/stock_parts/micro_laser
)
RefreshParts()
/obj/machinery/mineral/mint/process()
if(stat & (NOPOWER|BROKEN)) //It still moves sheets when unbolted otherwise.
return 0
var/turf/in_T = get_step(src, in_dir)
var/turf/out_T = get_step(src, out_dir)
if(!in_T.Cross(mover, in_T) || !in_T.Enter(mover) || !out_T.Cross(mover, out_T) || !out_T.Enter(mover))
return
for(var/atom/movable/A in in_T)
if(A.anchored)
continue
if(!istype(A, /obj/item/stack/sheet))//Sheets only
A.forceMove(out_T)
continue
var/obj/item/stack/sheet/O = A
for(var/sheet_id in materials.storage)
var/datum/material/mat = materials.getMaterial(sheet_id)
if (mat.cointype && istype(O,mat.sheettype))
materials.addAmount(sheet_id, O.amount)
src.updateUsrDialog()
qdel(O)
break
/obj/machinery/mineral/mint/RefreshParts()
var/i = 0
for(var/obj/item/weapon/stock_parts/manipulator/A in component_parts)
i += A.rating
coins_per_sheet = initial(coins_per_sheet) * (i / 2) //Better coin ratio, it's something.
/obj/machinery/mineral/mint/attack_hand(mob/user)
add_fingerprint(user)
if(stat & (NOPOWER | BROKEN))
if(user.machine == src)
user.unset_machine(src)
return
user.set_machine(src)
var/dat = list()
dat += "
| Sheets |
"
var/nloaded=0
for(var/ore_id in materials.storage)
var/datum/material/ore_info = materials.getMaterial(ore_id)
if(materials.storage[ore_id] && ore_info.cointype)
if (chosen == null)
chosen = ore_id //Auto select the first sheet
dat += "| "
if (chosen == ore_id)
dat += "[ore_info.processed_name] | "
else
dat += "[ore_info.processed_name]"
dat += "[materials.storage[ore_id]] | "
dat += "Eject |
"
nloaded++
else
if(chosen == ore_id)
chosen = null
if(nloaded)
dat += "
"
else
dat+="| No Sheets Loaded |
"
dat += "The press will produce [coinsToProduce] coins at a rate of [coins_per_sheet] coins per sheet.
"
dat += "\["
dat += "-10"
dat += "-5"
//"-1"
//"+1"
dat += "+5"
dat += "+10"
dat += {"\]
In total, [newCoins] coins have been minted.
Make Coins
"}
dat += ""
dat = jointext(dat,"")
var/datum/browser/popup = new(user, "mint", "Coin Press", 420, 410, src)
popup.set_content(dat)
popup.open()
/obj/machinery/mineral/mint/proc/Change_Dir(var/dir)
var/changingdir = dir //See ore processing_unit for original comments
changingdir = clamp(changingdir, 1, 2)
var/newdir = input("Select the new direction", name, "North") as null|anything in list("North", "South", "East", "West")
if(!newdir)
return 1
newdir = text2dir(newdir)
var/list/dirlist = list(in_dir, out_dir)
var/olddir = dirlist[changingdir]
dirlist[changingdir] = -1
var/conflictingdir = dirlist.Find(newdir)
if(conflictingdir)
dirlist[conflictingdir] = olddir
dirlist[changingdir] = newdir
in_dir = dirlist[1]
out_dir = dirlist[2]
return 1
/obj/machinery/mineral/mint/proc/DropSheet(var/matID)
var/datum/material/M = materials.getMaterial(matID)
var/obj/item/stack/sheet/sh = new M.sheettype(src.loc)
if(sh)
var/available_num_sheets = materials.storage[matID]
if(available_num_sheets>0)
//available_num_sheets % sh.max_amount
sh.amount = available_num_sheets
materials.removeAmount(matID, sh.amount)
else
qdel(sh)
return 1
/obj/machinery/mineral/mint/Topic(href, href_list)
. = ..()
if(.)
return
usr.set_machine(src)
src.add_fingerprint(usr)
var/turf/out_T = get_step(src, out_dir)
if(href_list["close"])
usr.unset_machine(src)
return 1
if(processing==1)
to_chat(usr, "The machine is processing.")
return
if(href_list["eject"])
var/datum/material/ma = materials.getMaterial(href_list["eject"])
var/obj/item/stack/sheet/sh = new ma.sheettype(out_T)
sh.amount = materials.getAmount(href_list["eject"])
materials.removeAmount(href_list["eject"], sh.amount)
if (chosen == href_list["eject"])
chosen = null
if("changedir" in href_list)
//Change_Dir()
var/changingdir = text2num(href_list["changedir"]) //See ore processing_unit for original comments
changingdir = clamp(changingdir, 1, 2)
var/newdir = input("Select the new direction", name, "North") as null|anything in list("North", "South", "East", "West")
if(!newdir)
return 1
newdir = text2dir(newdir)
var/list/dirlist = list(in_dir, out_dir)
var/olddir = dirlist[changingdir]
dirlist[changingdir] = -1
var/conflictingdir = dirlist.Find(newdir)
if(conflictingdir)
dirlist[conflictingdir] = olddir
dirlist[changingdir] = newdir
in_dir = dirlist[1]
out_dir = dirlist[2]
if(href_list["choose"])
chosen = href_list["choose"]
if(href_list["chooseAmt"])
coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000)
if(href_list["makeCoins"])
if(chosen == null)
return
var/temp_coins = coinsToProduce
if (src.out_dir)
processing = 1
icon_state = "coinpress1"
var/datum/material/po=materials.getMaterial(chosen)
if(!po)
chosen=null
processing=0
return
while(materials.storage[chosen] > 0 && coinsToProduce > 0)
var/obj/item/weapon/storage/bag/money/tempbag = locate(/obj/item/weapon/storage/bag/money,out_T)
materials.removeAmount(chosen, 1) //We'll get that money up front don't you worry.
for(var/i=0,i