From 9976ad9ea1aacef79515aa82ba23d7b5e54e029c Mon Sep 17 00:00:00 2001 From: Citinited Date: Wed, 27 Feb 2019 18:58:54 +0000 Subject: [PATCH 1/3] Adds airlock spawners --- code/ATMOSPHERICS/atmospherics.dm | 6 + code/ATMOSPHERICS/datum_pipeline.dm | 8 +- code/__DEFINES/misc.dm | 5 + code/controllers/subsystem/air.dm | 4 +- .../airlock_controllers.dm | 3 +- .../effects/spawners/airlock_spawner.dm | 358 ++++++++++++++++++ icons/obj/airlock_spawner.dmi | Bin 0 -> 83226 bytes paradise.dme | 1 + 8 files changed, 381 insertions(+), 4 deletions(-) create mode 100644 code/game/objects/effects/spawners/airlock_spawner.dm create mode 100644 icons/obj/airlock_spawner.dmi diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ede0351993b..f10a77b8821 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -226,6 +226,12 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new()) var/turf/T = loc level = T.intact ? 2 : 1 add_fingerprint(usr) + if(!SSair.initialized) //If there's no atmos subsystem, we can't really initialize pipenets + SSair.machinery_to_construct.Add(src) + return + initialize_atmos_network() + +/obj/machinery/atmospherics/proc/initialize_atmos_network() atmos_init() var/list/nodes = pipeline_expansion() for(var/obj/machinery/atmospherics/A in nodes) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 43082c38ded..11ce632d917 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -100,6 +100,8 @@ var/pipenetwarnings = 10 addMachineryMember(A) /datum/pipeline/proc/merge(datum/pipeline/E) + if(!E) //Uh oh + return air.volume += E.air.volume members.Add(E.members) for(var/obj/machinery/atmospherics/pipe/S in E.members) @@ -115,10 +117,12 @@ var/pipenetwarnings = 10 /obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/A) var/datum/pipeline/P = returnPipenet(A) - P.addMember(A, src) + if(P) //Sanity checking + P.addMember(A, src) /obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/A) - parent.addMember(A, src) + if(parent && A) //Sanity checking + parent.addMember(A, src) /datum/pipeline/proc/temporarily_store_air() //Update individual gas_mixtures by volume ratio diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index dff9426c641..6de6113ac8c 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -170,7 +170,12 @@ for(type in view(range, dview_mob)) #define END_FOR_DVIEW dview_mob.loc = null +//Turf locational stuff #define get_turf(A) (get_step(A, 0)) +#define NORTH_OF_TURF(T) locate(T.x, T.y + 1, T.z) +#define EAST_OF_TURF(T) locate(T.x + 1, T.y, T.z) +#define SOUTH_OF_TURF(T) locate(T.x, T.y - 1, T.z) +#define WEST_OF_TURF(T) locate(T.x - 1, T.y, T.z) #define MIN_SUPPLIED_LAW_NUMBER 15 #define MAX_SUPPLIED_LAW_NUMBER 50 diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 79de45c3248..fe48494f321 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -30,6 +30,7 @@ SUBSYSTEM_DEF(air) var/list/networks = list() var/list/atmos_machinery = list() var/list/pipe_init_dirs_cache = list() + var/list/machinery_to_construct = list() @@ -67,9 +68,10 @@ SUBSYSTEM_DEF(air) setup_allturfs() setup_atmos_machinery(GLOB.machines) setup_pipenets(GLOB.machines) + for(var/obj/machinery/atmospherics/A in machinery_to_construct) + A.initialize_atmos_network() return ..() - /datum/controller/subsystem/air/fire(resumed = 0) var/timer = TICK_USAGE_REAL diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 5209003fc59..75988790a1a 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -14,7 +14,8 @@ /obj/machinery/embedded_controller/radio/airlock/Initialize() ..() - program = new/datum/computer/file/embedded_program/airlock(src) + spawn(25) //Necessary as we initialize before we can use a timer. We need a bit of delay as otherwise the program may grab incorrect values + program = new/datum/computer/file/embedded_program/airlock(src) //Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller diff --git a/code/game/objects/effects/spawners/airlock_spawner.dm b/code/game/objects/effects/spawners/airlock_spawner.dm new file mode 100644 index 00000000000..d6473c9e924 --- /dev/null +++ b/code/game/objects/effects/spawners/airlock_spawner.dm @@ -0,0 +1,358 @@ +/* +Spawners for mappers. Just plonk one down of the desired size and it will place the machinery for you. The red arrow things indicate where the chamber is. +This spawner places pipe leading up to the interior door, you will need to finish it off yourself with a connector, canister, and pipe connecting the two. It also assumes you already put in wall and floor. +*/ + +#define HALF_X round((tiles_in_x_direction - 1) * 0.5) //These are required so that the airlock can be in the middle of the chamber wall +#define HALF_Y round((tiles_in_y_direction - 1) * 0.5) +#define CHAMBER_LONG 1 +#define CHAMBER_SQUARE 2 +#define CHAMBER_BIGGER 3 +#define DOOR_NORMAL_PLACEMENT 1 +#define DOOR_FLIPPED_PLACEMENT 2 + +#define AIRPUMP_TAG "[id_to_link]_pump" +#define SENSOR_TAG "[id_to_link]_sensor" +#define OUTER_DOOR_TAG "[id_to_link]_outer" +#define INNER_DOOR_TAG "[id_to_link]_inner" + +/obj/effect/spawner/airlock + name = "1 by 1 airlock spawner (interior north, exterior south)" + desc = "If you can see this, there's probably a missing airlock here. Better tell an admin and report this on the github." + icon = 'icons/obj/airlock_spawner.dmi' + icon_state = "1x1_N_to_S" + layer = SPLASHSCREEN_PLANE //So we absolutely always appear above everything else. We delete ourself after spawning so this is fine + var/interior_direction = NORTH //This is also the direction the spawner will send the pipe + var/exterior_direction = SOUTH + var/opposite_interior_direction //We're checking these often enough for them to merit their own vars + var/interior_direction_cw + var/interior_direction_ccw + var/north_or_south_interior //Used a bit everywhere for locational stuff + var/north_or_south_exterior //Likewise + var/tiles_in_x_direction = 1 + var/tiles_in_y_direction = 1 + var/id_to_link + var/radio_frequency = 1379 + var/required_access = list(access_external_airlocks) + var/door_name = "external access" + var/door_type = /obj/machinery/door/airlock/external/glass + var/one_door_interior //For square airlocks, if you set this then a) only one door will spawn, and b) you can choose if the door should go opposite to how it normally goes. Please use the define + var/one_door_exterior //See above + +/obj/effect/spawner/airlock/Initialize() + ..() + forceMove(locate(x + 1, y + 1, z)) //Needs to move because our icon_state implies we are one turf to the northeast, when we're not + opposite_interior_direction = turn(interior_direction, 180) //Do it this way (instead of setting it directly) to avoid code mishaps + interior_direction_cw = turn(interior_direction, 90) + interior_direction_ccw = turn(interior_direction, 270) + if(interior_direction == NORTH || interior_direction == SOUTH) + north_or_south_interior = TRUE + if(exterior_direction == NORTH || exterior_direction == SOUTH) + north_or_south_exterior = TRUE + id_to_link = "[UID()]" //We want unique IDs, this will give us a unique ID + var/turf/turf_interior = get_airlock_location(interior_direction) + var/turf/turf_exterior = get_airlock_location(exterior_direction) + handle_door_creation(turf_interior, TRUE, one_door_interior) + handle_door_creation(turf_exterior, FALSE, one_door_exterior) + handle_control_placement() + handle_pipes_n_shit(turf_interior) + qdel(src) + +/obj/effect/spawner/airlock/proc/get_airlock_location(desired_direction) //Finds a turf to place an airlock and returns it, this turf will be in the middle of the relevant wall + var/turf/T + switch(desired_direction) + if(NORTH) + T = locate(x + HALF_X, y + tiles_in_y_direction, z) + if(SOUTH) + T = locate(x + HALF_X, y - 1, z) + if(EAST) + T = locate(x + tiles_in_x_direction, y + HALF_Y, z) + if(WEST) + T = locate(x - 1, y + HALF_Y, z) + return T + +/obj/effect/spawner/airlock/proc/handle_door_creation(turf/T, is_this_an_interior_airlock, one_door_only) //Creates a door (or two) and also creates a button + var/obj/machinery/door/airlock/A + if(one_door_only != DOOR_FLIPPED_PLACEMENT) + A = new door_type(T) + handle_door_stuff(A, is_this_an_interior_airlock) + var/obj/machinery/access_button/the_button = spawn_button(T, is_this_an_interior_airlock ? interior_direction : exterior_direction) + if(one_door_only == DOOR_NORMAL_PLACEMENT) //We only need one door, we are done + return + if(!(tiles_in_x_direction % 2) && (is_this_an_interior_airlock && north_or_south_interior || !is_this_an_interior_airlock && north_or_south_exterior)) //Handle extra airlock for aesthetics + A = new door_type(get_step(T, EAST)) + handle_door_stuff(A, is_this_an_interior_airlock) + if(one_door_only == DOOR_FLIPPED_PLACEMENT) + the_button.forceMove(get_step(the_button, EAST)) + else if(!(tiles_in_y_direction % 2) && (is_this_an_interior_airlock && !north_or_south_interior || !is_this_an_interior_airlock && !north_or_south_exterior)) //Handle extra airlock for aesthetics + A = new door_type(get_step(T, NORTH)) + handle_door_stuff(A, is_this_an_interior_airlock) + if(one_door_only == DOOR_FLIPPED_PLACEMENT) + the_button.forceMove(get_step(the_button, NORTH)) + +/obj/effect/spawner/airlock/proc/handle_door_stuff(obj/machinery/door/airlock/A, is_this_an_interior_airlock) //This sets up the door vars correctly and then locks it before first use + A.set_frequency(radio_frequency) + A.id_tag = is_this_an_interior_airlock ? INNER_DOOR_TAG : OUTER_DOOR_TAG + A.req_access = required_access + A.name = door_name + A.lock() + +/obj/effect/spawner/airlock/proc/spawn_button(turf/T, some_direction) + var/obj/machinery/access_button/the_button = new(T) + the_button.master_tag = id_to_link + the_button.set_frequency(radio_frequency) + switch(some_direction) + if(NORTH) + the_button.pixel_x -= 25 + the_button.pixel_y = 7 + if(EAST) + the_button.pixel_x = 7 + the_button.pixel_y = -25 + if(SOUTH) + the_button.pixel_x -= 25 + the_button.pixel_y -= 7 + if(WEST) + the_button.pixel_x -= 7 + the_button.pixel_y -= 25 + the_button.req_access = required_access + return the_button + +/obj/effect/spawner/airlock/proc/handle_control_placement() //Stick the sensor and controller on the same bit of wall, this will ONLY be unsuitable if airlocks are on both the south and west turfs + var/turf/T = get_turf(src) + var/obj/machinery/airlock_sensor/AS = new(T) + var/obj/machinery/embedded_controller/radio/airlock/airlock_controller/AC = new(T) + AC.id_tag = id_to_link + AC.set_frequency(radio_frequency) + AC.tag_airpump = AIRPUMP_TAG + AC.tag_chamber_sensor = SENSOR_TAG + AC.tag_exterior_door = OUTER_DOOR_TAG + AC.tag_interior_door = INNER_DOOR_TAG + AC.req_access = required_access + AS.id_tag = SENSOR_TAG + AS.set_frequency(radio_frequency) + if(interior_direction != WEST && exterior_direction != WEST) //If west wall is free, place stuff there + AC.pixel_x -= 25 + AC.pixel_y += 9 + AS.pixel_x -= 25 + AS.pixel_y -= 9 + else if(interior_direction != SOUTH && exterior_direction != SOUTH) //If south wall is free, place stuff there + AC.pixel_x += 9 + AC.pixel_y -= 25 + AS.pixel_x -= 9 + AS.pixel_y -= 25 + else //Send them over to the other side of the chamber + T = locate(x + tiles_in_x_direction - 1, y + tiles_in_y_direction - 1, z) + AC.forceMove(T) + AS.forceMove(T) + AC.pixel_x += 25 + AC.pixel_y += 9 + AS.pixel_x += 25 + AS.pixel_y -= 9 + +/obj/effect/spawner/airlock/proc/handle_pipes_n_shit(turf/T) //This places all required piping down, then properly initializes it. T is the turf that the interior airlock occupies + var/list/initialize_these_pipes = list() //All the pipes and stuff that needs to be initialized properly. We'll use a list for neater code + var/turf/below_T = get_step(T, opposite_interior_direction) + var/obj/machinery/atmospherics/pipe/manifold/visible/M + var/obj/machinery/atmospherics/pipe/manifold4w/visible/M4W + var/obj/machinery/atmospherics/unary/vent_pump/high_volume/VP + + var/chamber_shape //This determines the layout of the chamber and therefore how many vents should be present + if(tiles_in_x_direction == 2 && tiles_in_y_direction == 2) + chamber_shape = CHAMBER_SQUARE + else if(tiles_in_x_direction > 1 && tiles_in_y_direction > 1) + chamber_shape = CHAMBER_BIGGER + else + chamber_shape = CHAMBER_LONG + + switch(chamber_shape) + if(CHAMBER_LONG) //Easy enough, place a single vent + VP = new(below_T) + VP.dir = interior_direction + initialize_these_pipes.Add(VP) + if(CHAMBER_SQUARE) //We need a T-manifold and two vents for this + M = new(below_T) + initialize_these_pipes.Add(M) + VP = new(get_step(below_T, opposite_interior_direction)) + VP.dir = interior_direction + initialize_these_pipes.Add(VP) + VP = new(north_or_south_interior ? EAST_OF_TURF(below_T) : NORTH_OF_TURF(below_T)) + VP.dir = turn(interior_direction, interior_direction == SOUTH || interior_direction == EAST ? -90 : 90) + initialize_these_pipes.Add(VP) + if(CHAMBER_BIGGER) //We need a central column of manifolds and a vent either side of each manifold + var/depth = north_or_south_interior ? tiles_in_y_direction : tiles_in_x_direction + var/turf/put_thing_here = below_T + for(var/i in 1 to depth) + if(i != depth)//We're placing more pipe later, so we need a 4-way manifold + M4W = new(put_thing_here) + initialize_these_pipes.Add(M4W) + else //We stop here, so place a T-manifold down + M = new(put_thing_here) + M.on_construction(opposite_interior_direction, interior_direction_cw | interior_direction | interior_direction_ccw, null) + VP = new(get_step(put_thing_here, interior_direction_cw)) + VP.dir = interior_direction_ccw + initialize_these_pipes.Add(VP) + VP = new(get_step(put_thing_here, interior_direction_ccw)) + VP.dir = interior_direction_cw + initialize_these_pipes.Add(VP) + put_thing_here = get_step(put_thing_here, opposite_interior_direction) //Now move the turf we're generating stuff from 1 forward + + var/obj/machinery/atmospherics/pipe/simple/visible/P = new(T) + initialize_these_pipes.Add(P) + + var/two_way_pipe = interior_direction | opposite_interior_direction + + for(var/obj/machinery/atmospherics/pipe/simple/visible/HS in initialize_these_pipes) + HS.on_construction(interior_direction, two_way_pipe, null) + for(var/obj/machinery/atmospherics/pipe/manifold4w/visible/HM4W in initialize_these_pipes) + HM4W.on_construction(interior_direction, NORTH | SOUTH | EAST | WEST, null) + for(var/obj/machinery/atmospherics/pipe/manifold/visible/HM in initialize_these_pipes) + HM.on_construction(north_or_south_interior ? WEST : SOUTH, NORTH | EAST | (north_or_south_interior ? SOUTH : WEST), null) + for(var/obj/machinery/atmospherics/unary/vent_pump/high_volume/HVP in initialize_these_pipes) + HVP.on_construction(HVP.dir, HVP.dir, null) + HVP.id_tag = AIRPUMP_TAG + HVP.set_frequency(radio_frequency) + + +//Premade airlocks for mappers, probably won't need all of these but whatever +/obj/effect/spawner/airlock/s_to_n + name = "1 by 1 airlock spawner (interior south, exterior north)" + icon_state = "1x1_S_to_N" + interior_direction = SOUTH + exterior_direction = NORTH +/obj/effect/spawner/airlock/e_to_w + name = "1 by 1 airlock spawner (interior east, exterior west)" + icon_state = "1x1_E_to_W" + interior_direction = EAST + exterior_direction = WEST +/obj/effect/spawner/airlock/w_to_e + name = "1 by 1 airlock spawner (interior west, exterior east)" + icon_state = "1x1_W_to_E" + interior_direction = WEST + exterior_direction = EAST + +/obj/effect/spawner/airlock/long //Long and thin + name = "long airlock spawner (interior north, exterior south)" + icon_state = "1x2_N_to_S" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/s_to_n/long + name = "long airlock spawner (interior south, exterior north)" + icon_state = "1x2_S_to_N" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/e_to_w/long + name = "long airlock spawner (interior east, exterior west)" + icon_state = "1x2_E_to_W" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/w_to_e/long + name = "long airlock spawner (interior west, exterior east)" + icon_state = "1x2_W_to_E" + tiles_in_x_direction = 2 + +/obj/effect/spawner/airlock/long/square //Square + name = "square airlock spawner (interior north, exterior south)" + icon_state = "2x2_N_to_S" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/s_to_n/long/square + name = "square airlock spawner (interior south, exterior north)" + icon_state = "2x2_S_to_N" + tiles_in_x_direction = 2 +/obj/effect/spawner/airlock/e_to_w/long/square + name = "square airlock spawner (interior east, exterior west)" + icon_state = "2x2_E_to_W" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/w_to_e/long/square + name = "square airlock spawner (interior west, exterior east)" + icon_state = "2x2_W_to_E" + tiles_in_y_direction = 2 +/obj/effect/spawner/airlock/long/square/e_to_s + name = "square airlock spawner (interior east, exterior south)" + icon_state = "2x2_E_to_S" + interior_direction = EAST + exterior_direction = SOUTH + +/obj/effect/spawner/airlock/long/square/wide + name = "rectangular airlock spawner (interior north, exterior south)" + icon_state = "3x2_N_to_S" + tiles_in_x_direction = 3 +/obj/effect/spawner/airlock/s_to_n/long/square/wide + name = "rectangular airlock spawner (interior south, exterior north)" + icon_state = "3x2_S_to_N" + tiles_in_x_direction = 3 +/obj/effect/spawner/airlock/e_to_w/long/square/wide + name = "rectangular airlock spawner (interior east, exterior west)" + icon_state = "3x2_E_to_W" + tiles_in_y_direction = 3 +/obj/effect/spawner/airlock/w_to_e/long/square/wide + name = "rectangular airlock spawner (interior west, exterior east)" + icon_state = "3x2_W_to_E" + tiles_in_y_direction = 3 + +/obj/effect/spawner/airlock/long/square/three + name = "3 by 3 square airlock spawner (interior north, exterior south)" + icon_state = "3x3_N_to_S" + interior_direction = NORTH + exterior_direction = SOUTH + tiles_in_x_direction = 3 + tiles_in_y_direction = 3 + +/obj/effect/spawner/airlock/e_to_w/arrivals + required_access = null + +/obj/effect/spawner/airlock/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/e_to_w/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/s_to_n/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/long/engineer + required_access = list(access_engine) + door_name = "engineering external access" +/obj/effect/spawner/airlock/long/square/engine + required_access = list(access_engine) + door_name = "engine external access" + icon_state = "2x2_N_to_S_leftdoors" + door_type = /obj/machinery/door/airlock/external + one_door_interior = DOOR_NORMAL_PLACEMENT + one_door_exterior = DOOR_NORMAL_PLACEMENT +/obj/effect/spawner/airlock/long/square/engine/reversed + icon_state = "2x2_N_to_S_rightdoors" + one_door_interior = DOOR_FLIPPED_PLACEMENT + one_door_exterior = DOOR_FLIPPED_PLACEMENT + +/obj/effect/spawner/airlock/w_to_e/long/square/wide/mining + door_name = "mining external access" + required_access = list(access_mining) +/obj/effect/spawner/airlock/long/square/wide/mining + door_name = "mining external access" + required_access = list(access_mining) + +/obj/effect/spawner/airlock/e_to_w/minisat + door_name = "minisat external access" + required_access = list(access_minisat) +/obj/effect/spawner/airlock/long/square/e_to_s/telecoms + door_name = "telecoms external access" + required_access = list(access_tcomsat, access_external_airlocks) + door_type = /obj/machinery/door/airlock/external + +/obj/effect/spawner/airlock/long/square/three/syndicate + name = "3 by 3 square airlock spawner (interior west, exterior north)" + icon_state = "3x3_W_to_N" + interior_direction = WEST + exterior_direction = NORTH + door_name = "ship external access" + req_access = list(access_syndicate) + door_type = /obj/machinery/door/airlock/external + +#undef HALF_X +#undef HALF_Y +#undef CHAMBER_LONG +#undef CHAMBER_SQUARE +#undef CHAMBER_BIGGER +#undef DOOR_NORMAL_PLACEMENT +#undef DOOR_FLIPPED_PLACEMENT +#undef AIRPUMP_TAG +#undef SENSOR_TAG +#undef OUTER_DOOR_TAG +#undef INNER_DOOR_TAG diff --git a/icons/obj/airlock_spawner.dmi b/icons/obj/airlock_spawner.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9815b3f42b1c3231cc0fb17e03ac99a26e94fdd4 GIT binary patch literal 83226 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 literal 0 HcmV?d00001 diff --git a/paradise.dme b/paradise.dme index f86c7c479c6..777e48f20aa 100644 --- a/paradise.dme +++ b/paradise.dme @@ -798,6 +798,7 @@ #include "code\game\objects\effects\effect_system\effects_smoke.dm" #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" +#include "code\game\objects\effects\spawners\airlock_spawner.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\lootdrop.dm" From cd68096a8f82bc4a2782078e810249f4218446a4 Mon Sep 17 00:00:00 2001 From: Citinited Date: Sat, 6 Apr 2019 15:52:53 +0100 Subject: [PATCH 2/3] Handles airlock controller spawning slightly betterer --- .../airlock_controllers.dm | 19 ++++++++++++++++--- .../effects/spawners/airlock_spawner.dm | 8 +------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 75988790a1a..2580eaf760b 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -14,8 +14,7 @@ /obj/machinery/embedded_controller/radio/airlock/Initialize() ..() - spawn(25) //Necessary as we initialize before we can use a timer. We need a bit of delay as otherwise the program may grab incorrect values - program = new/datum/computer/file/embedded_program/airlock(src) + program = new/datum/computer/file/embedded_program/airlock(src) //Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks /obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller @@ -77,6 +76,21 @@ name = "Airlock Controller" tag_secure = 1 +/obj/machinery/embedded_controller/radio/airlock/airlock_controller/New(loc, given_id_tag, given_frequency, given_tag_exterior_door, given_tag_interior_door, given_tag_airpump, given_tag_chamber_sensor) + if(given_id_tag) + id_tag = given_id_tag + if(given_frequency) + set_frequency(given_frequency) + if(given_tag_exterior_door) + tag_exterior_door = given_tag_exterior_door + if(given_tag_interior_door) + tag_interior_door = given_tag_interior_door + if(given_tag_airpump) + tag_airpump = given_tag_airpump + if(given_tag_chamber_sensor) + tag_chamber_sensor = given_tag_chamber_sensor + ..() + /obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) ui = SSnanoui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) @@ -130,7 +144,6 @@ name = "Access Controller" tag_secure = 1 - /obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon() if(on && program) if(program.memory["processing"]) diff --git a/code/game/objects/effects/spawners/airlock_spawner.dm b/code/game/objects/effects/spawners/airlock_spawner.dm index d6473c9e924..90156c2926d 100644 --- a/code/game/objects/effects/spawners/airlock_spawner.dm +++ b/code/game/objects/effects/spawners/airlock_spawner.dm @@ -120,13 +120,7 @@ This spawner places pipe leading up to the interior door, you will need to finis /obj/effect/spawner/airlock/proc/handle_control_placement() //Stick the sensor and controller on the same bit of wall, this will ONLY be unsuitable if airlocks are on both the south and west turfs var/turf/T = get_turf(src) var/obj/machinery/airlock_sensor/AS = new(T) - var/obj/machinery/embedded_controller/radio/airlock/airlock_controller/AC = new(T) - AC.id_tag = id_to_link - AC.set_frequency(radio_frequency) - AC.tag_airpump = AIRPUMP_TAG - AC.tag_chamber_sensor = SENSOR_TAG - AC.tag_exterior_door = OUTER_DOOR_TAG - AC.tag_interior_door = INNER_DOOR_TAG + var/obj/machinery/embedded_controller/radio/airlock/airlock_controller/AC = new(T, id_to_link, radio_frequency, OUTER_DOOR_TAG, INNER_DOOR_TAG, AIRPUMP_TAG, SENSOR_TAG) AC.req_access = required_access AS.id_tag = SENSOR_TAG AS.set_frequency(radio_frequency) From d3585beb8b68ddb5a96b3bac0bb88b5b8d1352cb Mon Sep 17 00:00:00 2001 From: Citinited Date: Tue, 7 May 2019 21:59:43 +0100 Subject: [PATCH 3/3] Code cleanup, runtime fixing --- code/ATMOSPHERICS/datum_pipeline.dm | 8 +- .../airlock_controllers.dm | 2 +- .../effects/spawners/airlock_spawner.dm | 79 +++++++++---------- 3 files changed, 39 insertions(+), 50 deletions(-) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 11ce632d917..43082c38ded 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -100,8 +100,6 @@ var/pipenetwarnings = 10 addMachineryMember(A) /datum/pipeline/proc/merge(datum/pipeline/E) - if(!E) //Uh oh - return air.volume += E.air.volume members.Add(E.members) for(var/obj/machinery/atmospherics/pipe/S in E.members) @@ -117,12 +115,10 @@ var/pipenetwarnings = 10 /obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/A) var/datum/pipeline/P = returnPipenet(A) - if(P) //Sanity checking - P.addMember(A, src) + P.addMember(A, src) /obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/A) - if(parent && A) //Sanity checking - parent.addMember(A, src) + parent.addMember(A, src) /datum/pipeline/proc/temporarily_store_air() //Update individual gas_mixtures by volume ratio diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 2580eaf760b..b1a6f96e2eb 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -76,7 +76,7 @@ name = "Airlock Controller" tag_secure = 1 -/obj/machinery/embedded_controller/radio/airlock/airlock_controller/New(loc, given_id_tag, given_frequency, given_tag_exterior_door, given_tag_interior_door, given_tag_airpump, given_tag_chamber_sensor) +/obj/machinery/embedded_controller/radio/airlock/airlock_controller/Initialize(mapload, given_id_tag, given_frequency, given_tag_exterior_door, given_tag_interior_door, given_tag_airpump, given_tag_chamber_sensor) if(given_id_tag) id_tag = given_id_tag if(given_frequency) diff --git a/code/game/objects/effects/spawners/airlock_spawner.dm b/code/game/objects/effects/spawners/airlock_spawner.dm index 90156c2926d..496f02c61d1 100644 --- a/code/game/objects/effects/spawners/airlock_spawner.dm +++ b/code/game/objects/effects/spawners/airlock_spawner.dm @@ -54,8 +54,8 @@ This spawner places pipe leading up to the interior door, you will need to finis var/turf/turf_exterior = get_airlock_location(exterior_direction) handle_door_creation(turf_interior, TRUE, one_door_interior) handle_door_creation(turf_exterior, FALSE, one_door_exterior) + handle_pipes_creation(turf_interior) handle_control_placement() - handle_pipes_n_shit(turf_interior) qdel(src) /obj/effect/spawner/airlock/proc/get_airlock_location(desired_direction) //Finds a turf to place an airlock and returns it, this turf will be in the middle of the relevant wall @@ -143,13 +143,10 @@ This spawner places pipe leading up to the interior door, you will need to finis AS.pixel_x += 25 AS.pixel_y -= 9 -/obj/effect/spawner/airlock/proc/handle_pipes_n_shit(turf/T) //This places all required piping down, then properly initializes it. T is the turf that the interior airlock occupies - var/list/initialize_these_pipes = list() //All the pipes and stuff that needs to be initialized properly. We'll use a list for neater code +/obj/effect/spawner/airlock/proc/handle_pipes_creation(turf/T) //This places all required piping down, then properly initializes it. T is the turf that the interior airlock occupies var/turf/below_T = get_step(T, opposite_interior_direction) - var/obj/machinery/atmospherics/pipe/manifold/visible/M - var/obj/machinery/atmospherics/pipe/manifold4w/visible/M4W - var/obj/machinery/atmospherics/unary/vent_pump/high_volume/VP + var/two_way_pipe = interior_direction | opposite_interior_direction var/chamber_shape //This determines the layout of the chamber and therefore how many vents should be present if(tiles_in_x_direction == 2 && tiles_in_y_direction == 2) chamber_shape = CHAMBER_SQUARE @@ -157,54 +154,50 @@ This spawner places pipe leading up to the interior door, you will need to finis chamber_shape = CHAMBER_BIGGER else chamber_shape = CHAMBER_LONG - + pipe_creation_helper(/obj/machinery/atmospherics/pipe/simple/visible, T, interior_direction, two_way_pipe) switch(chamber_shape) if(CHAMBER_LONG) //Easy enough, place a single vent - VP = new(below_T) - VP.dir = interior_direction - initialize_these_pipes.Add(VP) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + below_T, + interior_direction) if(CHAMBER_SQUARE) //We need a T-manifold and two vents for this - M = new(below_T) - initialize_these_pipes.Add(M) - VP = new(get_step(below_T, opposite_interior_direction)) - VP.dir = interior_direction - initialize_these_pipes.Add(VP) - VP = new(north_or_south_interior ? EAST_OF_TURF(below_T) : NORTH_OF_TURF(below_T)) - VP.dir = turn(interior_direction, interior_direction == SOUTH || interior_direction == EAST ? -90 : 90) - initialize_these_pipes.Add(VP) + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold/visible, + below_T, + north_or_south_interior ? WEST : SOUTH, + NORTH | EAST | (north_or_south_interior ? SOUTH : WEST)) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(below_T, opposite_interior_direction), + interior_direction) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + north_or_south_interior ? EAST_OF_TURF(below_T) : NORTH_OF_TURF(below_T), + turn(interior_direction, interior_direction == SOUTH || interior_direction == EAST ? -90 : 90)) if(CHAMBER_BIGGER) //We need a central column of manifolds and a vent either side of each manifold var/depth = north_or_south_interior ? tiles_in_y_direction : tiles_in_x_direction var/turf/put_thing_here = below_T for(var/i in 1 to depth) if(i != depth)//We're placing more pipe later, so we need a 4-way manifold - M4W = new(put_thing_here) - initialize_these_pipes.Add(M4W) + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold4w/visible, put_thing_here, interior_direction, NORTH | EAST | SOUTH | WEST) else //We stop here, so place a T-manifold down - M = new(put_thing_here) - M.on_construction(opposite_interior_direction, interior_direction_cw | interior_direction | interior_direction_ccw, null) - VP = new(get_step(put_thing_here, interior_direction_cw)) - VP.dir = interior_direction_ccw - initialize_these_pipes.Add(VP) - VP = new(get_step(put_thing_here, interior_direction_ccw)) - VP.dir = interior_direction_cw - initialize_these_pipes.Add(VP) + pipe_creation_helper(/obj/machinery/atmospherics/pipe/manifold/visible, + put_thing_here, + opposite_interior_direction, + interior_direction_cw | interior_direction | interior_direction_ccw) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(put_thing_here, interior_direction_cw), + interior_direction_ccw) + pipe_creation_helper(/obj/machinery/atmospherics/unary/vent_pump/high_volume, + get_step(put_thing_here, interior_direction_ccw), + interior_direction_cw) put_thing_here = get_step(put_thing_here, opposite_interior_direction) //Now move the turf we're generating stuff from 1 forward - var/obj/machinery/atmospherics/pipe/simple/visible/P = new(T) - initialize_these_pipes.Add(P) - - var/two_way_pipe = interior_direction | opposite_interior_direction - - for(var/obj/machinery/atmospherics/pipe/simple/visible/HS in initialize_these_pipes) - HS.on_construction(interior_direction, two_way_pipe, null) - for(var/obj/machinery/atmospherics/pipe/manifold4w/visible/HM4W in initialize_these_pipes) - HM4W.on_construction(interior_direction, NORTH | SOUTH | EAST | WEST, null) - for(var/obj/machinery/atmospherics/pipe/manifold/visible/HM in initialize_these_pipes) - HM.on_construction(north_or_south_interior ? WEST : SOUTH, NORTH | EAST | (north_or_south_interior ? SOUTH : WEST), null) - for(var/obj/machinery/atmospherics/unary/vent_pump/high_volume/HVP in initialize_these_pipes) - HVP.on_construction(HVP.dir, HVP.dir, null) - HVP.id_tag = AIRPUMP_TAG - HVP.set_frequency(radio_frequency) +/obj/effect/spawner/airlock/proc/pipe_creation_helper(path, location, direction, initialization_directions) //Create some kind of atmospherics machinery and initialize it properly + var/obj/machinery/atmospherics/A = new path(location) + A.dir = direction + A.on_construction(A.dir, initialization_directions ? initialization_directions : A.dir) + if(istype(A, /obj/machinery/atmospherics/unary/vent_pump/high_volume)) + var/obj/machinery/atmospherics/unary/vent_pump/high_volume/created_pump = A + created_pump.id_tag = AIRPUMP_TAG + created_pump.set_frequency(radio_frequency) //Premade airlocks for mappers, probably won't need all of these but whatever