diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index b42c05f4ea4..ed07ca2ba67 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -29342,7 +29342,7 @@ "jYr" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/mecha_part_fabricator{ - dir = 8 + drop_direction = 8 }, /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark, diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 3cc15f7deff..13c2c019fdb 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -59893,7 +59893,7 @@ /area/station/service/abandoned_gambling_den/gaming) "pcJ" = ( /obj/machinery/mecha_part_fabricator{ - dir = 4 + drop_direction = 4 }, /obj/effect/turf_decal/bot_red, /obj/effect/turf_decal/tile/neutral/full, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 68433b52785..0455a78b4c0 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -43417,7 +43417,7 @@ dir = 4 }, /obj/machinery/mecha_part_fabricator{ - dir = 4 + drop_direction = 4 }, /obj/structure/noticeboard/directional/west, /turf/open/floor/iron, @@ -51130,7 +51130,7 @@ dir = 4 }, /obj/machinery/mecha_part_fabricator{ - dir = 4 + drop_direction = 4 }, /turf/open/floor/iron, /area/station/science/robotics/lab) diff --git a/_maps/map_files/NebulaStation/NebulaStation.dmm b/_maps/map_files/NebulaStation/NebulaStation.dmm index 7a3b22d254f..9be370d5fc1 100644 --- a/_maps/map_files/NebulaStation/NebulaStation.dmm +++ b/_maps/map_files/NebulaStation/NebulaStation.dmm @@ -141111,7 +141111,7 @@ /area/station/hallway/primary/central) "uYT" = ( /obj/machinery/mecha_part_fabricator{ - dir = 1 + drop_direction = 1 }, /obj/effect/turf_decal/delivery, /turf/open/floor/iron/dark, diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 973b6209da8..95c02b17936 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -16182,7 +16182,7 @@ dir = 8 }, /obj/machinery/mecha_part_fabricator{ - dir = 4 + drop_direction = 4 }, /obj/machinery/light/small/directional/west, /turf/open/floor/iron/white/smooth_large, @@ -41584,7 +41584,7 @@ dir = 4 }, /obj/machinery/mecha_part_fabricator{ - dir = 8 + drop_direction = 8 }, /obj/machinery/light/small/directional/east, /turf/open/floor/iron/white/smooth_large, diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 66345284283..322a7fb8209 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -5609,7 +5609,7 @@ /area/station/security/lockers) "bYo" = ( /obj/machinery/mecha_part_fabricator{ - dir = 1 + drop_direction = 1 }, /obj/effect/turf_decal/delivery, /obj/structure/sign/poster/contraband/borg_fancy_1/directional/south, @@ -39502,7 +39502,7 @@ /area/station/maintenance/central/lesser) "oac" = ( /obj/machinery/mecha_part_fabricator{ - dir = 1 + drop_direction = 1 }, /obj/effect/turf_decal/delivery, /obj/machinery/digital_clock/directional/south, diff --git a/_maps/shuttles/ruin_cyborg_mothership.dmm b/_maps/shuttles/ruin_cyborg_mothership.dmm index 7864564eab1..ea07e4354de 100644 --- a/_maps/shuttles/ruin_cyborg_mothership.dmm +++ b/_maps/shuttles/ruin_cyborg_mothership.dmm @@ -346,7 +346,7 @@ "ry" = ( /obj/machinery/mecha_part_fabricator/maint{ name = "forgotten exosuit fabricator"; - dir = 8 + drop_direction = 8 }, /obj/machinery/conveyor{ dir = 8; diff --git a/code/modules/vehicles/mecha/mech_fabricator.dm b/code/modules/vehicles/mecha/mech_fabricator.dm index 54f8cee9ed4..ad28886d99f 100644 --- a/code/modules/vehicles/mecha/mech_fabricator.dm +++ b/code/modules/vehicles/mecha/mech_fabricator.dm @@ -10,6 +10,7 @@ subsystem_type = /datum/controller/subsystem/processing/fastprocess + interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS /// Current items in the build queue. var/list/datum/design/queue = list() @@ -49,12 +50,15 @@ /// All designs in the techweb that can be fabricated by this machine, since the last update. var/list/datum/design/cached_designs - //looping sound for printing items + /// Looping sound for printing items var/datum/looping_sound/lathe_print/print_sound /// Local designs that only this mechfab have(using when mechfab emaged so it's illegal designs). var/list/datum/design/illegal_local_designs + /// Direction the produced items will drop (0 means on top of us) + var/drop_direction = SOUTH + /obj/machinery/mecha_part_fabricator/Initialize(mapload) print_sound = new(src, FALSE) rmat = AddComponent(/datum/component/remote_materials, mapload && link_on_init) @@ -136,15 +140,19 @@ . = ..() if(in_range(user, src) || isobserver(user)) . += span_notice("The status display reads: Storing up to [rmat.local_size] material units.
Material consumption at [component_coeff*100]%.
Build time reduced by [100-time_coeff*100]%.") - if(panel_open) - . += span_notice("Alt-click to rotate the output direction.") + . += span_notice("Currently configured to drop printed objects [dir2text(drop_direction)].") -/obj/machinery/mecha_part_fabricator/click_alt(mob/user) - if(!panel_open) - return CLICK_ACTION_BLOCKING - dir = turn(dir, -90) - balloon_alert(user, "rotated to [dir2text(dir)].") - return CLICK_ACTION_SUCCESS +/obj/machinery/mecha_part_fabricator/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) + if(!can_interact(user) || (!HAS_SILICON_ACCESS(user) && !isAdminGhostAI(user)) && !Adjacent(user)) + return + if(being_built) + balloon_alert(user, "printing started!") + return + var/direction = get_dir(src, over_location) + if(!direction) + return + drop_direction = direction + balloon_alert(user, "dropping [dir2text(drop_direction)]") /obj/machinery/mecha_part_fabricator/emag_act(mob/user, obj/item/card/emag/emag_card) if(obj_flags & EMAGGED) @@ -267,7 +275,7 @@ /obj/machinery/mecha_part_fabricator/process() // If there's a stored part to dispense due to an obstruction, try to dispense it. if(stored_part) - var/turf/exit = get_step(src,(dir)) + var/turf/exit = get_step(src, drop_direction) if(exit.density) return TRUE @@ -305,7 +313,7 @@ being_built = null - var/turf/exit = get_step(src,(dir)) + var/turf/exit = get_step(src, drop_direction) if(exit.density) say("Error! The part outlet is obstructed.") desc = "It's trying to dispense the fabricated [dispensed_design.name], but the part outlet is obstructed." diff --git a/tools/UpdatePaths/Scripts/87828_exofab_directions.txt b/tools/UpdatePaths/Scripts/87828_exofab_directions.txt new file mode 100644 index 00000000000..468bc23847a --- /dev/null +++ b/tools/UpdatePaths/Scripts/87828_exofab_directions.txt @@ -0,0 +1 @@ +/obj/machinery/mecha_part_fabricator/@SUBTYPES{dir = @ANY} : /obj/machinery/mecha_part_fabricator/@SUBTYPES{@OLD;dir=@SKIP;drop_direction=@OLD:dir}