diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 5a048c562bb..d8357574d76 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -23,37 +23,24 @@ Pipelines + Other Objects -> Pipe network
var/global/list/iconsetids = list()
var/global/list/pipeimages = list()
-/*
-/obj/machinery/atmospherics/process()
- //build_network()
-*/
-/obj/machinery/atmospherics/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- // Check to see if should be added to network. Add self if so and adjust variables appropriately.
- // Note don't forget to have neighbors look as well!
+/obj/machinery/atmospherics/proc/returnPipenet()
+ return
- return null
+/obj/machinery/atmospherics/proc/returnPipenetAir()
+ return
+
+/obj/machinery/atmospherics/proc/setPipenet()
+ return
+
+/obj/machinery/atmospherics/proc/replacePipenet()
+ return
/obj/machinery/atmospherics/proc/build_network()
// Called to build a network from this node
-
- return null
-
-/obj/machinery/atmospherics/proc/return_network(obj/machinery/atmospherics/reference)
- // Returns pipe_network associated with connection to reference
- // Notes: should create network if necessary
- // Should never return null
-
- return null
-
-/obj/machinery/atmospherics/proc/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- // Used when two pipe_networks are combining
-
-/obj/machinery/atmospherics/proc/return_network_air(datum/network/reference)
- // Return a list of gas_mixture(s) in the object
- // associated with reference pipe_network for use in rebuilding the networks gases list
- // Is permitted to return null
+ return
/obj/machinery/atmospherics/proc/disconnect(obj/machinery/atmospherics/reference)
+ return
/obj/machinery/atmospherics/proc/icon_addintact(var/obj/machinery/atmospherics/node, var/connected)
var/image/img = getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "pipe_intact", get_dir(src,node), node.pipe_color)
@@ -101,8 +88,8 @@ Pipelines + Other Objects -> Pipe network
else
return ..()
-/obj/machinery/atmospherics/proc/nullifyPipenetwork()
- return
+/obj/machinery/atmospherics/proc/nullifyPipenet(datum/pipeline/P)
+ P.other_atmosmch -= src
/obj/machinery/atmospherics/proc/getpipeimage(var/iconset, var/iconstate, var/direction, var/col=rgb(255,255,255))
@@ -125,3 +112,14 @@ Pipelines + Other Objects -> Pipe network
return img
+/obj/machinery/atmospherics/proc/construction(D, P)
+ dir = D
+ initialize_directions = P
+ var/turf/T = loc
+ level = T.intact ? 2 : 1
+ initialize()
+ var/list/nodes = pipeline_expansion()
+ for(var/obj/machinery/atmospherics/A in nodes)
+ A.initialize()
+ A.addMember(src)
+ build_network()
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
index 417d818148c..8e81d0469f5 100644
--- a/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/binary_atmos_base.dm
@@ -10,8 +10,8 @@
var/obj/machinery/atmospherics/node1
var/obj/machinery/atmospherics/node2
- var/datum/pipe_network/network1
- var/datum/pipe_network/network2
+ var/datum/pipeline/parent1
+ var/datum/pipeline/parent2
var/showpipe = 0
@@ -60,33 +60,15 @@
..(intact)
// Housekeeping and pipe network stuff below
-/obj/machinery/atmospherics/binary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node1)
- network1 = new_network
-
- else if(reference == node2)
- network2 = new_network
-
- if(new_network.normal_members.Find(src))
- return 0
-
- new_network.normal_members += src
-
- return null
-
/obj/machinery/atmospherics/binary/Destroy()
- loc = null
-
if(node1)
node1.disconnect(src)
- del(network1)
+ node1 = null
+ nullifyPipenet(parent1)
if(node2)
node2.disconnect(src)
- del(network2)
-
- node1 = null
- node2 = null
-
+ node2 = null
+ nullifyPipenet(parent2)
..()
/obj/machinery/atmospherics/binary/initialize()
@@ -111,58 +93,63 @@
update_icon()
/obj/machinery/atmospherics/binary/build_network()
- if(!network1 && node1)
- network1 = new /datum/pipe_network()
- network1.normal_members += src
- network1.build_network(node1, src)
+ if(!parent1)
+ parent1 = new /datum/pipeline()
+ parent1.build_pipeline(src)
- if(!network2 && node2)
- network2 = new /datum/pipe_network()
- network2.normal_members += src
- network2.build_network(node2, src)
-
-
-/obj/machinery/atmospherics/binary/return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node1)
- return network1
-
- if(reference==node2)
- return network2
-
- return null
-
-/obj/machinery/atmospherics/binary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network1 == old_network)
- network1 = new_network
- if(network2 == old_network)
- network2 = new_network
-
- return 1
-
-/obj/machinery/atmospherics/binary/return_network_air(datum/pipe_network/reference)
- var/list/results = list()
-
- if(network1 == reference)
- results += air1
- if(network2 == reference)
- results += air2
-
- return results
+ if(!parent2)
+ parent2 = new /datum/pipeline()
+ parent2.build_pipeline(src)
/obj/machinery/atmospherics/binary/disconnect(obj/machinery/atmospherics/reference)
- if(reference==node1)
- del(network1)
+ if(reference == node1)
+ if(istype(node1, /obj/machinery/atmospherics/pipe))
+ qdel(parent1)
node1 = null
- else if(reference==node2)
- del(network2)
+ else if(reference == node2)
+ if(istype(node2, /obj/machinery/atmospherics/pipe))
+ qdel(parent2)
node2 = null
-
update_icon()
- return null
+/obj/machinery/atmospherics/binary/nullifyPipenet(datum/pipeline/P)
+ ..()
+ if(P == parent1)
+ parent1.other_airs -= air1
+ parent1 = null
+ else if(P == parent2)
+ parent2.other_airs -= air2
+ parent2 = null
-/obj/machinery/atmospherics/binary/nullifyPipenetwork()
- network1 = null
- network2 = null
\ No newline at end of file
+/obj/machinery/atmospherics/binary/returnPipenetAir(datum/pipeline/P)
+ if(P == parent1)
+ return air1
+ else if(P == parent2)
+ return air2
+
+/obj/machinery/atmospherics/binary/pipeline_expansion(datum/pipeline/P)
+ if(P)
+ if(parent1 == P)
+ return list(node1)
+ else if(parent2 == P)
+ return list(node2)
+ else
+ return list(node1, node2)
+
+/obj/machinery/atmospherics/binary/setPipenet(datum/pipeline/P, obj/machinery/atmospherics/A)
+ if(A == node1)
+ parent1 = P
+ else if(A == node2)
+ parent2 = P
+
+/obj/machinery/atmospherics/binary/returnPipenet(obj/machinery/atmospherics/A)
+ if(A == node1)
+ return parent1
+ else if(A == node2)
+ return parent2
+
+/obj/machinery/atmospherics/binary/replacePipenet(datum/pipeline/Old, datum/pipeline/New)
+ if(Old == parent1)
+ parent1 = New
+ else if(Old == parent2)
+ parent2 = New
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
index a5a222736fb..675590c6796 100644
--- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
@@ -41,11 +41,9 @@
//Actually transfer the gas
var/datum/gas_mixture/removed = air2.remove(transfer_moles)
- if(network1)
- network1.update = 1
+ parent1.update = 1
- if(network2)
- network2.update = 1
+ parent2.update = 1
return removed
diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
index dcca599c211..598744b115f 100644
--- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm
@@ -74,8 +74,7 @@
loc.assume_air(removed)
air_update_turf()
- if(network1)
- network1.update = 1
+ parent1.update = 1
else //external -> output
var/pressure_delta = 10000
@@ -94,8 +93,7 @@
air2.merge(removed)
air_update_turf()
- if(network2)
- network2.update = 1
+ parent2.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
index b51b528df27..6cfdd654255 100644
--- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm
@@ -51,11 +51,9 @@ Passive gate is similar to the regular pump except:
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
air2.merge(removed)
- if(network1)
- network1.update = 1
+ parent1.update = 1
- if(network2)
- network2.update = 1
+ parent2.update = 1
//Radio remote control
diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm
index 937050358ca..079f1e00b1f 100644
--- a/code/ATMOSPHERICS/components/binary_devices/pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm
@@ -58,11 +58,10 @@ Thus, the two variables affect pump operation are set in New():
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
air2.merge(removed)
- if(network1)
- network1.update = 1
+ parent1.update = 1
- if(network2)
- network2.update = 1
+
+ parent2.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
index 0be2ecb627b..2dc5d74a1fd 100644
--- a/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/volume_pump.dm
@@ -57,11 +57,9 @@ Thus, the two variables affect pump operation are set in New():
air2.merge(removed)
- if(network1)
- network1.update = 1
+ parent1.update = 1
- if(network2)
- network2.update = 1
+ parent2.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm
index 7a0a5db640b..6fd16461e2d 100644
--- a/code/ATMOSPHERICS/components/portables_connector.dm
+++ b/code/ATMOSPHERICS/components/portables_connector.dm
@@ -1,42 +1,19 @@
-/*
-This should ideally have /unary/ as parent, why doesn't it? //Donkie
-*/
-/obj/machinery/atmospherics/portables_connector
- icon = 'icons/obj/atmospherics/unary_devices.dmi'
- icon_state = "connector_map" //Only for mapping purposes, so mappers can see direction
-
+/obj/machinery/atmospherics/unary/portables_connector
name = "connector port"
desc = "For connecting portables devices related to atmospherics control."
-
- dir = SOUTH
- initialize_directions = SOUTH
-
+ icon = 'icons/obj/atmospherics/unary_devices.dmi'
+ icon_state = "connector_map" //Only for mapping purposes, so mappers can see direction
can_unwrench = 1
-
var/obj/machinery/portable_atmospherics/connected_device
-
- var/obj/machinery/atmospherics/node
-
- var/datum/pipe_network/network
-
- var/showpipe = 0
- var/on = 0
use_power = 0
level = 0
-
-/obj/machinery/atmospherics/portables_connector/visible
+/obj/machinery/atmospherics/unary/portables_connector/visible
level = 2
-/obj/machinery/atmospherics/portables_connector/New()
- initialize_directions = dir
- ..()
-
-/obj/machinery/atmospherics/portables_connector/update_icon()
+/obj/machinery/atmospherics/unary/portables_connector/update_icon()
icon_state = "connector"
-
underlays.Cut()
-
if(showpipe)
var/state
var/col
@@ -45,114 +22,26 @@ This should ideally have /unary/ as parent, why doesn't it? //Donkie
col = node.pipe_color
else
state = "pipe_exposed"
-
underlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', state, initialize_directions, col)
- return
-
-/obj/machinery/atmospherics/portables_connector/hide(var/intact)
- showpipe = !intact
- update_icon()
-
- ..(intact)
-
-/obj/machinery/atmospherics/portables_connector/process()
- ..()
- if(!on)
- return
+/obj/machinery/atmospherics/unary/portables_connector/process()
if(!connected_device)
- on = 0
return
- if(network)
- network.update = 1
- return 1
+ parent.update = 1
-// Housekeeping and pipe network stuff below
-/obj/machinery/atmospherics/portables_connector/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node)
- network = new_network
-
- if(new_network.normal_members.Find(src))
- return 0
-
- new_network.normal_members += src
-
- return null
-
-/obj/machinery/atmospherics/portables_connector/Destroy()
+/obj/machinery/atmospherics/unary/portables_connector/Destroy()
if(connected_device)
connected_device.disconnect()
-
- if(node)
- node.disconnect(src)
- del(network)
-
- node = null
-
..()
-/obj/machinery/atmospherics/portables_connector/initialize()
- src.disconnect(src)
-
- var/node_connect = dir
-
- for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
- if(target.initialize_directions & get_dir(target,src))
- node = target
- break
- //build_network() //might need this
-
- if(level == 2)
- showpipe = 1
-
- update_icon()
-
-/obj/machinery/atmospherics/portables_connector/build_network()
- if(!network && node)
- network = new /datum/pipe_network()
- network.normal_members += src
- network.build_network(node, src)
-
-
-/obj/machinery/atmospherics/portables_connector/return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node)
- return network
-
- if(reference==connected_device)
- return network
-
- return null
-
-/obj/machinery/atmospherics/portables_connector/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network == old_network)
- network = new_network
-
- return 1
-
-/obj/machinery/atmospherics/portables_connector/return_network_air(datum/pipe_network/reference)
- var/list/results = list()
-
- if(connected_device)
- results += connected_device.air_contents
-
- return results
-
-/obj/machinery/atmospherics/portables_connector/disconnect(obj/machinery/atmospherics/reference)
- if(reference==node)
- del(network)
- node = null
-
- update_icon()
-
- return null
-
-
-/obj/machinery/atmospherics/portables_connector/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if (connected_device)
- user << "You cannot unwrench this [src], dettach [connected_device] first."
- return 1
+/obj/machinery/atmospherics/unary/portables_connector/attackby(obj/item/weapon/W, mob/user)
+ if(istype(W, /obj/item/weapon/wrench))
+ if(connected_device)
+ user << "You cannot unwrench this [src], dettach [connected_device] first."
+ return 1
return ..()
+
+/obj/machinery/atmospherics/unary/portables_connector/portableConnectorReturnAir()
+ return connected_device.portableConnectorReturnAir()
+
+/obj/proc/portableConnectorReturnAir()
diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 11fc0f5e2f8..13d187bd906 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -122,14 +122,11 @@ Filter types:
air2.merge(filtered_out)
air3.merge(removed)
- if(network2)
- network2.update = 1
+ parent2.update = 1
- if(network3)
- network3.update = 1
+ parent3.update = 1
- if(network1)
- network1.update = 1
+ parent1.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index bf297813064..1fbae3d2ec6 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -87,14 +87,13 @@
var/datum/gas_mixture/removed2 = air2.remove(transfer_moles2)
air3.merge(removed2)
- if(network1 && transfer_moles1)
- network1.update = 1
+ if(transfer_moles1)
+ parent1.update = 1
- if(network2 && transfer_moles2)
- network2.update = 1
+ if(transfer_moles2)
+ parent2.update = 1
- if(network3)
- network3.update = 1
+ parent3.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
index 902b315b5ed..94c92c5ff18 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
@@ -12,9 +12,9 @@
var/obj/machinery/atmospherics/node2
var/obj/machinery/atmospherics/node3
- var/datum/pipe_network/network1
- var/datum/pipe_network/network2
- var/datum/pipe_network/network3
+ var/datum/pipeline/parent1
+ var/datum/pipeline/parent2
+ var/datum/pipeline/parent3
var/flipped = 0
@@ -77,42 +77,22 @@ Iconnery
/*
Housekeeping and pipe network stuff below
*/
-/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node1)
- network1 = new_network
-
- else if(reference == node2)
- network2 = new_network
-
- else if (reference == node3)
- network3 = new_network
-
- if(new_network.normal_members.Find(src))
- return 0
-
- new_network.normal_members += src
-
- return null
-
/obj/machinery/atmospherics/trinary/Destroy()
if(node1)
node1.disconnect(src)
- del(network1)
+ node1 = null
+ nullifyPipenet(parent1)
if(node2)
node2.disconnect(src)
- del(network2)
+ node2 = null
+ nullifyPipenet(parent2)
if(node3)
node3.disconnect(src)
- del(network3)
-
- node1 = null
- node2 = null
- node3 = null
-
+ node3 = null
+ nullifyPipenet(parent3)
..()
/obj/machinery/atmospherics/trinary/initialize()
- src.disconnect(src)
//Mixer:
//1 and 2 is input
@@ -151,76 +131,83 @@ Housekeeping and pipe network stuff below
update_icon()
/obj/machinery/atmospherics/trinary/build_network()
- if(!network1 && node1)
- network1 = new /datum/pipe_network()
- network1.normal_members += src
- network1.build_network(node1, src)
+ if(!parent1)
+ parent1 = new /datum/pipeline()
+ parent1.build_pipeline(src)
- if(!network2 && node2)
- network2 = new /datum/pipe_network()
- network2.normal_members += src
- network2.build_network(node2, src)
+ if(!parent2)
+ parent2 = new /datum/pipeline()
+ parent2.build_pipeline(src)
- if(!network3 && node3)
- network3 = new /datum/pipe_network()
- network3.normal_members += src
- network3.build_network(node3, src)
-
-
-/obj/machinery/atmospherics/trinary/return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node1)
- return network1
-
- if(reference==node2)
- return network2
-
- if(reference==node3)
- return network3
-
- return null
-
-/obj/machinery/atmospherics/trinary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network1 == old_network)
- network1 = new_network
- if(network2 == old_network)
- network2 = new_network
- if(network3 == old_network)
- network3 = new_network
-
- return 1
-
-/obj/machinery/atmospherics/trinary/return_network_air(datum/pipe_network/reference)
- var/list/results = list()
-
- if(network1 == reference)
- results += air1
- if(network2 == reference)
- results += air2
- if(network3 == reference)
- results += air3
-
- return results
+ if(!parent3)
+ parent3 = new /datum/pipeline()
+ parent3.build_pipeline(src)
/obj/machinery/atmospherics/trinary/disconnect(obj/machinery/atmospherics/reference)
- if(reference==node1)
- del(network1)
+ if(reference == node1)
+ if(istype(node1, /obj/machinery/atmospherics/pipe))
+ qdel(parent1)
node1 = null
-
- else if(reference==node2)
- del(network2)
+ else if(reference == node2)
+ if(istype(node2, /obj/machinery/atmospherics/pipe))
+ qdel(parent2)
node2 = null
-
- else if(reference==node3)
- del(network3)
+ else if(reference == node3)
+ if(istype(node3, /obj/machinery/atmospherics/pipe))
+ qdel(parent3)
node3 = null
-
update_icon()
- return null
+/obj/machinery/atmospherics/trinary/nullifyPipenet(datum/pipeline/P)
+ ..()
+ if(P == parent1)
+ parent1.other_airs -= air1
+ parent1 = null
+ else if(P == parent2)
+ parent2.other_airs -= air2
+ parent2 = null
+ else if(P == parent3)
+ parent3.other_airs -= air3
+ parent3 = null
-/obj/machinery/atmospherics/trinary/nullifyPipenetwork()
- network1 = null
- network2 = null
- network3 = null
\ No newline at end of file
+/obj/machinery/atmospherics/trinary/returnPipenetAir(datum/pipeline/P)
+ if(P == parent1)
+ return air1
+ else if(P == parent2)
+ return air2
+ else if(P == parent3)
+ return air3
+
+/obj/machinery/atmospherics/trinary/pipeline_expansion(datum/pipeline/P)
+ if(P)
+ if(parent1 == P)
+ return list(node1)
+ else if(parent2 == P)
+ return list(node2)
+ else if(parent3 == P)
+ return list(node3)
+ return list(node1, node2, node3)
+
+/obj/machinery/atmospherics/trinary/setPipenet(datum/pipeline/P, obj/machinery/atmospherics/A)
+ if(A == node1)
+ parent1 = P
+ else if(A == node2)
+ parent2 = P
+ else if(A == node3)
+ parent3 = P
+
+/obj/machinery/atmospherics/trinary/returnPipenet(obj/machinery/atmospherics/A)
+ if(A == node1)
+ return parent1
+ else if(A == node2)
+ return parent2
+ else if(A == node3)
+ return parent3
+
+/obj/machinery/atmospherics/trinary/replacePipenet(datum/pipeline/Old, datum/pipeline/New)
+ if(Old == parent1)
+ parent1 = New
+ else if(Old == parent2)
+ parent2 = New
+ else if(Old == parent3)
+ parent3 = New
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm
index ea66aa52d4f..dd518949b65 100644
--- a/code/ATMOSPHERICS/components/unary/cold_sink.dm
+++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm
@@ -24,7 +24,7 @@
/obj/machinery/atmospherics/unary/cold_sink/process()
..()
- if(!on || !network)
+ if(!on)
return 0
var/air_heat_capacity = air_contents.heat_capacity()
var/combined_heat_capacity = current_heat_capacity + air_heat_capacity
@@ -37,5 +37,5 @@
//todo: have current temperature affected. require power to bring down current temperature again
if(abs(old_temperature-air_contents.temperature) > 1)
- network.update = 1
+ parent.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
index 41b0ad9619c..e0cb9ac42d3 100644
--- a/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
+++ b/code/ATMOSPHERICS/components/unary/heat_exchanger.dm
@@ -57,12 +57,10 @@
air_contents.temperature = new_temperature
partner.air_contents.temperature = new_temperature
- if(network)
- if(abs(old_temperature-air_contents.temperature) > 1)
- network.update = 1
+ if(abs(old_temperature-air_contents.temperature) > 1)
+ parent.update = 1
- if(partner.network)
- if(abs(other_old_temperature-partner.air_contents.temperature) > 1)
- partner.network.update = 1
+ if(abs(other_old_temperature-partner.air_contents.temperature) > 1)
+ partner.parent.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm
index 062bbd71110..88e7e22e967 100644
--- a/code/ATMOSPHERICS/components/unary/heat_source.dm
+++ b/code/ATMOSPHERICS/components/unary/heat_source.dm
@@ -39,5 +39,5 @@
//todo: have current temperature affected. require power to bring up current temperature again
if(abs(old_temperature-air_contents.temperature) > 1)
- network.update = 1
+ parent.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/unary/outlet_injector.dm b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
index 5b7d808e70f..553b863da7a 100644
--- a/code/ATMOSPHERICS/components/unary/outlet_injector.dm
+++ b/code/ATMOSPHERICS/components/unary/outlet_injector.dm
@@ -48,8 +48,7 @@
loc.assume_air(removed)
air_update_turf()
- if(network)
- network.update = 1
+ parent.update = 1
return 1
@@ -66,8 +65,7 @@
loc.assume_air(removed)
- if(network)
- network.update = 1
+ parent.update = 1
flick("inje_inject", src)
diff --git a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm
index cbbb91683fd..0103a1966cd 100644
--- a/code/ATMOSPHERICS/components/unary/oxygen_generator.dm
+++ b/code/ATMOSPHERICS/components/unary/oxygen_generator.dm
@@ -43,7 +43,6 @@
air_contents.temperature = (current_heat_capacity*air_contents.temperature + 20*added_oxygen*T0C)/(current_heat_capacity+20*added_oxygen)
air_contents.oxygen += added_oxygen
- if(network)
- network.update = 1
+ parent.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/unary/unary_base.dm b/code/ATMOSPHERICS/components/unary/unary_base.dm
index b19b3a82531..e33065ff618 100644
--- a/code/ATMOSPHERICS/components/unary/unary_base.dm
+++ b/code/ATMOSPHERICS/components/unary/unary_base.dm
@@ -1,28 +1,23 @@
/obj/machinery/atmospherics/unary
icon = 'icons/obj/atmospherics/unary_devices.dmi'
-
dir = SOUTH
initialize_directions = SOUTH
layer = TURF_LAYER+0.1
-
var/datum/gas_mixture/air_contents
-
var/obj/machinery/atmospherics/node
-
- var/datum/pipe_network/network
-
+ var/datum/pipeline/parent
var/showpipe = 0
/obj/machinery/atmospherics/unary/New()
..()
initialize_directions = dir
air_contents = new
-
air_contents.volume = 200
/*
Iconnery
*/
+
//Separate this because we don't need to update pipe icons if we just are going to change the state
/obj/machinery/atmospherics/unary/proc/update_icon_nopipes()
return
@@ -54,91 +49,67 @@ Iconnery
/*
Housekeeping and pipe network stuff below
*/
-/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node)
- network = new_network
-
- if(new_network.normal_members.Find(src))
- return 0
-
- new_network.normal_members += src
-
- return null
/obj/machinery/atmospherics/unary/Destroy()
if(node)
node.disconnect(src)
- del(network)
-
- node = null
-
+ node = null
+ nullifyPipenet(parent)
..()
-/obj/machinery/atmospherics/unary/initialize(infiniteloop = 0)
- if(!infiniteloop)
- src.disconnect(src)
- var/node_connect = dir
-
- for(var/obj/machinery/atmospherics/target in get_step(src,node_connect))
+/obj/machinery/atmospherics/unary/initialize()
+ for(var/obj/machinery/atmospherics/target in get_step(src, dir))
if(target.initialize_directions & get_dir(target,src))
node = target
- if(!infiniteloop)
- target.initialize(1)
break
- //build_network() might need this
-
if(level == 2)
showpipe = 1
-
update_icon()
/obj/machinery/atmospherics/unary/default_change_direction_wrench(mob/user, obj/item/weapon/wrench/W)
if(..())
initialize_directions = dir
if(node)
- disconnect(node)
+ node.disconnect(src)
+ node = null
+ nullifyPipenet(parent)
initialize()
+ if(node)
+ node.initialize()
+ node.addMember(src)
+ build_network()
. = 1
/obj/machinery/atmospherics/unary/build_network()
- if(!network && node)
- network = new /datum/pipe_network()
- network.normal_members += src
- network.build_network(node, src)
-
-
-/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node)
- return network
-
- return null
-
-/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network == old_network)
- network = new_network
-
- return 1
-
-/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference)
- var/list/results = list()
-
- if(network == reference)
- results += air_contents
-
- return results
+ if(!parent)
+ parent = new /datum/pipeline()
+ parent.build_pipeline(src)
/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference)
- if(reference==node)
+ if(reference == node)
+ if(istype(node, /obj/machinery/atmospherics/pipe))
+ qdel(parent)
node = null
- reference.disconnect(src)
- del(network)
-
update_icon()
- return null
+/obj/machinery/atmospherics/unary/nullifyPipenet()
+ ..()
+ parent.other_airs -= air_contents
+ parent = null
-/obj/machinery/atmospherics/unary/nullifyPipenetwork()
- network = null
\ No newline at end of file
+/obj/machinery/atmospherics/unary/returnPipenetAir()
+ return air_contents
+
+/obj/machinery/atmospherics/unary/pipeline_expansion()
+ return list(node)
+
+/obj/machinery/atmospherics/unary/setPipenet(datum/pipeline/P)
+ parent = P
+
+/obj/machinery/atmospherics/unary/returnPipenet()
+ return parent
+
+/obj/machinery/atmospherics/unary/replacePipenet(datum/pipeline/Old, datum/pipeline/New)
+ if(Old == parent)
+ parent = New
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 86df661d4c3..5859425b3a3 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -114,8 +114,7 @@
loc.assume_air(removed)
air_update_turf()
- if(network)
- network.update = 1
+ parent.update = 1
else //external -> internal
var/pressure_delta = 10000
@@ -135,8 +134,7 @@
air_contents.merge(removed)
air_update_turf()
- if(network)
- network.update = 1
+ parent.update = 1
return 1
@@ -320,12 +318,8 @@
L << "That vent is welded shut."
return
- if(!network || !network.normal_members.len)
- L << "This vent is not connected to anything."
- return
-
var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in network.normal_members)
+ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in parent.other_atmosmch)
if(temp_vent.welded)
continue
if(temp_vent in loc)
@@ -359,7 +353,7 @@
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection]
if(!target_vent)
return
-
+
for(var/mob/O in viewers(L, null))
O.show_message(text("[L] scrambles into the ventilation ducts!"), 1)
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 7f3e04d9d14..098d1a87b8f 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -143,8 +143,7 @@
loc.assume_air(removed)
air_update_turf()
- if(network)
- network.update = 1
+ parent.update = 1
else //Just siphoning all air
if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE)
@@ -157,8 +156,7 @@
air_contents.merge(removed)
air_update_turf()
- if(network)
- network.update = 1
+ parent.update = 1
return 1
diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm
index d343ce2d9d2..8f8252a15be 100644
--- a/code/ATMOSPHERICS/components/valve.dm
+++ b/code/ATMOSPHERICS/components/valve.dm
@@ -1,355 +1,85 @@
-
-/*
-This file contains:
-Manual Valve
-Digital Valve
-
-These pipes are not under the binary_atmos base because instead of doing pretty maths, they simply
-connect the networks together for a more efficient transfer
-*/
-
-/obj/machinery/atmospherics/valve
+/obj/machinery/atmospherics/binary/valve
icon = 'icons/obj/atmospherics/binary_devices.dmi'
icon_state = "mvalve_map"
-
name = "manual valve"
desc = "A pipe valve"
-
- dir = SOUTH
- initialize_directions = SOUTH|NORTH
-
can_unwrench = 1
-
var/open = 0
- var/openDuringInit //useless, must remove
-
- var/obj/machinery/atmospherics/node1
- var/obj/machinery/atmospherics/node2
-
- var/datum/pipe_network/network_node1
- var/datum/pipe_network/network_node2
var/frequency = 0
var/id = null
var/datum/radio_frequency/radio_connection
-/obj/machinery/atmospherics/valve/open
+/obj/machinery/atmospherics/binary/valve/open
open = 1
//Separate this because we don't need to update pipe icons if we just are going to crank the handle
-/obj/machinery/atmospherics/valve/proc/update_icon_nopipes(var/animation = 0)
+/obj/machinery/atmospherics/binary/valve/update_icon_nopipes(animation = 0)
normalize_dir()
icon_state = "mvalve_off"
-
overlays.Cut()
if(animation)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "mvalve_[open][!open]")
else if(open)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "mvalve_on")
-/obj/machinery/atmospherics/valve/update_icon()
+/obj/machinery/atmospherics/binary/valve/update_icon()
update_icon_nopipes()
-
var/connected = 0
underlays.Cut()
-
//Add non-broken pieces
if(node1)
connected = icon_addintact(node1, connected)
-
if(node2)
connected = icon_addintact(node2, connected)
-
//Add broken pieces
icon_addbroken(connected)
-/obj/machinery/atmospherics/valve/New()
- ..()
- switch(dir)
- if(NORTH || SOUTH)
- initialize_directions = NORTH|SOUTH
- if(EAST || WEST)
- initialize_directions = EAST|WEST
-
-/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(reference == node1)
- network_node1 = new_network
- if(open)
- network_node2 = new_network
- else if(reference == node2)
- network_node2 = new_network
- if(open)
- network_node1 = new_network
-
- if(new_network.normal_members.Find(src))
- return 0
-
- new_network.normal_members += src
-
- if(open)
- if(reference == node1)
- if(node2)
- return node2.network_expand(new_network, src)
- else if(reference == node2)
- if(node1)
- return node1.network_expand(new_network, src)
-
- return null
-
-/obj/machinery/atmospherics/valve/Destroy()
- if(node1)
- node1.disconnect(src)
- del(network_node1)
- if(node2)
- node2.disconnect(src)
- del(network_node2)
-
- node1 = null
- node2 = null
-
- ..()
-
-/obj/machinery/atmospherics/valve/proc/open()
- if(open)
- return 0
-
+/obj/machinery/atmospherics/binary/valve/proc/open()
open = 1
- update_icon_nopipes()
-
- if(network_node1&&network_node2)
- network_node1.merge(network_node2)
- network_node2 = network_node1
-
- if(network_node1)
- network_node1.update = 1
- else if(network_node2)
- network_node2.update = 1
-
- return 1
-
-/obj/machinery/atmospherics/valve/proc/close()
- if(!open)
- return 0
+ parent1.update = 0
+ parent2.update = 0
+ return
+/obj/machinery/atmospherics/binary/valve/proc/close()
open = 0
- update_icon_nopipes()
+ return
- if(network_node1)
- del(network_node1)
- if(network_node2)
- del(network_node2)
-
- build_network()
-
- return 1
-
-/obj/machinery/atmospherics/valve/proc/normalize_dir()
+/obj/machinery/atmospherics/binary/valve/proc/normalize_dir()
if(dir==3)
dir = 1
else if(dir==12)
dir = 4
-/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob)
+/obj/machinery/atmospherics/binary/valve/attack_ai(mob/user)
return
-/obj/machinery/atmospherics/valve/attack_paw(mob/user as mob)
- return attack_hand(user)
-
-obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
- src.add_fingerprint(usr)
+/obj/machinery/atmospherics/binary/valve/attack_hand(mob/user)
+ add_fingerprint(usr)
update_icon_nopipes(1)
sleep(10)
- if (src.open)
- src.close()
- else
- src.open()
-
-/obj/machinery/atmospherics/valve/process()
- ..()
- . = PROCESS_KILL
-
-/* if(open && (!node1 || !node2))
+ if(open)
close()
- if(!node1)
- if(!nodealert)
- //world << "Missing node from [src] at [src.x],[src.y],[src.z]"
- nodealert = 1
- else if (!node2)
- if(!nodealert)
- //world << "Missing node from [src] at [src.x],[src.y],[src.z]"
- nodealert = 1
- else if (nodealert)
- nodealert = 0
-*/
+ else
+ open()
+ parent1.reconcile_air()
- return
-
-/obj/machinery/atmospherics/valve/initialize()
- normalize_dir()
-
- var/node1_dir
- var/node2_dir
-
- for(var/direction in cardinal)
- if(direction&initialize_directions)
- if (!node1_dir)
- node1_dir = direction
- else if (!node2_dir)
- node2_dir = direction
-
- for(var/obj/machinery/atmospherics/target in get_step(src,node1_dir))
- if(target.initialize_directions & get_dir(target,src))
- node1 = target
- break
- for(var/obj/machinery/atmospherics/target in get_step(src,node2_dir))
- if(target.initialize_directions & get_dir(target,src))
- node2 = target
- break
-
- //build_network()
- update_icon()
-
-/*
- var/connect_directions
- switch(dir)
- if(NORTH)
- connect_directions = NORTH|SOUTH
- if(SOUTH)
- connect_directions = NORTH|SOUTH
- if(EAST)
- connect_directions = EAST|WEST
- if(WEST)
- connect_directions = EAST|WEST
- else
- connect_directions = dir
-
- for(var/direction in cardinal)
- if(direction&connect_directions)
- for(var/obj/machinery/atmospherics/target in get_step(src,direction))
- if(target.initialize_directions & get_dir(target,src))
- connect_directions &= ~direction
- node1 = target
- break
- if(node1)
- break
-
- for(var/direction in cardinal)
- if(direction&connect_directions)
- for(var/obj/machinery/atmospherics/target in get_step(src,direction))
- if(target.initialize_directions & get_dir(target,src))
- node2 = target
- break
- if(node1)
- break
-*/
-/obj/machinery/atmospherics/valve/build_network()
- if(!network_node1 && node1)
- network_node1 = new /datum/pipe_network()
- network_node1.normal_members += src
- network_node1.build_network(node1, src)
-
- if(!network_node2 && node2)
- network_node2 = new /datum/pipe_network()
- network_node2.normal_members += src
- network_node2.build_network(node2, src)
-
-
-/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference)
- build_network()
-
- if(reference==node1)
- return network_node1
-
- if(reference==node2)
- return network_node2
-
- return null
-
-/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
- if(network_node1 == old_network)
- network_node1 = new_network
- if(network_node2 == old_network)
- network_node2 = new_network
-
- return 1
-
-/obj/machinery/atmospherics/valve/return_network_air(datum/network/reference)
- return null
-
-/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference)
- if(reference==node1)
- del(network_node1)
- node1 = null
-
- else if(reference==node2)
- del(network_node2)
- node2 = null
-
- update_icon()
-
- return null
-
-/obj/machinery/atmospherics/valve/digital // can be controlled by AI
+/obj/machinery/atmospherics/binary/valve/digital // can be controlled by AI
name = "digital valve"
desc = "A digitally controlled valve."
icon_state = "dvalve_map"
-/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob)
+/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user)
return src.attack_hand(user)
-/obj/machinery/atmospherics/valve/digital/attack_hand(mob/user as mob)
- if(!src.allowed(user))
- user << "Access denied."
- return
- ..()
-
-/obj/machinery/atmospherics/valve/digital/update_icon_nopipes(var/animation)
+/obj/machinery/atmospherics/binary/valve/digital/update_icon_nopipes(animation)
normalize_dir()
-
if(stat & NOPOWER)
icon_state = "dvalve_nopower"
overlays.Cut()
return
-
icon_state = "dvalve_off"
-
overlays.Cut()
if(animation)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "dvalve_[open][!open]")
else if(open)
overlays += getpipeimage('icons/obj/atmospherics/binary_devices.dmi', "dvalve_on")
-
-//Radio remote control
-
-/obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- if(frequency)
- radio_connection = radio_controller.add_object(src, frequency, RADIO_ATMOSIA)
-
-/obj/machinery/atmospherics/valve/digital/initialize()
- ..()
- if(frequency)
- set_frequency(frequency)
-
-/obj/machinery/atmospherics/valve/digital/receive_signal(datum/signal/signal)
- if(!signal.data["tag"] || (signal.data["tag"] != id))
- return 0
-
- switch(signal.data["command"])
- if("valve_open")
- if(!open)
- open()
-
- if("valve_close")
- if(open)
- close()
-
- if("valve_toggle")
- if(open)
- close()
- else
- open()
-
-/obj/machinery/atmospherics/valve/nullifyPipenetwork()
- network_node1 = null
- network_node2 = null
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/datum_pipe_network.dm b/code/ATMOSPHERICS/datum_pipe_network.dm
index 4a4b9b5191d..e69de29bb2d 100644
--- a/code/ATMOSPHERICS/datum_pipe_network.dm
+++ b/code/ATMOSPHERICS/datum_pipe_network.dm
@@ -1,208 +0,0 @@
-var/global/list/datum/pipe_network/pipe_networks = list()
-
-/datum/pipe_network
- var/list/datum/gas_mixture/gases = list() //All of the gas_mixtures continuously connected in this network
-
- var/list/obj/machinery/atmospherics/normal_members = list()
- var/list/datum/pipeline/line_members = list()
- //membership roster to go through for updates and what not
-
- var/update = 1
- var/datum/gas_mixture/air_transient = null
-
-/datum/pipe_network/New()
- air_transient = new()
- ..()
-
-/datum/pipe_network/Destroy()
- pipe_networks -= src
- for(var/datum/pipeline/P in line_members)
- P.network = null
- for(var/obj/machinery/atmospherics/A in normal_members)
- A.nullifyPipenetwork()
- ..()
-
-/datum/pipe_network/proc/process()
- //Equalize gases amongst pipe if called for
- if(update)
- update = 0
- reconcile_air() //equalize_gases(gases)
-
- //Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport
- //for(var/datum/pipeline/line_member in line_members)
- // line_member.process()
-
-/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference)
- //Purpose: Generate membership roster
- //Notes: Assuming that members will add themselves to appropriate roster in network_expand()
-
- if(!start_normal)
- qdel(src)
-
- start_normal.network_expand(src, reference)
-
- update_network_gases()
-
- if((normal_members.len>0)||(line_members.len>0))
- pipe_networks += src
- else
- qdel(src)
-
-/datum/pipe_network/proc/merge(datum/pipe_network/giver)
- if(giver==src) return 0
-
- normal_members -= giver.normal_members
- normal_members += giver.normal_members
-
- line_members -= giver.line_members
- line_members += giver.line_members
-
- for(var/obj/machinery/atmospherics/normal_member in giver.normal_members)
- normal_member.reassign_network(giver, src)
-
- for(var/datum/pipeline/line_member in giver.line_members)
- line_member.network = src
-
- update_network_gases()
- return 1
-
-/datum/pipe_network/proc/update_network_gases()
- //Go through membership roster and make sure gases is up to date
-
- gases = list()
-
- for(var/obj/machinery/atmospherics/normal_member in normal_members)
- var/result = normal_member.return_network_air(src)
- if(result) gases += result
-
- for(var/datum/pipeline/line_member in line_members)
- gases += line_member.air
-
-/datum/pipe_network/proc/reconcile_air()
- //Perfectly equalize all gases members instantly
-
- //Calculate totals from individual components
- var/total_thermal_energy = 0
- var/total_heat_capacity = 0
-
- air_transient.volume = 0
-
- air_transient.oxygen = 0
- air_transient.nitrogen = 0
- air_transient.toxins = 0
- air_transient.carbon_dioxide = 0
-
-
- air_transient.trace_gases = list()
-
- for(var/datum/gas_mixture/gas in gases)
- air_transient.volume += gas.volume
- total_thermal_energy += gas.thermal_energy()
- total_heat_capacity += gas.heat_capacity()
-
- air_transient.oxygen += gas.oxygen
- air_transient.nitrogen += gas.nitrogen
- air_transient.toxins += gas.toxins
- air_transient.carbon_dioxide += gas.carbon_dioxide
-
- if(gas.trace_gases.len)
- for(var/datum/gas/trace_gas in gas.trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in air_transient.trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- air_transient.trace_gases += corresponding
-
- corresponding.moles += trace_gas.moles
-
- if(air_transient.volume > 0)
-
- if(total_heat_capacity > 0)
- air_transient.temperature = total_thermal_energy/total_heat_capacity
-
- //Allow air mixture to react
- if(air_transient.react())
- update = 1
-
- else
- air_transient.temperature = 0
-
- //Update individual gas_mixtures by volume ratio
- for(var/datum/gas_mixture/gas in gases)
- gas.oxygen = air_transient.oxygen*gas.volume/air_transient.volume
- gas.nitrogen = air_transient.nitrogen*gas.volume/air_transient.volume
- gas.toxins = air_transient.toxins*gas.volume/air_transient.volume
- gas.carbon_dioxide = air_transient.carbon_dioxide*gas.volume/air_transient.volume
-
- gas.temperature = air_transient.temperature
-
- if(air_transient.trace_gases.len)
- for(var/datum/gas/trace_gas in air_transient.trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- gas.trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume
- return 1
-
-proc/equalize_gases(datum/gas_mixture/list/gases)
- //Perfectly equalize all gases members instantly
-
- //Calculate totals from individual components
- var/total_volume = 0
- var/total_thermal_energy = 0
- var/total_heat_capacity = 0
-
- var/total_oxygen = 0
- var/total_nitrogen = 0
- var/total_toxins = 0
- var/total_carbon_dioxide = 0
-
- var/list/total_trace_gases = list()
-
- for(var/datum/gas_mixture/gas in gases)
- total_volume += gas.volume
- total_thermal_energy += gas.thermal_energy()
- total_heat_capacity += gas.heat_capacity()
-
- total_oxygen += gas.oxygen
- total_nitrogen += gas.nitrogen
- total_toxins += gas.toxins
- total_carbon_dioxide += gas.carbon_dioxide
-
- if(gas.trace_gases.len)
- for(var/datum/gas/trace_gas in gas.trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- total_trace_gases += corresponding
-
- corresponding.moles += trace_gas.moles
-
- if(total_volume > 0)
-
- //Calculate temperature
- var/temperature = 0
-
- if(total_heat_capacity > 0)
- temperature = total_thermal_energy/total_heat_capacity
-
- //Update individual gas_mixtures by volume ratio
- for(var/datum/gas_mixture/gas in gases)
- gas.oxygen = total_oxygen*gas.volume/total_volume
- gas.nitrogen = total_nitrogen*gas.volume/total_volume
- gas.toxins = total_toxins*gas.volume/total_volume
- gas.carbon_dioxide = total_carbon_dioxide*gas.volume/total_volume
-
- gas.temperature = temperature
-
- if(total_trace_gases.len)
- for(var/datum/gas/trace_gas in total_trace_gases)
- var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases
- if(!corresponding)
- corresponding = new trace_gas.type()
- gas.trace_gases += corresponding
-
- corresponding.moles = trace_gas.moles*gas.volume/total_volume
-
- return 1
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm
index 9664b73747a..41c15ac0de5 100644
--- a/code/ATMOSPHERICS/datum_pipeline.dm
+++ b/code/ATMOSPHERICS/datum_pipeline.dm
@@ -1,24 +1,145 @@
+var/global/list/datum/pipeline/pipe_networks = list()
+
/datum/pipeline
var/datum/gas_mixture/air
+ var/list/datum/gas_mixture/other_airs = list()
- var/list/obj/machinery/atmospherics/pipe/members
- var/list/obj/machinery/atmospherics/pipe/edges //Used for building networks
+ var/list/obj/machinery/atmospherics/pipe/members = list()
+ var/list/obj/machinery/atmospherics/other_atmosmch = list()
- var/datum/pipe_network/network
+ var/update = 1
var/alert_pressure = 0
-/datum/pipeline/proc/process()//This use to be called called from the pipe networks
+/datum/pipeline/New()
+ pipe_networks += src
+/datum/pipeline/Destroy()
+ pipe_networks -= src
+ if(air && air.volume)
+ temporarily_store_air()
+ for(var/obj/machinery/atmospherics/pipe/P in members)
+ P.parent = null
+ for(var/obj/machinery/atmospherics/A in other_atmosmch)
+ A.nullifyPipenet(src)
+ ..()
+
+/datum/pipeline/proc/process()//This use to be called called from the pipe networks
+ if(update)
+ update = 0
+ reconcile_air()
+ return
+ /*
//Check to see if pressure is within acceptable limits
var/pressure = air.return_pressure()
if(pressure > alert_pressure)
for(var/obj/machinery/atmospherics/pipe/member in members)
if(!member.check_pressure(pressure))
break //Only delete 1 pipe per process
-
//Allow for reactions
//air.react() //Should be handled by pipe_network now
+ */
+
+
+var/pipenetwarnings = 10
+
+/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/base)
+ base.setPipenet(src)
+ var/volume = 0
+ if(istype(base, /obj/machinery/atmospherics/pipe))
+ var/obj/machinery/atmospherics/pipe/E = base
+ volume = E.volume
+ alert_pressure = E.alert_pressure
+ members += E
+ if(E.air_temporary)
+ air = E.air_temporary
+ E.air_temporary = null
+ else
+ addMachineryMember(base)
+ if(!air)
+ air = new
+ var/list/possible_expansions = list(base)
+ while(possible_expansions.len>0)
+ for(var/obj/machinery/atmospherics/borderline in possible_expansions)
+
+ var/list/result = borderline.pipeline_expansion(src)
+
+ if(result.len>0)
+ for(var/obj/machinery/atmospherics/P in result)
+ if(istype(P, /obj/machinery/atmospherics/pipe))
+ var/obj/machinery/atmospherics/pipe/item = P
+ if(!members.Find(item))
+
+ if(item.parent)
+ if(pipenetwarnings > 0)
+ error("[item.type] added to a pipenet while still having one. ([item.x], [item.y], [item.z])")
+ pipenetwarnings -= 1
+ if(pipenetwarnings == 0)
+ error("further messages about pipenets will be supressed")
+ members += item
+ possible_expansions += item
+
+ volume += item.volume
+ item.parent = src
+
+ alert_pressure = min(alert_pressure, item.alert_pressure)
+
+ if(item.air_temporary)
+ air.merge(item.air_temporary)
+ item.air_temporary = null
+ else
+ P.setPipenet(src, borderline)
+ addMachineryMember(P)
+
+ possible_expansions -= borderline
+
+ air.volume = volume
+
+/datum/pipeline/proc/addMachineryMember(obj/machinery/atmospherics/A)
+ other_atmosmch |= A
+ var/datum/gas_mixture/G = A.returnPipenetAir(src)
+ other_airs |= G
+
+/datum/pipeline/proc/addMember(obj/machinery/atmospherics/A, obj/machinery/atmospherics/N)
+ if(istype(A, /obj/machinery/atmospherics/pipe))
+ var/obj/machinery/atmospherics/pipe/P = A
+ P.parent = src
+ var/list/adjacent = P.pipeline_expansion()
+ for(var/obj/machinery/atmospherics/pipe/I in adjacent)
+ if(I.parent == src)
+ continue
+ var/datum/pipeline/E = I.parent
+ merge(E)
+ if(!members.Find(P))
+ members += P
+ air.volume += P.volume
+ else
+ A.setPipenet(src, N)
+ addMachineryMember(A)
+
+/datum/pipeline/proc/merge(datum/pipeline/E)
+ air.volume += E.air.volume
+ members.Add(E.members)
+ for(var/obj/machinery/atmospherics/pipe/S in E.members)
+ S.parent = src
+ air.merge(E.air)
+ for(var/obj/machinery/atmospherics/A in E.other_atmosmch)
+ A.replacePipenet(E, src)
+ other_atmosmch.Add(E.other_atmosmch)
+ other_airs.Add(E.other_airs)
+ E.members.Cut()
+ E.other_atmosmch.Cut()
+ qdel(E)
+
+/obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/A)
+ return
+
+/obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/A)
+ parent.addMember(A, src)
+
+/obj/machinery/atmospherics/addMember(obj/machinery/atmospherics/A)
+ var/datum/pipeline/P = returnPipenet(A)
+ P.addMember(A, src)
/datum/pipeline/proc/temporarily_store_air()
//Update individual gas_mixtures by volume ratio
@@ -41,149 +162,6 @@
corresponding.moles = trace_gas.moles*member.volume/air.volume
-var/pipenetwarnings = 10
-
-/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
- var/list/possible_expansions = list(base)
- members = list(base)
- edges = list()
-
- var/volume = base.volume
- base.parent = src
- alert_pressure = base.alert_pressure
-
- if(base.air_temporary)
- air = base.air_temporary
- base.air_temporary = null
- else
- air = new
- while(possible_expansions.len>0)
- for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions)
-
- var/list/result = borderline.pipeline_expansion()
- var/edge_check = result.len
-
- if(result.len>0)
- for(var/obj/machinery/atmospherics/pipe/item in result)
- if(!members.Find(item))
-
- if(item.parent)
- if(pipenetwarnings > 0)
- error("[item.type] added to a pipenet while still having one. ([item.x], [item.y], [item.z])")
- pipenetwarnings -= 1
- if(pipenetwarnings == 0)
- error("further messages about pipenets will be supressed")
- members += item
- possible_expansions += item
-
- volume += item.volume
- item.parent = src
-
- alert_pressure = min(alert_pressure, item.alert_pressure)
-
- if(item.air_temporary)
- air.merge(item.air_temporary)
- item.air_temporary = null
-
- edge_check--
-
- if(edge_check>0)
- edges += borderline
-
- possible_expansions -= borderline
-
- air.volume = volume
-
-/datum/pipeline/proc/addMember(obj/machinery/atmospherics/pipe/P)
- P.parent = src
- var/list/adjacent = P.pipeline_expansion()
- var/list/oldedges = list()
- for(var/obj/machinery/atmospherics/pipe/I in adjacent)
- oldedges += I
- if(I.parent == src)
- continue
- var/datum/pipeline/E = I.parent
- air.volume += E.air.volume
- if(E.members.len > members.len)
- members.Add(E.members)
- for(var/obj/machinery/atmospherics/pipe/S in E.members)
- S.parent = src
- edges.Add(E.edges)
- air.merge(E.air)
- adjacent -= I
- if(adjacent.len)
- edges |= P
- if(!members.Find(P))
- members += P
- air.volume += P.volume
- if(oldedges.len)
- for(var/obj/machinery/atmospherics/pipe/O in oldedges)
- var/list/Oedges = O.pipeline_expansion()
- for(var/obj/machinery/atmospherics/pipe/Oedgepipes in Oedges)
- Oedges -= Oedgepipes
- if(Oedges.len)
- edges |= O
- else
- edges -= O
-
-/obj/machinery/atmospherics/proc/addMember(obj/machinery/atmospherics/pipe/P)
- return
-
-/obj/machinery/atmospherics/pipe/addMember(obj/machinery/atmospherics/pipe/P)
- parent.addMember(P)
-
-/datum/pipeline/Destroy()
- if(network)
- qdel(network)
- if(air && air.volume)
- temporarily_store_air()
- for(var/obj/machinery/atmospherics/pipe/P in members)
- P.parent = null
- ..()
-
-/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
-
- if(new_network.line_members.Find(src))
- return 0
-
- new_network.line_members += src
-
- network = new_network
-
- for(var/obj/machinery/atmospherics/pipe/edge in edges)
- for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion())
- if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference))
- result.network_expand(new_network, edge)
-
- return 1
-
-/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference)
- if(!network)
- network = new /datum/pipe_network()
- network.build_network(src, null)
- //technically passing these parameters should not be allowed
- //however pipe_network.build_network(..) and pipeline.network_extend(...)
- // were setup to properly handle this case
-
- return network
-
-/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
- var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume)
- air_sample.volume = mingle_volume
-
- var/datum/gas_mixture/turf_air = target.return_air()
-
- equalize_gases(list(air_sample, turf_air))
- air.merge(air_sample)
- //turf_air already modified by equalize_gases()
-
- if(istype(target))
- if(target.air)
- if(target.air.check_tile_graphic())
- target.update_visuals(target.air)
- if(network)
- network.update = 1
-
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
var/total_heat_capacity = air.heat_capacity()
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
@@ -234,5 +212,215 @@ var/pipenetwarnings = 10
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
air.temperature -= heat/total_heat_capacity
- if(network)
- network.update = 1
\ No newline at end of file
+ update = 1
+
+/datum/pipeline/proc/reconcile_air()
+ var/list/datum/gas_mixture/GL = list()
+ var/list/datum/pipeline/PL = list()
+ PL += src
+
+ for(var/i=1;i<=PL.len;i++)
+ var/datum/pipeline/P = PL[i]
+ GL += P.air
+ GL += P.other_airs
+ for(var/obj/machinery/atmospherics/binary/valve/V in P.other_atmosmch)
+ if(V.open)
+ PL |= V.parent1
+ PL |= V.parent2
+ for(var/obj/machinery/atmospherics/unary/portables_connector/C in P.other_atmosmch)
+ if(C.connected_device)
+ GL += C.portableConnectorReturnAir()
+
+ var/total_volume = 0
+ var/total_thermal_energy = 0
+ var/total_heat_capacity = 0
+ var/total_oxygen = 0
+ var/total_nitrogen = 0
+ var/total_toxins = 0
+ var/total_carbon_dioxide = 0
+ var/list/total_trace_gases = list()
+
+ for(var/datum/gas_mixture/G in GL)
+ total_volume += G.volume
+ total_thermal_energy += G.thermal_energy()
+ total_heat_capacity += G.heat_capacity()
+
+ total_oxygen += G.oxygen
+ total_nitrogen += G.nitrogen
+ total_toxins += G.toxins
+ total_carbon_dioxide += G.carbon_dioxide
+
+ if(G.trace_gases.len)
+ for(var/datum/gas/trace_gas in G.trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ total_trace_gases += corresponding
+
+ corresponding.moles += trace_gas.moles
+
+ if(total_volume > 0)
+
+ //Calculate temperature
+ var/temperature = 0
+
+ if(total_heat_capacity > 0)
+ temperature = total_thermal_energy/total_heat_capacity
+
+ //Update individual gas_mixtures by volume ratio
+ for(var/datum/gas_mixture/G in GL)
+ G.oxygen = total_oxygen*G.volume/total_volume
+ G.nitrogen = total_nitrogen*G.volume/total_volume
+ G.toxins = total_toxins*G.volume/total_volume
+ G.carbon_dioxide = total_carbon_dioxide*G.volume/total_volume
+
+ G.temperature = temperature
+
+ if(total_trace_gases.len)
+ for(var/datum/gas/trace_gas in total_trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in G.trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ G.trace_gases += corresponding
+
+ corresponding.moles = trace_gas.moles*G.volume/total_volume
+
+
+/*
+/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
+ var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume)
+ air_sample.volume = mingle_volume
+
+ var/datum/gas_mixture/turf_air = target.return_air()
+
+ equalize_gases(list(air_sample, turf_air))
+ air.merge(air_sample)
+ //turf_air already modified by equalize_gases()
+
+ if(istype(target))
+ if(target.air)
+ if(target.air.check_tile_graphic())
+ target.update_visuals(target.air)
+ update = 1
+
+/datum/pipeline/proc/reconcile_air()
+ //Perfectly equalize all gases members instantly
+
+ //Calculate totals from individual components
+ var/total_thermal_energy = 0
+ var/total_heat_capacity = 0
+ var/datum/gas_mixture/air_transient = new()
+ var/list/gases = list(air)
+ gases.Add(other_airs)
+ for(var/datum/gas_mixture/gas in gases)
+ air_transient.volume += gas.volume
+ total_thermal_energy += gas.thermal_energy()
+ total_heat_capacity += gas.heat_capacity()
+
+ air_transient.oxygen += gas.oxygen
+ air_transient.nitrogen += gas.nitrogen
+ air_transient.toxins += gas.toxins
+ air_transient.carbon_dioxide += gas.carbon_dioxide
+
+ if(gas.trace_gases.len)
+ for(var/datum/gas/trace_gas in gas.trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in air_transient.trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ air_transient.trace_gases += corresponding
+
+ corresponding.moles += trace_gas.moles
+
+ if(air_transient.volume > 0)
+
+ if(total_heat_capacity > 0)
+ air_transient.temperature = total_thermal_energy/total_heat_capacity
+
+ //Allow air mixture to react
+ if(air_transient.react())
+ update = 1
+
+ else
+ air_transient.temperature = 0
+
+ //Update individual gas_mixtures by volume ratio
+ for(var/datum/gas_mixture/gas in gases)
+ gas.oxygen = air_transient.oxygen*gas.volume/air_transient.volume
+ gas.nitrogen = air_transient.nitrogen*gas.volume/air_transient.volume
+ gas.toxins = air_transient.toxins*gas.volume/air_transient.volume
+ gas.carbon_dioxide = air_transient.carbon_dioxide*gas.volume/air_transient.volume
+
+ gas.temperature = air_transient.temperature
+
+ if(air_transient.trace_gases.len)
+ for(var/datum/gas/trace_gas in air_transient.trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ gas.trace_gases += corresponding
+
+ corresponding.moles = trace_gas.moles*gas.volume/air_transient.volume
+ return 1
+
+proc/equalize_gases(datum/gas_mixture/list/gases)
+ //Perfectly equalize all gases members instantly
+
+ //Calculate totals from individual components
+ var/total_volume = 0
+ var/total_thermal_energy = 0
+ var/total_heat_capacity = 0
+
+ var/total_oxygen = 0
+ var/total_nitrogen = 0
+ var/total_toxins = 0
+ var/total_carbon_dioxide = 0
+
+ var/list/total_trace_gases = list()
+
+ for(var/datum/gas_mixture/gas in gases)
+ total_volume += gas.volume
+ total_thermal_energy += gas.thermal_energy()
+ total_heat_capacity += gas.heat_capacity()
+
+ total_oxygen += gas.oxygen
+ total_nitrogen += gas.nitrogen
+ total_toxins += gas.toxins
+ total_carbon_dioxide += gas.carbon_dioxide
+
+ if(gas.trace_gases.len)
+ for(var/datum/gas/trace_gas in gas.trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in total_trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ total_trace_gases += corresponding
+
+ corresponding.moles += trace_gas.moles
+
+ if(total_volume > 0)
+
+ //Calculate temperature
+ var/temperature = 0
+
+ if(total_heat_capacity > 0)
+ temperature = total_thermal_energy/total_heat_capacity
+
+ //Update individual gas_mixtures by volume ratio
+ for(var/datum/gas_mixture/gas in gases)
+ gas.oxygen = total_oxygen*gas.volume/total_volume
+ gas.nitrogen = total_nitrogen*gas.volume/total_volume
+ gas.toxins = total_toxins*gas.volume/total_volume
+ gas.carbon_dioxide = total_carbon_dioxide*gas.volume/total_volume
+
+ gas.temperature = temperature
+
+ if(total_trace_gases.len)
+ for(var/datum/gas/trace_gas in total_trace_gases)
+ var/datum/gas/corresponding = locate(trace_gas.type) in gas.trace_gases
+ if(!corresponding)
+ corresponding = new trace_gas.type()
+ gas.trace_gases += corresponding
+
+ corresponding.moles = trace_gas.moles*gas.volume/total_volume
+
+ return 1
+*/
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/he_pipes.dm b/code/ATMOSPHERICS/he_pipes.dm
index 03a892e7a37..182696fe101 100644
--- a/code/ATMOSPHERICS/he_pipes.dm
+++ b/code/ATMOSPHERICS/he_pipes.dm
@@ -82,4 +82,4 @@
node2 = target
break
update_icon()
- return
+ return
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm
index da4756b3d74..1a13c0701eb 100644
--- a/code/ATMOSPHERICS/pipes.dm
+++ b/code/ATMOSPHERICS/pipes.dm
@@ -9,7 +9,7 @@
var/alert_pressure = 80*ONE_ATMOSPHERE
//minimum pressure before check_pressure(...) should be called
-/obj/machinery/atmospherics/pipe/proc/pipeline_expansion()
+/obj/machinery/atmospherics/proc/pipeline_expansion()
return null
/obj/machinery/atmospherics/pipe/proc/check_pressure(pressure)
@@ -24,32 +24,12 @@
air_update_turf()
/obj/machinery/atmospherics/pipe/return_air()
- if(!parent)
- parent = new /datum/pipeline()
- parent.build_pipeline(src)
return parent.air
/obj/machinery/atmospherics/pipe/build_network()
if(!parent)
parent = new /datum/pipeline()
parent.build_pipeline(src)
- return parent.return_network()
-
-/obj/machinery/atmospherics/pipe/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
- if(!parent)
- parent = new /datum/pipeline()
- parent.build_pipeline(src)
- return parent.network_expand(new_network, reference)
-
-/obj/machinery/atmospherics/pipe/return_network(obj/machinery/atmospherics/reference)
- if(!parent)
- parent = new /datum/pipeline()
- parent.build_pipeline(src)
- return parent.return_network(reference)
-
-/obj/machinery/atmospherics/pipe/Destroy()
- del(parent)
- ..()
/obj/machinery/atmospherics/pipe/attackby(obj/item/weapon/W, mob/user)
if(istype(W, /obj/item/device/analyzer))
@@ -59,3 +39,6 @@
return
return ..()
+
+/obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/P)
+ parent = P
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/pipes/manifold.dm b/code/ATMOSPHERICS/pipes/manifold.dm
index cefc8589ad0..29f16311b63 100644
--- a/code/ATMOSPHERICS/pipes/manifold.dm
+++ b/code/ATMOSPHERICS/pipes/manifold.dm
@@ -57,14 +57,17 @@
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
+ node1 = null
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
+ node2 = null
A.build_network()
if(node3)
var/obj/machinery/atmospherics/A = node3
node3.disconnect(src)
+ node3 = null
A.build_network()
releaseAirToTurf()
..()
diff --git a/code/ATMOSPHERICS/pipes/manifold4w.dm b/code/ATMOSPHERICS/pipes/manifold4w.dm
index 9f71e5950a5..17b6528e039 100644
--- a/code/ATMOSPHERICS/pipes/manifold4w.dm
+++ b/code/ATMOSPHERICS/pipes/manifold4w.dm
@@ -55,18 +55,22 @@
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
+ node1 = null
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
+ node2 = null
A.build_network()
if(node3)
var/obj/machinery/atmospherics/A = node3
node3.disconnect(src)
+ node3 = null
A.build_network()
if(node4)
var/obj/machinery/atmospherics/A = node4
node4.disconnect(src)
+ node4 = null
A.build_network()
releaseAirToTurf()
..()
diff --git a/code/ATMOSPHERICS/pipes/simple.dm b/code/ATMOSPHERICS/pipes/simple.dm
index 4ed1acca93d..da6fce0c263 100644
--- a/code/ATMOSPHERICS/pipes/simple.dm
+++ b/code/ATMOSPHERICS/pipes/simple.dm
@@ -69,10 +69,12 @@ The regular pipe you see everywhere, including bent ones.
if(node1)
var/obj/machinery/atmospherics/A = node1
node1.disconnect(src)
+ node1 = null
A.build_network()
if(node2)
var/obj/machinery/atmospherics/A = node2
node2.disconnect(src)
+ node2 = null
A.build_network()
releaseAirToTurf()
..()
diff --git a/code/ATMOSPHERICS/pipes/tank.dm b/code/ATMOSPHERICS/pipes/tank.dm
index 0c5dfe53a23..0424cf34005 100644
--- a/code/ATMOSPHERICS/pipes/tank.dm
+++ b/code/ATMOSPHERICS/pipes/tank.dm
@@ -1,42 +1,12 @@
-
-/*
-Atmospheric Tanks
-*/
-/obj/machinery/atmospherics/pipe/tank
+/obj/machinery/atmospherics/unary/tank
icon = 'icons/obj/atmospherics/pipe_tank.dmi'
icon_state = "generic"
-
name = "pressure tank"
desc = "A large vessel containing pressurized gas."
-
- volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
-
- dir = SOUTH
- initialize_directions = SOUTH
+ var/volume = 10000 //in liters, 1 meters by 1 meters by 2 meters
density = 1
- can_unwrench = 0
- var/obj/machinery/atmospherics/node
- var/showpipe = 0
-/obj/machinery/atmospherics/pipe/tank/New()
- initialize_directions = dir
- ..()
-
-/obj/machinery/atmospherics/pipe/tank/hide(var/intact)
- showpipe = !intact
- update_icon()
-
- ..(intact)
-
-/obj/machinery/atmospherics/pipe/tank/Destroy()
- if(node)
- node.disconnect(src)
- ..()
-
-/obj/machinery/atmospherics/pipe/tank/pipeline_expansion()
- return list(node)
-
-/obj/machinery/atmospherics/pipe/tank/update_icon()
+/obj/machinery/atmospherics/unary/tank/update_icon()
underlays.Cut()
if(showpipe)
var/state
@@ -46,124 +16,66 @@ Atmospheric Tanks
col = node.pipe_color
else
state = "pipe_exposed"
-
underlays += getpipeimage('icons/obj/atmospherics/pipe_tank.dmi', state, initialize_directions, col)
-/obj/machinery/atmospherics/pipe/tank/initialize()
- var/connect_direction = dir
- for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
- if(target.initialize_directions & get_dir(target,src))
- node = target
- break
-
- if(level == 2)
- showpipe = 1
-
- update_icon()
-
-/obj/machinery/atmospherics/pipe/tank/disconnect(obj/machinery/atmospherics/reference)
- if(reference == node)
- if(istype(node, /obj/machinery/atmospherics/pipe))
- del(parent)
- node = null
- update_icon()
-
-
-/*
-CO2 Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/carbon_dioxide
+/obj/machinery/atmospherics/unary/tank/carbon_dioxide
name = "pressure tank (Carbon Dioxide)"
-/obj/machinery/atmospherics/pipe/tank/carbon_dioxide/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T20C
-
- air_temporary.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
+/obj/machinery/atmospherics/unary/tank/carbon_dioxide/New()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ air_contents.carbon_dioxide = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-/*
-Plasma Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/toxins
+/obj/machinery/atmospherics/unary/tank/toxins
icon_state = "orange"
name = "pressure tank (Plasma)"
-/obj/machinery/atmospherics/pipe/tank/toxins/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T20C
-
- air_temporary.toxins = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
+/obj/machinery/atmospherics/unary/tank/toxins/New()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ air_contents.toxins = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-/*
-Plasma + Oxygen Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b
+/obj/machinery/atmospherics/unary/tank/oxygen_agent_b
icon_state = "orange_2"
name = "pressure tank (Oxygen + Plasma)"
-/obj/machinery/atmospherics/pipe/tank/oxygen_agent_b/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T0C
-
- var/datum/gas/oxygen_agent_b/trace_gas = new
- trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
- air_temporary.trace_gases += trace_gas
-
+/obj/machinery/atmospherics/unary/tank/oxygen_agent_b/New()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T0C
+ var/datum/gas/oxygen_agent_b/trace_gas = new
+ trace_gas.moles = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
+ air_contents.trace_gases += trace_gas
-/*
-Oxygen Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/oxygen
+/obj/machinery/atmospherics/unary/tank/oxygen
icon_state = "blue"
name = "pressure tank (Oxygen)"
-/obj/machinery/atmospherics/pipe/tank/oxygen/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T20C
-
- air_temporary.oxygen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
+/obj/machinery/atmospherics/unary/tank/oxygen/New()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ air_contents.oxygen = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-/*
-Nitrogen Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/nitrogen
+/obj/machinery/atmospherics/unary/tank/nitrogen
icon_state = "red"
name = "pressure tank (Nitrogen)"
-/obj/machinery/atmospherics/pipe/tank/nitrogen/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T20C
-
- air_temporary.nitrogen = (25*ONE_ATMOSPHERE)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
+/obj/machinery/atmospherics/unary/tank/nitrogen/New()
..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ air_contents.nitrogen = (25*ONE_ATMOSPHERE)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
-/*
-Air Tank
-*/
-/obj/machinery/atmospherics/pipe/tank/air
+/obj/machinery/atmospherics/unary/tank/air
icon_state = "grey"
name = "pressure tank (Air)"
-/obj/machinery/atmospherics/pipe/tank/air/New()
- air_temporary = new
- air_temporary.volume = volume
- air_temporary.temperature = T20C
-
- air_temporary.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
- air_temporary.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_temporary.volume)/(R_IDEAL_GAS_EQUATION*air_temporary.temperature)
-
- ..()
\ No newline at end of file
+/obj/machinery/atmospherics/unary/tank/air/New()
+ ..()
+ air_contents.volume = volume
+ air_contents.temperature = T20C
+ air_contents.oxygen = (25*ONE_ATMOSPHERE*O2STANDARD)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
+ air_contents.nitrogen = (25*ONE_ATMOSPHERE*N2STANDARD)*(air_contents.volume)/(R_IDEAL_GAS_EQUATION*air_contents.temperature)
\ No newline at end of file
diff --git a/code/ATMOSPHERICS/pipes/vent.dm b/code/ATMOSPHERICS/pipes/vent.dm
index 677c1988dd3..e69de29bb2d 100644
--- a/code/ATMOSPHERICS/pipes/vent.dm
+++ b/code/ATMOSPHERICS/pipes/vent.dm
@@ -1,89 +0,0 @@
-
-/*
-Atmospheric Vent
-*/
-/obj/machinery/atmospherics/pipe/vent
- icon = 'icons/obj/atmospherics/pipe_vent.dmi'
- icon_state = "intact"
-
- name = "vent"
- desc = "A large air vent"
-
- level = 1
-
- volume = 250
-
- dir = SOUTH
- initialize_directions = SOUTH
-
- can_unwrench = 0
-
- var/build_killswitch = 1
-
- var/obj/machinery/atmospherics/node1
-
-/obj/machinery/atmospherics/pipe/vent/New()
- initialize_directions = dir
- ..()
-
-/obj/machinery/atmospherics/pipe/vent/process()
- if(!parent)
- if(build_killswitch <= 0)
- . = PROCESS_KILL
- else
- build_killswitch--
- ..()
- return
- else
- parent.mingle_with_turf(loc, 250)
-/*
- if(!node1)
- if(!nodealert)
- //world << "Missing node from [src] at [src.x],[src.y],[src.z]"
- nodealert = 1
- else if (nodealert)
- nodealert = 0
-*/
-/obj/machinery/atmospherics/pipe/vent/Destroy()
- if(node1)
- node1.disconnect(src)
- ..()
-
-/obj/machinery/atmospherics/pipe/vent/pipeline_expansion()
- return list(node1)
-
-/obj/machinery/atmospherics/pipe/vent/update_icon()
- if(node1)
- icon_state = "intact"
-
- dir = get_dir(src, node1)
-
- else
- icon_state = "exposed"
-
-/obj/machinery/atmospherics/pipe/vent/initialize()
- var/connect_direction = dir
-
- for(var/obj/machinery/atmospherics/target in get_step(src,connect_direction))
- if(target.initialize_directions & get_dir(target,src))
- node1 = target
- break
-
- update_icon()
-
-/obj/machinery/atmospherics/pipe/vent/disconnect(obj/machinery/atmospherics/reference)
- if(reference == node1)
- if(istype(node1, /obj/machinery/atmospherics/pipe))
- del(parent)
- node1 = null
-
- update_icon()
-
- return null
-
-/obj/machinery/atmospherics/pipe/vent/hide(var/i) //to make the little pipe section invisible, the icon changes.
- if(node1)
- icon_state = "[i == 1 && istype(loc, /turf/simulated) ? "h" : "" ]intact"
- dir = get_dir(src, node1)
- else
- icon_state = "exposed"
\ No newline at end of file
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index acf02a77bc8..c35c6577189 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -267,9 +267,9 @@ var/global/pipe_processing_killed = 0
processing_objects -= Object
/datum/controller/game_controller/proc/process_pipenets()
- last_thing_processed = /datum/pipe_network
- for(var/datum/pipe_network/Network in pipe_networks)
- Network.process()
+ last_thing_processed = /datum/pipeline
+ for(var/datum/pipeline/P in pipe_networks)
+ P.process()
/datum/controller/game_controller/proc/process_powernets()
last_thing_processed = /datum/powernet
diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm
index 25bc022a36b..3741c13b09e 100644
--- a/code/game/machinery/atmoalter/portable_atmospherics.dm
+++ b/code/game/machinery/atmoalter/portable_atmospherics.dm
@@ -3,7 +3,7 @@
use_power = 0
var/datum/gas_mixture/air_contents = new
- var/obj/machinery/atmospherics/portables_connector/connected_port
+ var/obj/machinery/atmospherics/unary/portables_connector/connected_port
var/obj/item/weapon/tank/holding
var/volume = 0
@@ -34,7 +34,7 @@
/obj/machinery/portable_atmospherics/update_icon()
return null
-/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
+/obj/machinery/portable_atmospherics/proc/connect(obj/machinery/atmospherics/unary/portables_connector/new_port)
//Make sure not already connected to something else
if(connected_port || !new_port || new_port.connected_device)
return 0
@@ -46,32 +46,22 @@
//Perform the connection
connected_port = new_port
connected_port.connected_device = src
+ connected_port.parent.reconcile_air()
anchored = 1 //Prevent movement
-
- //Actually enforce the air sharing
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network && !network.gases.Find(air_contents))
- network.gases += air_contents
- network.update = 1
-
return 1
/obj/machinery/portable_atmospherics/proc/disconnect()
if(!connected_port)
return 0
-
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network)
- network.gases -= air_contents
-
anchored = 0
-
connected_port.connected_device = null
connected_port = null
-
return 1
+/obj/machinery/portable_atmospherics/portableConnectorReturnAir()
+ return air_contents
+
/obj/machinery/portable_atmospherics/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
if ((istype(W, /obj/item/weapon/tank) && !( src.destroyed )))
if (src.holding)
@@ -90,7 +80,7 @@
update_icon()
return
else
- var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc
+ var/obj/machinery/atmospherics/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/unary/portables_connector) in loc
if(possible_port)
if(connect(possible_port))
user << "You connect [name] to the port."
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index e5acc1ea5af..de9224050fb 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -61,7 +61,7 @@
process_occupant()
if(abs(temperature_archived-air_contents.temperature) > 1)
- network.update = 1
+ parent.update = 1
updateDialog()
return 1
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 7120b1d1550..9e0ab579263 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -27,7 +27,6 @@ Buildable meters
name = "pipe"
desc = "A pipe"
var/pipe_type = 0
- //var/pipe_dir = 0
var/pipename
force = 7
icon = 'icons/obj/pipe-item.dmi'
@@ -37,7 +36,7 @@ Buildable meters
level = 2
var/flipped = 0
-/obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null)
+/obj/item/pipe/New(loc, pipe_type, dir, obj/machinery/atmospherics/make_from)
..()
if (make_from)
src.dir = make_from.dir
@@ -55,7 +54,7 @@ Buildable meters
src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent
else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple))
src.pipe_type = PIPE_SIMPLE_STRAIGHT + is_bent
- else if(istype(make_from, /obj/machinery/atmospherics/portables_connector))
+ else if(istype(make_from, /obj/machinery/atmospherics/unary/portables_connector))
src.pipe_type = PIPE_CONNECTOR
else if(istype(make_from, /obj/machinery/atmospherics/pipe/manifold))
src.pipe_type = PIPE_MANIFOLD
@@ -63,7 +62,7 @@ Buildable meters
src.pipe_type = PIPE_UVENT
else if(istype(make_from, /obj/machinery/atmospherics/valve/digital))
src.pipe_type = PIPE_DVALVE
- else if(istype(make_from, /obj/machinery/atmospherics/valve))
+ else if(istype(make_from, /obj/machinery/atmospherics/binary/valve))
src.pipe_type = PIPE_MVALVE
else if(istype(make_from, /obj/machinery/atmospherics/binary/pump))
src.pipe_type = PIPE_PUMP
@@ -305,275 +304,90 @@ Buildable meters
switch(pipe_type)
if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT)
var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc )
- P.dir = src.dir
- P.initialize_directions = pipe_dir
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- if (P.node1)
- P.node1.initialize()
- P.node1.addMember(P)
- if (P.node2)
- P.node2.initialize()
- P.node2.addMember(P)
- P.build_network()
+ P.construction(dir, pipe_dir)
if(PIPE_HE_STRAIGHT, PIPE_HE_BENT)
var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/P = new ( src.loc )
- P.dir = src.dir
- P.initialize_directions = pipe_dir
P.initialize_directions_he = pipe_dir
- //var/turf/T = P.loc
- //P.level = T.intact ? 2 : 1
- P.initialize()
- if (P.node1)
- P.node1.initialize()
- P.node1.addMember(P)
- if (P.node2)
- P.node2.initialize()
- P.node2.addMember(P)
- P.build_network()
+ P.construction(dir, pipe_dir)
- if(PIPE_CONNECTOR) // connector
- var/obj/machinery/atmospherics/portables_connector/C = new( src.loc )
- C.dir = dir
- C.initialize_directions = pipe_dir
+ if(PIPE_CONNECTOR)
+ var/obj/machinery/atmospherics/unary/portables_connector/C = new( src.loc )
if (pipename)
C.name = pipename
- var/turf/T = C.loc
- C.level = T.intact ? 2 : 1
- C.initialize()
- C.build_network()
- if (C.node)
- C.node.initialize()
- C.node.build_network()
+ C.construction(dir, pipe_dir)
-
- if(PIPE_MANIFOLD) //manifold
+ if(PIPE_MANIFOLD)
var/obj/machinery/atmospherics/pipe/manifold/M = new(loc)
- M.dir = dir
- M.initialize_directions = pipe_dir
- var/turf/T = M.loc
- M.level = T.intact ? 2 : 1
- M.initialize()
- if (M.node1)
- M.node1.initialize()
- M.node1.addMember(M)
- if (M.node2)
- M.node2.initialize()
- M.node2.addMember(M)
- if (M.node3)
- M.node3.initialize()
- M.node3.addMember(M)
- M.build_network()
+ M.construction(dir, pipe_dir)
- if(PIPE_4WAYMANIFOLD) //manifold
+ if(PIPE_4WAYMANIFOLD)
var/obj/machinery/atmospherics/pipe/manifold4w/M = new( src.loc )
-
- var/turf/T = M.loc
- M.level = T.intact ? 2 : 1
- M.initialize()
- if (M.node1)
- M.node1.initialize()
- M.node1.addMember(M)
- if (M.node2)
- M.node2.initialize()
- M.node2.addMember(M)
- if (M.node3)
- M.node3.initialize()
- M.node3.addMember(M)
- if (M.node4)
- M.node4.initialize()
- M.node4.addMember(M)
- M.build_network()
+ M.construction(dir, pipe_dir)
if(PIPE_JUNCTION)
var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction/P = new ( src.loc )
- P.dir = src.dir
- P.initialize_directions = src.get_pdir()
P.initialize_directions_he = src.get_hdir()
- //var/turf/T = P.loc
- //P.level = T.intact ? 2 : 1
- P.initialize()
- if (P.node1)
- P.node1.initialize()
- P.node1.addMember(P)
- if (P.node2)
- P.node2.initialize()
- P.node2.addMember(P)
- P.build_network()
+ P.construction(dir, get_pdir())
- if(PIPE_UVENT) //unary vent
+ if(PIPE_UVENT)
var/obj/machinery/atmospherics/unary/vent_pump/V = new( src.loc )
- V.dir = dir
- V.initialize_directions = pipe_dir
+ V.construction(dir, pipe_dir)
+
+ if(PIPE_MVALVE)
+ var/obj/machinery/atmospherics/binary/valve/V = new(src.loc)
if (pipename)
V.name = pipename
- var/turf/T = V.loc
- V.level = T.intact ? 2 : 1
- V.initialize()
- V.build_network()
- if (V.node)
- V.node.initialize()
- V.node.build_network()
+ V.construction(dir, get_pdir())
-
- if(PIPE_MVALVE) //manual valve
- var/obj/machinery/atmospherics/valve/V = new(src.loc)
- V.dir = dir
- V.initialize_directions = pipe_dir
- if (pipename)
- V.name = pipename
- var/turf/T = V.loc
- V.level = T.intact ? 2 : 1
- V.initialize()
- V.build_network()
- if (V.node1)
-// world << "[V.node1.name] is connected to valve, forcing it to update its nodes."
- V.node1.initialize()
- V.node1.build_network()
- if (V.node2)
-// world << "[V.node2.name] is connected to valve, forcing it to update its nodes."
- V.node2.initialize()
- V.node2.build_network()
-
- if(PIPE_DVALVE) //Digital valves. Shameless copypaste from manual valves because I don't into atmos code.
+ if(PIPE_DVALVE)
var/obj/machinery/atmospherics/valve/digital/V = new(src.loc)
- V.dir = dir
- V.initialize_directions = pipe_dir
if (pipename)
V.name = pipename
- var/turf/T = V.loc
- V.level = T.intact ? 2 : 1
- V.initialize()
- V.build_network()
- if (V.node1)
- V.node1.initialize()
- V.node1.build_network()
- if (V.node2)
- V.node2.initialize()
- V.node2.build_network()
+ V.construction(dir, get_pdir())
- if(PIPE_PUMP) //gas pump
+ if(PIPE_PUMP)
var/obj/machinery/atmospherics/binary/pump/P = new(src.loc)
- P.dir = dir
- P.initialize_directions = pipe_dir
- if (pipename)
- P.name = pipename
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- P.build_network()
- if (P.node1)
- P.node1.initialize()
- P.node1.build_network()
- if (P.node2)
- P.node2.initialize()
- P.node2.build_network()
-
- if(PIPE_GAS_FILTER, PIPE_GAS_MIXER) //Trinary stuff
+ P.construction(dir, pipe_dir)
+ if(PIPE_GAS_FILTER, PIPE_GAS_MIXER)
var/obj/machinery/atmospherics/trinary/P
if(pipe_type == PIPE_GAS_FILTER)
P = new /obj/machinery/atmospherics/trinary/filter(src.loc)
else if(pipe_type == PIPE_GAS_MIXER)
P = new /obj/machinery/atmospherics/trinary/mixer(src.loc)
-
P.flipped = flipped
- P.dir = unflip(dir)
- P.initialize_directions = pipe_dir
if (pipename)
P.name = pipename
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- P.build_network()
- if (P.node1)
- P.node1.initialize()
- P.node1.build_network()
- if (P.node2)
- P.node2.initialize()
- P.node2.build_network()
- if (P.node3)
- P.node3.initialize()
- P.node3.build_network()
+ P.construction(unflip(dir), pipe_dir)
- if(PIPE_SCRUBBER) //scrubber
+ if(PIPE_SCRUBBER)
var/obj/machinery/atmospherics/unary/vent_scrubber/S = new(src.loc)
- S.dir = dir
- S.initialize_directions = pipe_dir
if (pipename)
S.name = pipename
- var/turf/T = S.loc
- S.level = T.intact ? 2 : 1
- S.initialize()
- S.build_network()
- if (S.node)
- S.node.initialize()
- S.node.build_network()
+ S.construction(dir, pipe_dir)
if(PIPE_INSULATED_STRAIGHT, PIPE_INSULATED_BENT)
var/obj/machinery/atmospherics/pipe/simple/insulated/P = new( src.loc )
- P.dir = src.dir
- P.initialize_directions = pipe_dir
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- if (P.node1)
- P.node1.initialize()
- P.node1.addMember(P)
- if (P.node2)
- P.node2.initialize()
- P.node2.addMember(P)
- P.build_network()
+ P.construction(dir, pipe_dir)
- if(PIPE_PASSIVE_GATE) //passive gate
+ if(PIPE_PASSIVE_GATE)
var/obj/machinery/atmospherics/binary/passive_gate/P = new(src.loc)
- P.dir = dir
- P.initialize_directions = pipe_dir
if (pipename)
P.name = pipename
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- P.build_network()
- if (P.node1)
- P.node1.initialize()
- P.node1.build_network()
- if (P.node2)
- P.node2.initialize()
- P.node2.build_network()
+ P.construction(dir, pipe_dir)
- if(PIPE_VOLUME_PUMP) //volume pump
+ if(PIPE_VOLUME_PUMP)
var/obj/machinery/atmospherics/binary/volume_pump/P = new(src.loc)
- P.dir = dir
- P.initialize_directions = pipe_dir
if (pipename)
P.name = pipename
- var/turf/T = P.loc
- P.level = T.intact ? 2 : 1
- P.initialize()
- P.build_network()
- if (P.node1)
- P.node1.initialize()
- P.node1.build_network()
- if (P.node2)
- P.node2.initialize()
- P.node2.build_network()
+ P.construction(dir, pipe_dir)
- if(PIPE_HEAT_EXCHANGE) // heat exchanger
+ if(PIPE_HEAT_EXCHANGE)
var/obj/machinery/atmospherics/unary/heat_exchanger/C = new( src.loc )
- C.dir = dir
- C.initialize_directions = pipe_dir
if (pipename)
C.name = pipename
- var/turf/T = C.loc
- C.level = T.intact ? 2 : 1
- C.initialize()
- C.build_network()
- if (C.node)
- C.node.initialize()
- C.node.build_network()
+ C.construction(dir, pipe_dir)
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message( \
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 338ed1bae87..e8b7317b67a 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -45,7 +45,7 @@
var/internal_tank_valve = ONE_ATMOSPHERE
var/obj/machinery/portable_atmospherics/canister/internal_tank
var/datum/gas_mixture/cabin_air
- var/obj/machinery/atmospherics/portables_connector/connected_port = null
+ var/obj/machinery/atmospherics/unary/portables_connector/connected_port = null
var/obj/item/device/radio/radio = null
@@ -832,7 +832,7 @@
. = t_air.return_temperature()
return
-/obj/mecha/proc/connect(obj/machinery/atmospherics/portables_connector/new_port)
+/obj/mecha/proc/connect(obj/machinery/atmospherics/unary/portables_connector/new_port)
//Make sure not already connected to something else
if(connected_port || !new_port || new_port.connected_device)
return 0
@@ -844,12 +844,8 @@
//Perform the connection
connected_port = new_port
connected_port.connected_device = src
+ connected_port.parent.reconcile_air()
- //Actually enforce the air sharing
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network && !(internal_tank.return_air() in network.gases))
- network.gases += internal_tank.return_air()
- network.update = 1
log_message("Connected to gas port.")
return 1
@@ -857,15 +853,13 @@
if(!connected_port)
return 0
- var/datum/pipe_network/network = connected_port.return_network(src)
- if(network)
- network.gases -= internal_tank.return_air()
-
connected_port.connected_device = null
connected_port = null
src.log_message("Disconnected from gas port.")
return 1
+/obj/mecha/portableConnectorReturnAir()
+ return internal_tank.return_air()
/////////////////////////
//////// Verbs ////////
@@ -881,7 +875,7 @@
if(usr.stat) return
if(usr != src.occupant) return
- var/obj/machinery/atmospherics/portables_connector/possible_port = locate(/obj/machinery/atmospherics/portables_connector/) in loc
+ var/obj/machinery/atmospherics/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/unary/portables_connector/) in loc
if(possible_port)
if(connect(possible_port))
src.occupant_message("[name] connects to the port.")
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 75bb884316e..b0bec3393ff 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -132,43 +132,40 @@
entry_vent = null
else if(entry_vent)
if(get_dist(src, entry_vent) <= 1)
- if(entry_vent.network && entry_vent.network.normal_members.len)
- var/list/vents = list()
- for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.network.normal_members)
- vents.Add(temp_vent)
- if(!vents.len)
- entry_vent = null
- return
- var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents)
- if(prob(50))
- visible_message("[src] scrambles into the ventillation ducts!", \
- "You hear something squeezing through the ventilation ducts.")
-
- spawn(rand(20,60))
- loc = exit_vent
- var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
- spawn(travel_time)
-
- if(!exit_vent || exit_vent.welded)
- loc = entry_vent
- entry_vent = null
- return
-
- if(prob(50))
- audible_message("You hear something squeezing through the ventilation ducts.")
- sleep(travel_time)
-
- if(!exit_vent || exit_vent.welded)
- loc = entry_vent
- entry_vent = null
- return
- loc = exit_vent.loc
- entry_vent = null
- var/area/new_area = get_area(loc)
- if(new_area)
- new_area.Entered(src)
- else
+ var/list/vents = list()
+ for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch)
+ vents.Add(temp_vent)
+ if(!vents.len)
entry_vent = null
+ return
+ var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents)
+ if(prob(50))
+ visible_message("[src] scrambles into the ventillation ducts!", \
+ "You hear something squeezing through the ventilation ducts.")
+
+ spawn(rand(20,60))
+ loc = exit_vent
+ var/travel_time = round(get_dist(loc, exit_vent.loc) / 2)
+ spawn(travel_time)
+
+ if(!exit_vent || exit_vent.welded)
+ loc = entry_vent
+ entry_vent = null
+ return
+
+ if(prob(50))
+ audible_message("You hear something squeezing through the ventilation ducts.")
+ sleep(travel_time)
+
+ if(!exit_vent || exit_vent.welded)
+ loc = entry_vent
+ entry_vent = null
+ return
+ loc = exit_vent.loc
+ entry_vent = null
+ var/area/new_area = get_area(loc)
+ if(new_area)
+ new_area.Entered(src)
//=================
else if(prob(33))
@@ -213,7 +210,7 @@
var/mob/living/user = usr
var/breakout_time = 2
user.changeNext_move(CLICK_CD_BREAKOUT)
- user.last_special = world.time + CLICK_CD_BREAKOUT
+ user.last_special = world.time + CLICK_CD_BREAKOUT
user << "You struggle against the tight bonds! (This will take about [breakout_time] minutes.)"
visible_message("You see something struggling and writhing in the [src]!")
if(do_after(user,(breakout_time*60*10)))
diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm
index c4c82a9cf45..bdb5d6cd0dc 100644
--- a/code/modules/events/alien_infestation.dm
+++ b/code/modules/events/alien_infestation.dm
@@ -28,8 +28,8 @@
/datum/round_event/alien_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
- if(temp_vent.network.normal_members.len > 20) //Stops Aliens getting stuck in small networks. See: Security, Virology
+ if(temp_vent.loc.z == 1 && !temp_vent.welded)
+ if(temp_vent.parent.other_atmosmch.len > 20) //Stops Aliens getting stuck in small networks. See: Security, Virology
vents += temp_vent
var/list/candidates = get_candidates(BE_ALIEN, ALIEN_AFK_BRACKET)
diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm
index 8bfb56e49f8..e282e3b45b1 100644
--- a/code/modules/events/spider_infestation.dm
+++ b/code/modules/events/spider_infestation.dm
@@ -21,8 +21,8 @@
/datum/round_event/spider_infestation/start()
var/list/vents = list()
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
- if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network)
- if(temp_vent.network.normal_members.len > 20)
+ if(temp_vent.loc.z == 1 && !temp_vent.welded)
+ if(temp_vent.parent.other_atmosmch.len > 20)
vents += temp_vent
while((spawncount >= 1) && vents.len)
diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm
index db410577ab7..1f06710548a 100644
--- a/code/modules/events/vent_clog.dm
+++ b/code/modules/events/vent_clog.dm
@@ -17,8 +17,8 @@
/datum/round_event/vent_clog/setup()
endWhen = rand(25, 100)
for(var/obj/machinery/atmospherics/unary/vent_scrubber/temp_vent in machines)
- if(temp_vent.loc.z == 1 && temp_vent.network)
- if(temp_vent.network.normal_members.len > 20)
+ if(temp_vent.loc.z == 1)
+ if(temp_vent.parent.other_atmosmch.len > 20)
vents += temp_vent
if(!vents.len)
return kill()