mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-01-16 04:12:21 +00:00
Part 2 of the PR series to bring /tg/'s and bay's plane masters to Aurora, the lack of which is blocking several features we want. This ports over the easier to understand Bay version of plane masters, which is detailed in the relevant readme file in the code. Example effect code for a warp effect is also in, which has been implemented for gravity catapults. Relies on #18741 --------- Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it> Co-authored-by: Cody Brittain <cbrittain10@live.com> Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
201 lines
6.2 KiB
Plaintext
201 lines
6.2 KiB
Plaintext
/**********************Mineral stacking unit console**************************/
|
|
|
|
/obj/machinery/mineral/stacking_unit_console
|
|
name = "stacking machine console"
|
|
desc = "This console allows you to set the max stack size for the stacking machine, as well as letting you eject stacks manually."
|
|
icon = 'icons/obj/machinery/wall/terminals.dmi'
|
|
icon_state = "production_console"
|
|
density = FALSE
|
|
anchored = TRUE
|
|
var/obj/machinery/mineral/stacking_machine/machine
|
|
idle_power_usage = 15
|
|
active_power_usage = 50
|
|
|
|
component_types = list(
|
|
/obj/item/circuitboard/stacking_console,
|
|
/obj/item/stock_parts/scanning_module,
|
|
/obj/item/stock_parts/console_screen
|
|
)
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/Initialize(mapload, d, populate_components)
|
|
..()
|
|
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "production_console-screen", plane = EFFECTS_ABOVE_LIGHTING_PLANE)
|
|
add_overlay(screen_overlay)
|
|
set_light(1.4, 1, COLOR_CYAN)
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/LateInitialize()
|
|
setup_machine(null)
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/Destroy()
|
|
if(machine)
|
|
machine.console = null
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/proc/setup_machine(mob/user)
|
|
if(!machine)
|
|
var/area/A = get_area(src)
|
|
var/best_distance = INFINITY
|
|
for(var/obj/machinery/mineral/stacking_machine/checked_machine in SSmachinery.machinery)
|
|
if(id)
|
|
if(checked_machine.id == id)
|
|
machine = checked_machine
|
|
else if(!checked_machine.console && A == get_area(checked_machine) && get_dist_euclidian(checked_machine, src) < best_distance)
|
|
machine = checked_machine
|
|
best_distance = get_dist_euclidian(checked_machine, src)
|
|
if(machine)
|
|
machine.console = src
|
|
else if(user)
|
|
to_chat(user, SPAN_WARNING("ERROR: Linked machine not found!"))
|
|
|
|
return machine
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/attackby(obj/item/attacking_item, mob/user)
|
|
if(default_deconstruction_screwdriver(user, attacking_item))
|
|
return
|
|
if(default_deconstruction_crowbar(user, attacking_item))
|
|
return
|
|
if(default_part_replacement(user, attacking_item))
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user)
|
|
add_fingerprint(user)
|
|
ui_interact(user)
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, datum/ui_state/state = GLOB.default_state)
|
|
if(!setup_machine(user))
|
|
return
|
|
|
|
var/list/data = list(
|
|
"stack_amt" = machine.stack_amt,
|
|
"contents" = list()
|
|
)
|
|
for(var/stacktype in machine.stack_storage)
|
|
if(machine.stack_storage[stacktype] > 0)
|
|
data["contents"] += list(list(
|
|
"path" = stacktype,
|
|
"name" = machine.stack_paths[stacktype],
|
|
"amount" = machine.stack_storage[stacktype]
|
|
))
|
|
|
|
ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open)
|
|
if(!ui)
|
|
ui = new(user, src, ui_key, "stacking_machine.tmpl", "Stacking Machine", 500, 400, state = state)
|
|
ui.set_initial_data(data)
|
|
ui.open()
|
|
ui.set_auto_update(1)
|
|
|
|
/obj/machinery/mineral/stacking_unit_console/Topic(href, href_list)
|
|
if(..())
|
|
return
|
|
|
|
if(href_list["change_stack"])
|
|
var/choice = tgui_input_list(usr, "What would you like to set the stack amount to?", "Stacking", list(1,5,10,20,50))
|
|
if(!choice)
|
|
return TRUE
|
|
machine.stack_amt = choice
|
|
return TRUE
|
|
|
|
if(href_list["release_stack"])
|
|
var/stacktype = text2path(href_list["release_stack"])
|
|
if(!stacktype || !machine.stack_paths[stacktype])
|
|
return
|
|
|
|
if(machine.stack_storage[stacktype] > 0)
|
|
var/obj/item/stack/material/S = new stacktype(machine.output)
|
|
S.amount = machine.stack_storage[stacktype]
|
|
machine.stack_storage[stacktype] = 0
|
|
return TRUE
|
|
|
|
add_fingerprint(usr)
|
|
|
|
/**********************Mineral stacking unit**************************/
|
|
|
|
|
|
/obj/machinery/mineral/stacking_machine
|
|
name = "stacking machine"
|
|
desc = "A machine which takes loose stacks of finished sheets and packs them together into one easily transportable sheet."
|
|
icon = 'icons/obj/machinery/mining_machines.dmi'
|
|
icon_state = "stacker"
|
|
density = TRUE
|
|
anchored = TRUE
|
|
var/obj/machinery/mineral/stacking_unit_console/console
|
|
var/obj/machinery/mineral/input
|
|
var/obj/machinery/mineral/output
|
|
var/list/stack_storage = list()
|
|
var/list/stack_paths = list()
|
|
var/stack_amt = 50 // Amount to stack before releasing
|
|
idle_power_usage = 15
|
|
active_power_usage = 50
|
|
|
|
component_types = list(
|
|
/obj/item/circuitboard/stacking_machine,
|
|
/obj/item/stock_parts/manipulator = 2
|
|
)
|
|
|
|
/obj/machinery/mineral/stacking_machine/Initialize()
|
|
. = ..()
|
|
|
|
for(var/stacktype in subtypesof(/obj/item/stack/material) - typesof(/obj/item/stack/material/cyborg))
|
|
var/obj/item/stack/S = stacktype
|
|
stack_storage[stacktype] = 0
|
|
stack_paths[stacktype] = capitalize(initial(S.name))
|
|
|
|
//Locate our output and input machinery.
|
|
for(var/dir in GLOB.cardinal)
|
|
var/input_spot = locate(/obj/machinery/mineral/input, get_step(src, dir))
|
|
if(input_spot)
|
|
input = get_turf(input_spot) // thought of qdeling the spots here, but it's useful when rebuilding a destroyed machine
|
|
break
|
|
for(var/dir in GLOB.cardinal)
|
|
var/output_spot = locate(/obj/machinery/mineral/output, get_step(src, dir))
|
|
if(output)
|
|
output = get_turf(output_spot)
|
|
break
|
|
|
|
if(!input)
|
|
input = get_step(src, GLOB.reverse_dir[dir])
|
|
if(!output)
|
|
output = get_step(src, dir)
|
|
|
|
/obj/machinery/mineral/stacking_machine/Destroy()
|
|
if(console)
|
|
console.machine = null
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/stacking_machine/attackby(obj/item/attacking_item, mob/user)
|
|
if(default_deconstruction_screwdriver(user, attacking_item))
|
|
return
|
|
if(default_deconstruction_crowbar(user, attacking_item))
|
|
return
|
|
if(default_part_replacement(user, attacking_item))
|
|
return
|
|
return ..()
|
|
|
|
/obj/machinery/mineral/stacking_machine/process()
|
|
if(!console)
|
|
return
|
|
if(stat & BROKEN)
|
|
return
|
|
if(stat & NOPOWER)
|
|
return
|
|
|
|
if(output && input)
|
|
for(var/obj/item/O in input)
|
|
if(!O)
|
|
return
|
|
var/obj/item/stack/S = O
|
|
if(istype(S) && stack_storage[S.type] != null)
|
|
stack_storage[S.type] += S.amount
|
|
qdel(S)
|
|
else
|
|
O.forceMove(output)
|
|
|
|
//Output amounts that are past stack_amt.
|
|
for(var/sheet in stack_storage)
|
|
if(stack_storage[sheet] >= stack_amt)
|
|
new sheet(output, stack_amt)
|
|
stack_storage[sheet] -= stack_amt
|
|
intent_message(MACHINE_SOUND)
|