/* CONTAINS: RPD */ #define PAINT_MODE -2 #define EATING_MODE -1 #define ATMOS_MODE 0 #define METER_MODE 1 #define DISPOSALS_MODE 2 #define CATEGORY_ATMOS 0 #define CATEGORY_DISPOSALS 1 //find the defines in code\_DEFINES\pipe_construction.dm GLOBAL_LIST_INIT(atmos_pipe_recipes, list( "Pipes" = list( new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/simple), new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/manifold), new /datum/pipe_info/pipe("Manual Valve", /obj/machinery/atmospherics/components/binary/valve), new /datum/pipe_info/pipe("Digital Valve", /obj/machinery/atmospherics/components/binary/valve/digital), new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/manifold4w), new /datum/pipe_info/pipe("Layer Manifold", /obj/machinery/atmospherics/pipe/layer_manifold), ), "Devices" = list( new /datum/pipe_info/pipe("Connector", /obj/machinery/atmospherics/components/unary/portables_connector), new /datum/pipe_info/pipe("Unary Vent", /obj/machinery/atmospherics/components/unary/vent_pump), new /datum/pipe_info/pipe("Gas Pump", /obj/machinery/atmospherics/components/binary/pump), new /datum/pipe_info/pipe("Passive Gate", /obj/machinery/atmospherics/components/binary/passive_gate), new /datum/pipe_info/pipe("Volume Pump", /obj/machinery/atmospherics/components/binary/volume_pump), new /datum/pipe_info/pipe("Scrubber", /obj/machinery/atmospherics/components/unary/vent_scrubber), new /datum/pipe_info/pipe("Injector", /obj/machinery/atmospherics/components/unary/outlet_injector), new /datum/pipe_info/meter("Meter"), new /datum/pipe_info/pipe("Gas Filter", /obj/machinery/atmospherics/components/trinary/filter), new /datum/pipe_info/pipe("Gas Mixer", /obj/machinery/atmospherics/components/trinary/mixer), ), "Heat Exchange" = list( new /datum/pipe_info/pipe("Pipe", /obj/machinery/atmospherics/pipe/heat_exchanging/simple), new /datum/pipe_info/pipe("Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold), new /datum/pipe_info/pipe("4-Way Manifold", /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w), new /datum/pipe_info/pipe("Junction", /obj/machinery/atmospherics/pipe/heat_exchanging/junction), new /datum/pipe_info/pipe("Heat Exchanger", /obj/machinery/atmospherics/components/unary/heat_exchanger), ) )) GLOBAL_LIST_INIT(disposal_pipe_recipes, list( "Disposal Pipes" = list( new /datum/pipe_info/disposal("Pipe", /obj/structure/disposalpipe/segment, PIPE_BENDABLE), new /datum/pipe_info/disposal("Junction", /obj/structure/disposalpipe/junction, PIPE_TRIN_M), new /datum/pipe_info/disposal("Y-Junction", /obj/structure/disposalpipe/junction/yjunction), new /datum/pipe_info/disposal("Sort Junction", /obj/structure/disposalpipe/sorting/mail, PIPE_TRIN_M), new /datum/pipe_info/disposal("Trunk", /obj/structure/disposalpipe/trunk), new /datum/pipe_info/disposal("Bin", /obj/machinery/disposal/bin, PIPE_ONEDIR), new /datum/pipe_info/disposal("Outlet", /obj/structure/disposaloutlet), new /datum/pipe_info/disposal("Chute", /obj/machinery/disposal/deliveryChute), ) )) /datum/pipe_info var/name var/icon var/icon_state var/id = -1 var/categoryId var/dirtype = PIPE_BENDABLE /datum/pipe_info/proc/Render(dispenser) return "
" dirsel += render_dir_img(NORTH,"vertical.png","Vertical") dirsel += render_dir_img(EAST,"horizontal.png","Horizontal") dirsel += "
" else dirsel+={" "} if(PIPE_BENDABLE) // Bent, N-W, N-E etc if(preview) user << browse_rsc(new /icon(preview, dir=NORTH), "vertical.png") user << browse_rsc(new /icon(preview, dir=EAST), "horizontal.png") user << browse_rsc(new /icon(preview, dir=NORTHWEST), "nw.png") user << browse_rsc(new /icon(preview, dir=NORTHEAST), "ne.png") user << browse_rsc(new /icon(preview, dir=SOUTHWEST), "sw.png") user << browse_rsc(new /icon(preview, dir=SOUTHEAST), "se.png") dirsel += ""
dirsel += render_dir_img(NORTH,"vertical.png","Vertical")
dirsel += render_dir_img(EAST,"horizontal.png","Horizontal")
dirsel += "
"
dirsel += render_dir_img(NORTHWEST,"nw.png","West to North")
dirsel += render_dir_img(NORTHEAST,"ne.png","North to East")
dirsel += "
"
dirsel += render_dir_img(SOUTHWEST,"sw.png","South to West")
dirsel += render_dir_img(SOUTHEAST,"se.png","East to South")
dirsel += "
"
dirsel += render_dir_img(NORTH,"s.png","West South East")
dirsel += render_dir_img(EAST,"w.png","North West South")
dirsel += "
"
dirsel += render_dir_img(SOUTH,"n.png","East North West")
dirsel += render_dir_img(WEST,"e.png","South East North")
dirsel += "
"
dirsel += render_dir_img(NORTH,"s.png","West South East")
dirsel += render_dir_img(EAST,"w.png","North West South")
dirsel += "
"
dirsel += render_dir_img(SOUTH,"n.png","East North West")
dirsel += render_dir_img(WEST,"e.png","South East North")
dirsel += "
"
dirsel += render_dir_img(SOUTHEAST,"sm.png","West South East", 1)
dirsel += render_dir_img(NORTHEAST,"wm.png","North West South", 1)
dirsel += "
"
dirsel += render_dir_img(NORTHWEST,"nm.png","East North West", 1)
dirsel += render_dir_img(SOUTHWEST,"em.png","South East North", 1)
dirsel += "
" dirsel += render_dir_img(NORTH,"n.png","North") dirsel += render_dir_img(EAST, "e.png","East") dirsel += render_dir_img(SOUTH,"s.png","South") dirsel += render_dir_img(WEST, "w.png","West") dirsel += "
" else dirsel+={" "} if(PIPE_ONEDIR) // Single icon_state (eg 4-way manifolds) if(preview) user << browse_rsc(new /icon(preview), "pipe.png") dirsel += "" dirsel += render_dir_img(SOUTH,"pipe.png","Pipe") dirsel += "
" else dirsel+={" "} var/datsytle = {" "} dat = datsytle + dirsel + dat var/datum/browser/popup = new(user, "pipedispenser", name, 300, 550) popup.set_content(dat) popup.open() return /obj/item/pipe_dispenser/Topic(href, href_list) if(!usr.canUseTopic(src)) usr << browse(null, "window=pipedispenser") return usr.set_machine(src) add_fingerprint(usr) if(href_list["screen"]) screen = text2num(href_list["screen"]) show_menu(usr) if(href_list["setdir"]) p_dir = text2num(href_list["setdir"]) if(href_list["flipped"]) p_flipped = text2num(href_list["flipped"]) else p_flipped = FALSE show_menu(usr) if(href_list["setlayer"]) if(!isnum(href_list["setlayer"])) piping_layer = text2num(href_list["setlayer"]) else piping_layer = href_list["setlayer"] show_menu(usr) if(href_list["eatpipes"]) p_class = EATING_MODE p_conntype=-1 p_dir=1 spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) if(href_list["paintpipes"]) p_class = PAINT_MODE p_conntype = -1 p_dir = 1 spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) if(href_list["set_color"]) paint_color = href_list["set_color"] spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) if(href_list["makepipe"]) p_type = text2path(href_list["makepipe"]) var/obj/item/pipe/path = text2path(href_list["type"]) p_conntype = initial(path.RPD_type) p_dir = NORTH p_class = ATMOS_MODE spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) if(href_list["makemeter"]) p_class = METER_MODE p_conntype = -1 p_dir = NORTH spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) if(href_list["dmake"]) p_type = text2path(href_list["dmake"]) p_conntype = text2num(href_list["type"]) p_dir = NORTH p_class = DISPOSALS_MODE spark_system.start() playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0) show_menu(usr) /obj/item/pipe_dispenser/pre_attackby(atom/A, mob/user) if(!user.IsAdvancedToolUser() || istype(A, /turf/open/space/transit)) return ..() var/atmos_piping_mode = p_class == ATMOS_MODE || p_class == METER_MODE var/temp_piping_layer if(atmos_piping_mode) if(istype(A, /obj/machinery/atmospherics)) var/obj/machinery/atmospherics/AM = A temp_piping_layer = AM.piping_layer A = get_turf(user) //make sure what we're clicking is valid for the current mode var/can_make_pipe = ((atmos_piping_mode || p_class == DISPOSALS_MODE) && (isturf(A)) || istype(A, /obj/structure/lattice) || istype(A, /obj/structure/girder)) //So that changing the menu settings doesn't affect the pipes already being built. var/queued_p_type = p_type var/queued_p_dir = p_dir var/queued_p_flipped = p_flipped . = FALSE switch(p_class) //if we've gotten this var, the target is valid if(PAINT_MODE) //Paint pipes if(!istype(A, /obj/machinery/atmospherics/pipe)) return ..() var/obj/machinery/atmospherics/pipe/P = A playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) P.paint(paint_colors[paint_color]) user.visible_message("[user] paints \the [P] [paint_color].","You paint \the [P] [paint_color].") return if(EATING_MODE) //Eating pipes if(!(istype(A, /obj/item/pipe) || istype(A, /obj/item/pipe_meter) || istype(A, /obj/structure/disposalconstruct))) return ..() to_chat(user, "You start destroying a pipe...") playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) if(do_after(user, 2, target = A)) activate() qdel(A) if(ATMOS_MODE) //Making pipes if(!can_make_pipe) return ..() to_chat(user, "You start building a pipe...") playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) if(do_after(user, 2, target = A)) activate() var/obj/machinery/atmospherics/path = queued_p_type var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe var/obj/item/pipe/P = new pipe_item_type(A, queued_p_type, queued_p_dir) if(queued_p_flipped) var/obj/item/pipe/trinary/flippable/F = P F.flipped = queued_p_flipped P.update() P.add_fingerprint(usr) if(!isnull(temp_piping_layer)) P.setPipingLayer(temp_piping_layer) else P.setPipingLayer(piping_layer) if(METER_MODE) //Making pipe meters if(!can_make_pipe) return ..() to_chat(user, "You start building a meter...") playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) if(do_after(user, 2, target = A)) activate() var/obj/item/pipe_meter/PM = new /obj/item/pipe_meter(get_turf(A)) if(!isnull(temp_piping_layer)) PM.setAttachLayer(temp_piping_layer) else PM.setAttachLayer(piping_layer) if(DISPOSALS_MODE) //Making disposals pipes if(!can_make_pipe) return ..() if(isclosedturf(A)) to_chat(user, "[src]'s error light flickers; there's something in the way!") return to_chat(user, "You start building a disposals pipe...") playsound(get_turf(src), 'sound/machines/click.ogg', 50, 1) if(do_after(user, 4, target = A)) var/obj/structure/disposalconstruct/C = new (A, queued_p_type, queued_p_dir, queued_p_flipped) if(!C.can_place()) to_chat(user, "There's not enough room to build that here!") qdel(C) return activate() C.add_fingerprint(usr) C.update_icon() return else return ..() /obj/item/pipe_dispenser/proc/activate() playsound(get_turf(src), 'sound/items/deconstruct.ogg', 50, 1) #undef PAINT_MODE #undef EATING_MODE #undef ATMOS_MODE #undef METER_MODE #undef DISPOSALS_MODE #undef CATEGORY_ATMOS #undef CATEGORY_DISPOSALS