Files
CHOMPStation2/code/modules/water/components/binary/binary_water_base.dm
2012-01-24 15:45:51 -05:00

147 lines
3.1 KiB
Plaintext

obj/machinery/water/binary
dir = SOUTH
initialize_directions = SOUTH|NORTH
var/datum/reagents/r1
var/datum/reagents/r2
var/obj/machinery/water/node1
var/obj/machinery/water/node2
var/datum/water/pipe_network/network1
var/datum/water/pipe_network/network2
var/max_volume = 400
var/max_pressure = 3 * ONE_ATMOSPHERE
New()
..()
switch(dir)
if(NORTH)
initialize_directions = NORTH|SOUTH
if(SOUTH)
initialize_directions = NORTH|SOUTH
if(EAST)
initialize_directions = EAST|WEST
if(WEST)
initialize_directions = EAST|WEST
r1 = new(max_volume)
r1.my_atom = src
r2 = new(max_volume)
r2.my_atom = src
// Housekeeping and pipe network stuff below
network_expand(datum/water/pipe_network/new_network, obj/machinery/water/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
Del()
loc = null
if(node1)
node1.disconnect(src)
del(network1)
if(node2)
node2.disconnect(src)
del(network2)
node1 = null
node2 = null
..()
initialize()
if(node1 && node2) return
var/node2_connect = dir
var/node1_connect = turn(dir, 180)
for(var/obj/machinery/water/target in get_step(src,node1_connect))
if(target.initialize_directions & get_dir(target,src))
node1 = target
break
for(var/obj/machinery/water/target in get_step(src,node2_connect))
if(target.initialize_directions & get_dir(target,src))
node2 = target
break
update_icon()
build_network()
if(!network1 && node1)
network1 = new /datum/water/pipe_network()
network1.normal_members += src
network1.build_network(node1, src)
if(!network2 && node2)
network2 = new /datum/water/pipe_network()
network2.normal_members += src
network2.build_network(node2, src)
return_network(obj/machinery/water/reference)
build_network()
if(reference==node1)
return network1
if(reference==node2)
return network2
return null
reassign_network(datum/water/pipe_network/old_network, datum/water/pipe_network/new_network)
if(network1 == old_network)
network1 = new_network
if(network2 == old_network)
network2 = new_network
return 1
return_network_reagents(datum/water/pipe_network/reference)
var/list/results = list()
if(network1 == reference)
results += r1
if(network2 == reference)
results += r2
return results
disconnect(obj/machinery/water/reference)
if(reference==node1)
del(network1)
node1 = null
else if(reference==node2)
del(network2)
node2 = null
return null
proc/return_pressure1()
return r1.total_volume / r1.maximum_volume * max_pressure
proc/return_pressure2()
return r2.total_volume / r2.maximum_volume * max_pressure
proc/mingle_dc1_with_turf()
mingle_outflow_with_turf(get_turf(src), r1.total_volume,
turn(dir, 180),
reagents = r1, pressure = return_pressure1())
proc/mingle_dc2_with_turf()
mingle_outflow_with_turf(get_turf(src), r2.total_volume,
dir,
reagents = r2, pressure = return_pressure2())