mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-07-26 23:51:57 +01:00
87 lines
3.1 KiB
Plaintext
87 lines
3.1 KiB
Plaintext
/obj/machinery/mineral/bluespace_miner
|
|
name = "bluespace mining machine"
|
|
desc = "A machine that uses the magic of Bluespace to slowly generate materials and add them to a linked ore silo."
|
|
icon = 'sandcode/icons/obj/machines/mining_machines.dmi'
|
|
icon_state = "bsminer"
|
|
density = TRUE
|
|
circuit = /obj/item/circuitboard/machine/bluespace_miner
|
|
layer = BELOW_OBJ_LAYER
|
|
var/list/ore_rates = list(/datum/material/iron = 0.3, /datum/material/glass = 0.3, /datum/material/plasma = 0.1, /datum/material/silver = 0.1, /datum/material/gold = 0.05, /datum/material/titanium = 0.05, /datum/material/uranium = 0.05, /datum/material/diamond = 0.02)
|
|
var/datum/component/remote_materials/materials
|
|
|
|
/obj/machinery/mineral/bluespace_miner/Initialize(mapload)
|
|
. = ..()
|
|
materials = AddComponent(/datum/component/remote_materials, "bsm", mapload)
|
|
|
|
/obj/machinery/mineral/bluespace_miner/Destroy()
|
|
materials = null
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/bluespace_miner/multitool_act(mob/living/user, obj/item/multitool/M)
|
|
if(istype(M))
|
|
if(!M.buffer || !istype(M.buffer, /obj/machinery/ore_silo))
|
|
to_chat(user, "<span class='warning'>You need to multitool the ore silo first.</span>")
|
|
return FALSE
|
|
|
|
/obj/machinery/mineral/bluespace_miner/examine(mob/user)
|
|
. = ..()
|
|
if(!materials?.silo)
|
|
. += "<span class='notice'>No ore silo connected. Use a multi-tool to link an ore silo to this machine.</span>"
|
|
else if(materials?.on_hold())
|
|
. += "<span class='warning'>Ore silo access is on hold, please contact the quartermaster.</span>"
|
|
|
|
/obj/machinery/mineral/bluespace_miner/process()
|
|
update_icon_state()
|
|
if(!materials?.silo || materials?.on_hold())
|
|
return
|
|
var/datum/component/material_container/mat_container = materials.mat_container
|
|
if(!mat_container || panel_open || !powered())
|
|
return
|
|
var/datum/material/ore = pick(ore_rates)
|
|
mat_container.bsm_insert((ore_rates[ore] * 1000), ore)
|
|
|
|
/datum/component/material_container/proc/bsm_insert(amt, var/datum/material/mat)
|
|
if(!istype(mat))
|
|
mat = SSmaterials.GetMaterialRef(mat)
|
|
if(amt > 0 && has_space(amt))
|
|
var/total_amount_saved = total_amount
|
|
if(mat)
|
|
materials[mat] += amt
|
|
total_amount += amt
|
|
else
|
|
for(var/i in materials)
|
|
materials[i] += amt
|
|
total_amount += amt
|
|
return (total_amount - total_amount_saved)
|
|
return FALSE
|
|
|
|
/obj/machinery/mineral/bluespace_miner/update_icon_state()
|
|
if(!powered())
|
|
if(!panel_open)
|
|
icon_state = "bsminer-unpowered"
|
|
else
|
|
icon_state = "bsminer-unpowered-maintenance"
|
|
else
|
|
if(!panel_open)
|
|
icon_state = "bsminer"
|
|
else
|
|
icon_state = "bsminer-maintenance"
|
|
|
|
/obj/machinery/mineral/bluespace_miner/crowbar_act(mob/living/user, obj/item/I)
|
|
. = ..()
|
|
if(default_deconstruction_crowbar(I, FALSE))
|
|
return TRUE
|
|
|
|
/obj/machinery/mineral/bluespace_miner/screwdriver_act(mob/living/user, obj/item/screwdriver/I)
|
|
. = TRUE
|
|
if(..())
|
|
return
|
|
if(!state_open)
|
|
if(powered())
|
|
if(default_deconstruction_screwdriver(user, "bsminer-maintenance", "bsminer", I))
|
|
return TRUE
|
|
else if(!powered())
|
|
if(default_deconstruction_screwdriver(user, "bsminer-unpowered-maintenance", "bsminer-unpowered", I))
|
|
return TRUE
|
|
return FALSE
|