From 500307b0348e9b629bdd4de765cff8a5f50be11c Mon Sep 17 00:00:00 2001 From: ACCount Date: Sun, 12 Nov 2017 09:30:17 +0300 Subject: [PATCH 1/3] Disposal pipes and pipe dispensers refactor --- code/__DEFINES/pipe_construction.dm | 22 +- code/game/machinery/pipe/construction.dm | 4 +- code/game/machinery/pipe/pipe_dispenser.dm | 46 +- code/game/objects/items/RPD.dm | 307 ++++--- code/game/objects/items/devices/scanners.dm | 3 + .../recycling/disposal-construction.dm | 284 ------- code/modules/recycling/disposal-structures.dm | 749 ------------------ .../{disposal-unit.dm => disposal/bin.dm} | 50 +- .../recycling/disposal/construction.dm | 231 ++++++ code/modules/recycling/disposal/eject.dm | 23 + code/modules/recycling/disposal/holder.dm | 128 +++ code/modules/recycling/disposal/outlet.dm | 88 ++ code/modules/recycling/disposal/pipe.dm | 345 ++++++++ .../recycling/disposal/pipe_sorting.dm | 102 +++ icons/obj/atmospherics/pipes/disposal.dmi | Bin 97981 -> 119069 bytes tgstation.dme | 10 +- 16 files changed, 1196 insertions(+), 1196 deletions(-) delete mode 100644 code/modules/recycling/disposal-construction.dm delete mode 100644 code/modules/recycling/disposal-structures.dm rename code/modules/recycling/{disposal-unit.dm => disposal/bin.dm} (92%) create mode 100644 code/modules/recycling/disposal/construction.dm create mode 100644 code/modules/recycling/disposal/eject.dm create mode 100644 code/modules/recycling/disposal/holder.dm create mode 100644 code/modules/recycling/disposal/outlet.dm create mode 100644 code/modules/recycling/disposal/pipe.dm create mode 100644 code/modules/recycling/disposal/pipe_sorting.dm diff --git a/code/__DEFINES/pipe_construction.dm b/code/__DEFINES/pipe_construction.dm index a671b548ba..641187e964 100644 --- a/code/__DEFINES/pipe_construction.dm +++ b/code/__DEFINES/pipe_construction.dm @@ -1,23 +1,17 @@ //Construction Categories -#define PIPE_BINARY 0 //2 directions: N/S, E/W +#define PIPE_STRAIGHT 0 //2 directions: N/S, E/W #define PIPE_BENDABLE 1 //6 directions: N/S, E/W, N/E, N/W, S/E, S/W #define PIPE_TRINARY 2 //4 directions: N/E/S, E/S/W, S/W/N, W/N/E #define PIPE_TRIN_M 3 //8 directions: N->S+E, S->N+E, N->S+W, S->N+W, E->W+S, W->E+S, E->W+N, W->E+N #define PIPE_UNARY 4 //4 directions: N, S, E, W -#define PIPE_QUAD 5 //1 directions: N/S/E/W +#define PIPE_ONEDIR 5 //1 direction: N/S/E/W -//Disposal piping numbers - do NOT hardcode these, use the defines -#define DISP_PIPE_STRAIGHT 0 -#define DISP_PIPE_BENT 1 -#define DISP_JUNCTION 2 -#define DISP_JUNCTION_FLIP 3 -#define DISP_YJUNCTION 4 -#define DISP_END_TRUNK 5 -#define DISP_END_BIN 6 -#define DISP_END_OUTLET 7 -#define DISP_END_CHUTE 8 -#define DISP_SORTJUNCTION 9 -#define DISP_SORTJUNCTION_FLIP 10 +//Disposal pipe relative connection directions +#define DISP_DIR_BASE 0 +#define DISP_DIR_LEFT 1 +#define DISP_DIR_RIGHT 2 +#define DISP_DIR_FLIP 4 +#define DISP_DIR_NONE 8 //Transit tubes #define TRANSIT_TUBE_STRAIGHT 0 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index 28c4b8c0aa..80181b656b 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -25,7 +25,7 @@ Buildable meters /obj/item/pipe/directional RPD_type = PIPE_UNARY /obj/item/pipe/binary - RPD_type = PIPE_BINARY + RPD_type = PIPE_STRAIGHT /obj/item/pipe/binary/bendable RPD_type = PIPE_BENDABLE /obj/item/pipe/trinary @@ -34,7 +34,7 @@ Buildable meters RPD_type = PIPE_TRIN_M var/flipped = FALSE /obj/item/pipe/quaternary - RPD_type = PIPE_QUAD + RPD_type = PIPE_ONEDIR /obj/item/pipe/examine(mob/user) ..() diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index fda66624b7..88246655d1 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -14,6 +14,7 @@ /obj/machinery/pipedispenser/attack_hand(mob/user) if(..()) return 1 +<<<<<<< HEAD var/dat = {" PIPING LAYER: --[piping_layer]++
Pipes:
@@ -42,7 +43,21 @@ PIPING LAYER: --[piping_layer]< Junction
Heat Exchanger
"} +======= + var/dat = "PIPING LAYER: --[piping_layer]++
" + var/recipes = GLOB.atmos_pipe_recipes + + for(var/category in recipes) + var/list/cat_recipes = recipes[category] + dat += "[category]:" user << browse("[src][dat]", "window=pipedispenser") onclose(user, "pipedispenser") @@ -56,9 +71,9 @@ PIPING LAYER: --[piping_layer]< return 1 usr.set_machine(src) add_fingerprint(usr) - if(href_list["make"]) + if(href_list["makepipe"]) if(wait < world.time) - var/p_type = text2path(href_list["make"]) + var/p_type = text2path(href_list["makepipe"]) var/p_dir = text2num(href_list["dir"]) var/obj/item/pipe/P = new (loc, p_type, p_dir) P.setPipingLayer(piping_layer) @@ -118,14 +133,6 @@ PIPING LAYER: --[piping_layer]< density = TRUE anchored = TRUE -/* -//Allow you to push disposal pipes into it (for those with density 1) -/obj/machinery/pipedispenser/disposal/Crossed(var/obj/structure/disposalconstruct/pipe as obj) - if(istype(pipe) && !pipe.anchored) - qdel(pipe) - -Nah -*/ //Allow you to drag-drop disposal pipes and transit tubes into it /obj/machinery/pipedispenser/disposal/MouseDrop_T(obj/structure/pipe, mob/usr) @@ -147,6 +154,7 @@ Nah if(..()) return 1 +<<<<<<< HEAD var/dat = {"Disposal Pipes

Pipe
Bent Pipe
@@ -158,6 +166,20 @@ Nah Chute
Sort Junction
"} +======= + var/dat = "" + var/recipes = GLOB.disposal_pipe_recipes + + for(var/category in recipes) + var/list/cat_recipes = recipes[category] + dat += "[category]:" +>>>>>>> 8b5cd7f... Disposal pipes and pipe dispensers refactor (#32435) user << browse("[src][dat]", "window=pipedispenser") return @@ -170,8 +192,8 @@ Nah add_fingerprint(usr) if(href_list["dmake"]) if(wait < world.time) - var/p_type = text2num(href_list["dmake"]) - var/obj/structure/disposalconstruct/C = new (loc,p_type) + var/p_type = text2path(href_list["dmake"]) + var/obj/structure/disposalconstruct/C = new (loc, p_type) if(!C.can_place()) to_chat(usr, "There's not enough room to build that here!") diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index 962c88aa3d..90558e86d8 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -1,5 +1,3 @@ - - /* CONTAINS: RPD @@ -14,37 +12,98 @@ RPD #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/id=-1 - var/categoryId - var/dir=SOUTH - var/dirtype = PIPE_BENDABLE + var/name var/icon var/icon_state - var/selected=0 + var/id = -1 + var/categoryId + var/dirtype = PIPE_BENDABLE + +/datum/pipe_info/proc/Render(dispenser) + return "
  • [name]
  • " + +/datum/pipe_info/proc/Params() + return "" + /datum/pipe_info/pipe categoryId = CATEGORY_ATMOS icon = 'icons/obj/atmospherics/pipes/pipe_item.dmi' -/datum/pipe_info/pipe/New(obj/machinery/atmospherics/path) +/datum/pipe_info/pipe/New(label, obj/machinery/atmospherics/path) + name = label id = path icon_state = initial(path.pipe_state) dirtype = initial(path.construction_type) -/datum/pipe_info/proc/Render(dispenser,label) +/datum/pipe_info/pipe/Params() + return "makepipe=[id]&type=[dirtype]" +<<<<<<< HEAD /datum/pipe_info/pipe/Render(dispenser,label,dir=NORTH) return "
  • [label]
  • " +======= +>>>>>>> 8b5cd7f... Disposal pipes and pipe dispensers refactor (#32435) /datum/pipe_info/meter categoryId = CATEGORY_ATMOS icon = 'icons/obj/atmospherics/pipes/simple.dmi' icon_state = "meterX" -/datum/pipe_info/meter/New() - return +/datum/pipe_info/meter/New(label) + name = label +/datum/pipe_info/meter/Params() + return "makemeter=1&type=[dirtype]" + +<<<<<<< HEAD /datum/pipe_info/meter/Render(dispenser,label) return "
  • [label]
  • " //hardcoding is no @@ -60,63 +119,32 @@ GLOBAL_LIST_INIT(disposalpipeID2State, list( "intake", "pipe-j1s", "pipe-j2s")) +======= +>>>>>>> 8b5cd7f... Disposal pipes and pipe dispensers refactor (#32435) /datum/pipe_info/disposal categoryId = CATEGORY_DISPOSALS icon = 'icons/obj/atmospherics/pipes/disposal.dmi' -/datum/pipe_info/disposal/New(var/pid,var/dt) - id=pid - icon_state=GLOB.disposalpipeID2State[pid+1] - dir = SOUTH - dirtype=dt - if(pidDISP_END_CHUTE) +/datum/pipe_info/disposal/New(label, obj/path, dt=PIPE_UNARY) + name = label + id = path + + icon_state = initial(path.icon_state) + if(ispath(path, /obj/structure/disposalpipe)) icon_state = "con[icon_state]" +<<<<<<< HEAD /datum/pipe_info/disposal/Render(dispenser,label) return "
  • [label]
  • " //avoid hardcoding. +======= + dirtype = dt + +/datum/pipe_info/disposal/Params() + return "dmake=[id]&type=[dirtype]" + +>>>>>>> 8b5cd7f... Disposal pipes and pipe dispensers refactor (#32435) -//find these defines in code\game\machinery\pipe\consruction.dm -GLOBAL_LIST_INIT(RPD_recipes, list( - "Pipes" = list( - "Pipe" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/simple), - "Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/manifold), - "Manual Valve" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/valve), - "Digital Valve" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/valve/digital), - "4-Way Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/manifold4w), - "Layer Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/layer_manifold), - ), - "Devices" = list( - "Connector" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/portables_connector), - "Unary Vent" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/vent_pump), - "Gas Pump" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/pump), - "Passive Gate" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/passive_gate), - "Volume Pump" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/binary/volume_pump), - "Scrubber" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/vent_scrubber), - "Injector" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/outlet_injector), - "Meter" = new /datum/pipe_info/meter(), - "Gas Filter" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/trinary/filter), - "Gas Mixer" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/trinary/mixer), - ), - "Heat Exchange" = list( - "Pipe" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/simple), - "Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/manifold), - "4-Way Manifold" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w), - "Junction" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/pipe/heat_exchanging/junction), - "Heat Exchanger" = new /datum/pipe_info/pipe(/obj/machinery/atmospherics/components/unary/heat_exchanger), - ), - "Disposal Pipes" = list( - "Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_STRAIGHT, PIPE_BINARY), - "Bent Pipe" = new /datum/pipe_info/disposal(DISP_PIPE_BENT, PIPE_TRINARY), - "Junction" = new /datum/pipe_info/disposal(DISP_JUNCTION, PIPE_TRINARY), - "Y-Junction" = new /datum/pipe_info/disposal(DISP_YJUNCTION, PIPE_TRINARY), - "Trunk" = new /datum/pipe_info/disposal(DISP_END_TRUNK, PIPE_TRINARY), - "Bin" = new /datum/pipe_info/disposal(DISP_END_BIN, PIPE_QUAD), - "Outlet" = new /datum/pipe_info/disposal(DISP_END_OUTLET, PIPE_UNARY), - "Chute" = new /datum/pipe_info/disposal(DISP_END_CHUTE, PIPE_UNARY), - "Sort Junction" = new /datum/pipe_info/disposal(DISP_SORTJUNCTION, PIPE_TRINARY), - ) -)) /obj/item/pipe_dispenser name = "Rapid Piping Device (RPD)" @@ -138,7 +166,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( var/p_type = /obj/machinery/atmospherics/pipe/simple var/p_conntype = PIPE_BENDABLE var/p_dir = 1 - var/p_flipped = 0 + var/p_flipped = FALSE var/p_class = ATMOS_MODE var/list/paint_colors = list( "grey" = rgb(255,255,255), @@ -179,6 +207,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( selected=" class=\"imglink selected\"" return "" + /obj/item/pipe_dispenser/proc/show_menu(mob/user) if(!user || !src) return 0 @@ -197,6 +226,7 @@ GLOBAL_LIST_INIT(RPD_recipes, list( dat += "Category:" var/icon/preview=null var/datbuild = "" - for(var/category in GLOB.RPD_recipes) - var/list/cat = GLOB.RPD_recipes[category] - for(var/label in cat) - var/datum/pipe_info/I = cat[label] + var/recipes = GLOB.atmos_pipe_recipes + GLOB.disposal_pipe_recipes + for(var/category in recipes) + var/list/cat_recipes = recipes[category] + for(var/i in cat_recipes) + var/datum/pipe_info/I = i var/found=0 if(I.id == p_type) - if((p_class == ATMOS_MODE || p_class == METER_MODE) && (istype(I, /datum/pipe_info/pipe) || istype(I, /datum/pipe_info/meter))) - found=1 - else if(p_class == DISPOSALS_MODE && istype(I, /datum/pipe_info/disposal)) - found=1 + if((p_class == ATMOS_MODE || p_class == METER_MODE) && I.categoryId == CATEGORY_ATMOS) + found = 1 + else if(p_class == DISPOSALS_MODE && I.categoryId == CATEGORY_DISPOSALS) + found = 1 if(found) - preview=new /icon(I.icon,I.icon_state) + preview = new /icon(I.icon, I.icon_state) if(screen == I.categoryId) if(I.id == p_type && p_class >= 0) - datbuild += "[label]" + datbuild += "
  • [I.name]
  • " else - datbuild += I.Render(src,label) + datbuild += I.Render(src) if(length(datbuild) > 0) dat += "[category]: