From 4f665930ccbb9834e5e612f77b7dbeaf2d359b5f Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Wed, 15 Jan 2020 19:32:38 -0700 Subject: [PATCH] a a --- .../network_builder/_network_builder.dm | 14 ++-- .../network_builder/atmos_pipe.dm | 18 +++-- .../network_builder/power_cables.dm | 72 ++++++++++-------- icons/effects/mapping_helpers.dmi | Bin 6544 -> 6878 bytes tgstation.dme | 11 +-- 5 files changed, 63 insertions(+), 52 deletions(-) diff --git a/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm b/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm index b5cd470a32..585e05bd57 100644 --- a/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm +++ b/code/modules/mapping/mapping_helpers/network_builder/_network_builder.dm @@ -1,13 +1,15 @@ //Builds networks like power cables/atmos lines/etc //Just a holder parent type for now.. -/obj/effect/network_builder +/obj/effect/mapping_helpers/network_builder /// set var to true to not del on lateload var/custom_spawned = FALSE + icon = 'icons/effects/mapping_helpers.dmi' + /// what directions we know connections are in var/list/network_directions -/obj/effect/network_builder/Initialize(mapload) +/obj/effect/mapping_helpers/network_builder/Initialize(mapload) . = ..() var/conflict = check_duplicates() if(conflict) @@ -22,17 +24,17 @@ return INITIALIZE_HINT_LATELOAD /// How this works: On LateInitialize, detect all directions that this should be applicable to, and do what it needs to do, and then inform all network builders in said directions that it's been around since it won't be around afterwards. -/obj/effect/network_builder/LateInitialize() +/obj/effect/mapping_helpers/network_builder/LateInitialize() scan_directions() build_network() if(!custom_spawned) qdel(src) -/obj/effect/network_builder/proc/check_duplicates() +/obj/effect/mapping_helpers/network_builder/proc/check_duplicates() CRASH("Base abstract network builder tried to check duplicates.") -/obj/effect/network_builder/proc/scan_directions() +/obj/effect/mapping_helpers/network_builder/proc/scan_directions() CRASH("Base abstract network builder tried to scan directions.") -/obj/effect/network_builder/proc/build_network() +/obj/effect/mapping_helpers/network_builder/proc/build_network() CRASH("Base abstract network builder tried to build network.") diff --git a/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm b/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm index 3c7bcc3bb0..0c39e517b3 100644 --- a/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm +++ b/code/modules/mapping/mapping_helpers/network_builder/atmos_pipe.dm @@ -5,7 +5,7 @@ /* Automatically places pipes on init based on any pipes connecting to it and adjacent helpers. Only supports cardinals. * Conflicts with ANY PIPE ON ITS LAYER, as well as atmos network build helpers on the same layer, as well as any pipe on all layers. Do those manually. */ -/obj/effect/network_builder/atmos_pipe +/obj/effect/mapping_helpers/network_builder/atmos_pipe name = "atmos pipe autobuilder" icon_state = "atmospipebuilder" @@ -20,8 +20,10 @@ color = null -/obj/effect/network_builder/atmos_pipe/check_duplicates() - for(var/obj/effect/network_builder/atmos_pipe/other in loc) +/obj/effect/mapping_helpers/network_builder/atmos_pipe/check_duplicates() + for(var/obj/effect/mapping_helpers/network_builder/atmos_pipe/other in loc) + if(other == src) + continue if(other.pipe_layer == pipe_layer) return other for(var/obj/machinery/atmospherics/A in loc) @@ -32,7 +34,7 @@ return FALSE /// Scans directions, sets network_directions to have every direction that we can link to. If there's another power cable builder detected, make sure they know we're here by adding us to their cable directions list before we're deleted. -/obj/effect/network_builder/atmos_pipe/scan_directions() +/obj/effect/mapping_helpers/network_builder/atmos_pipe/scan_directions() var/turf/T for(var/i in GLOB.cardinals) if(i in network_directions) @@ -41,7 +43,7 @@ if(!T) continue var/found = FALSE - for(var/obj/effect/network_builder/atmos_pipe/other in T) + for(var/obj/effect/mapping_helpers/network_builder/atmos_pipe/other in T) if(other.pipe_layer == pipe_layer) network_directions += i LAZYADD(other.network_directions, turn(i, 180)) @@ -56,7 +58,7 @@ return network_directions /// Directions should only ever have cardinals. -/obj/effect/network_builder/atmos_pipe/build_network(list/directions = network_directions) +/obj/effect/mapping_helpers/network_builder/atmos_pipe/build_network(list/directions = network_directions) if(!length(directions) <= 1) return var/obj/machinery/atmospherics/pipe/built @@ -74,7 +76,7 @@ built.SetInitDirections() built.on_construction(pipe_color, pipe_layer) -/obj/effect/network_builder/atmos_pipe/distro +/obj/effect/mapping_helpers/network_builder/atmos_pipe/distro name = "distro line autobuilder" pipe_layer = PIPING_LAYER_MIN pixel_x = -PIPING_LAYER_P_X @@ -82,7 +84,7 @@ pipe_color = rgb(130,43,255) color = rgb(130,43,255) -/obj/effect/network_builder/atmos_pipe/scrubbers +/obj/effect/mapping_helpers/network_builder/atmos_pipe/scrubbers name = "scrubbers line autobuilder" pipe_layer = PIPING_LAYER_MAX pixel_x = PIPING_LAYER_P_X diff --git a/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm b/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm index f6da49c255..419004468a 100644 --- a/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm +++ b/code/modules/mapping/mapping_helpers/network_builder/power_cables.dm @@ -3,7 +3,7 @@ #define KNOT_FORCED 2 /// Automatically links on init to power cables and other cable builder helpers. Only supports cardinals. -/obj/effect/network_builder/power_cable +/obj/effect/mapping_helpers/network_builder/power_cable name = "power line autobuilder" icon_state = "powerlinebuilder" @@ -16,11 +16,17 @@ var/cable_color = "red" -/obj/effect/network_builder/power_cable/check_duplicates() - return (locate(/obj/structure/cable) in loc) || (locate(/obj/effect/network_builder/power_cable) in loc) +/obj/effect/mapping_helpers/network_builder/power_cable/check_duplicates() + var/obj/structure/cable/C = locate() in loc + if(C) + return C + for(var/obj/effect/mapping_helpers/network_builder/power_cable/other in loc) + if(other == src) + continue + return other /// Scans directions, sets network_directions to have every direction that we can link to. If there's another power cable builder detected, make sure they know we're here by adding us to their cable directions list before we're deleted. -/obj/effect/network_builder/power_cable/scan_directions() +/obj/effect/mapping_helpers/network_builder/power_cable/scan_directions() var/turf/T for(var/i in GLOB.cardinals) if(i in network_directions) @@ -28,7 +34,7 @@ T = get_step(loc, i) if(!T) continue - var/obj/effect/network_builder/power_cable/other = locate() in T + var/obj/effect/mapping_helpers/network_builder/power_cable/other = locate() in T if(other) network_directions += i LAZYADD(other.network_directions, turn(i, 180)) @@ -40,7 +46,7 @@ return network_directions /// Directions should only ever have cardinals. -/obj/effect/network_builder/power_cable/build_network(list/directions = network_directions) +/obj/effect/mapping_helpers/network_builder/power_cable/build_network(list/directions = network_directions) if(!length(directions)) return else if(length(directions) == 1) @@ -63,117 +69,117 @@ new /obj/structure/cable(loc, cable_color, NONE, directions[i]) do_knot = FALSE -/obj/effect/network_builder/power_cable/proc/should_auto_knot() +/obj/effect/mapping_helpers/network_builder/power_cable/proc/should_auto_knot() return (locate(/obj/machinery/power/terminal) in loc) -/obj/effect/network_builder/power_cable/knot +/obj/effect/mapping_helpers/network_builder/power_cable/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/auto +/obj/effect/mapping_helpers/network_builder/power_cable/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Red -/obj/effect/network_builder/power_cable/red +/obj/effect/mapping_helpers/network_builder/power_cable/red color = "#ff0000" cable_color = "red" -/obj/effect/network_builder/power_cable/red/knot +/obj/effect/mapping_helpers/network_builder/power_cable/red/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/red/auto +/obj/effect/mapping_helpers/network_builder/power_cable/red/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // White -/obj/effect/network_builder/power_cable/white +/obj/effect/mapping_helpers/network_builder/power_cable/white color = "#ffffff" cable_color = "white" -/obj/effect/network_builder/power_cable/white/knot +/obj/effect/mapping_helpers/network_builder/power_cable/white/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/white/auto +/obj/effect/mapping_helpers/network_builder/power_cable/white/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Cyan -/obj/effect/network_builder/power_cable/cyan +/obj/effect/mapping_helpers/network_builder/power_cable/cyan color = "#00ffff" cable_color = "cyan" -/obj/effect/network_builder/power_cable/cyan/knot +/obj/effect/mapping_helpers/network_builder/power_cable/cyan/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/cyan/auto +/obj/effect/mapping_helpers/network_builder/power_cable/cyan/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Orange -/obj/effect/network_builder/power_cable/orange +/obj/effect/mapping_helpers/network_builder/power_cable/orange color = "#ff8000" cable_color = "orange" -/obj/effect/network_builder/power_cable/orange/knot +/obj/effect/mapping_helpers/network_builder/power_cable/orange/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/orange/auto +/obj/effect/mapping_helpers/network_builder/power_cable/orange/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Pink -/obj/effect/network_builder/power_cable/pink +/obj/effect/mapping_helpers/network_builder/power_cable/pink color = "#ff3cc8" cable_color = "pink" -/obj/effect/network_builder/power_cable/pink/knot +/obj/effect/mapping_helpers/network_builder/power_cable/pink/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/pink/auto +/obj/effect/mapping_helpers/network_builder/power_cable/pink/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Blue -/obj/effect/network_builder/power_cable/blue +/obj/effect/mapping_helpers/network_builder/power_cable/blue color = "#1919c8" cable_color = "blue" -/obj/effect/network_builder/power_cable/blue/knot +/obj/effect/mapping_helpers/network_builder/power_cable/blue/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/blue/auto +/obj/effect/mapping_helpers/network_builder/power_cable/blue/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Green -/obj/effect/network_builder/power_cable/green +/obj/effect/mapping_helpers/network_builder/power_cable/green color = "#00aa00" cable_color = "green" -/obj/effect/network_builder/power_cable/green/knot +/obj/effect/mapping_helpers/network_builder/power_cable/green/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/green/auto +/obj/effect/mapping_helpers/network_builder/power_cable/green/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO // Yellow -/obj/effect/network_builder/power_cable/yellow +/obj/effect/mapping_helpers/network_builder/power_cable/yellow color = "#ffff00" cable_color = "yellow" -/obj/effect/network_builder/power_cable/yellow/knot +/obj/effect/mapping_helpers/network_builder/power_cable/yellow/knot icon_state = "powerlinebuilderknot" knot = KNOT_FORCED -/obj/effect/network_builder/power_cable/yellow/auto +/obj/effect/mapping_helpers/network_builder/power_cable/yellow/auto icon_state = "powerlinebuilderauto" knot = KNOT_AUTO \ No newline at end of file diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 037c1aa66090af6a10b89c422b3e00be0c0da471..e3cc3865b27fcc3771a19dabe0f40c2bba6a0e17 100644 GIT binary patch delta 6652 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 delta 6316 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 vqhKjS77!&a;+6aBUQbU?