From 1b5f4611bdecb7dfef4737e1f1287ce4419b4f17 Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Sat, 15 Jan 2011 17:22:24 +0000 Subject: [PATCH] Reverted in r847 pipes-related changes is returning. With small improvements. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@856 316c924e-a436-60f5-8080-3fe189b3f50e --- .../components/binary_devices/pump.dm | 2 +- .../components/portables_connector.dm | 4 +- .../components/unary/vent_pump.dm | 2 +- .../components/unary/vent_scrubber.dm | 2 +- code/ATMOSPHERICS/components/valve.dm | 32 ++++- code/ATMOSPHERICS/pipes.dm | 116 ++++++++++-------- .../atmoalter/portable_atmospherics.dm | 1 + code/game/machinery/pipe/construction.dm | 98 +++++++-------- 8 files changed, 147 insertions(+), 110 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 96e0e97036..00fcc47150 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -196,5 +196,5 @@ obj/machinery/atmospherics/binary/pump "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/portables_connector.dm b/code/ATMOSPHERICS/components/portables_connector.dm index 7065b25605..cda8f1e6be 100644 --- a/code/ATMOSPHERICS/components/portables_connector.dm +++ b/code/ATMOSPHERICS/components/portables_connector.dm @@ -134,6 +134,8 @@ if (connected_device) user << "\red You cannot unwrench this [src], dettach [connected_device] first." return 1 + if (locate(/obj/machinery/portable_atmospherics, src.loc)) + return 1 var/turf/T = src.loc if (level==1 && isturf(T) && T.intact) user << "\red You must remove the plating first." @@ -151,5 +153,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 1634a4c075..db23bfbcd6 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -274,5 +274,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 43673eb1d0..feae5b68ce 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -213,5 +213,5 @@ "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/components/valve.dm b/code/ATMOSPHERICS/components/valve.dm index 2769ef4679..86b65acccd 100644 --- a/code/ATMOSPHERICS/components/valve.dm +++ b/code/ATMOSPHERICS/components/valve.dm @@ -106,6 +106,12 @@ obj/machinery/atmospherics/valve build_network() return 1 + + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 attack_ai(mob/user as mob) return @@ -129,10 +135,28 @@ obj/machinery/atmospherics/valve return initialize() - if(node1 && node2) return + 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 +/* var/connect_directions - switch(dir) if(NORTH) connect_directions = NORTH|SOUTH @@ -163,7 +187,7 @@ obj/machinery/atmospherics/valve break if(node1) break - +*/ build_network() if(!network_node1 && node1) network_node1 = new /datum/pipe_network() @@ -283,5 +307,5 @@ obj/machinery/atmospherics/valve "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) del(src) diff --git a/code/ATMOSPHERICS/pipes.dm b/code/ATMOSPHERICS/pipes.dm index 5c0d3e6dcc..e863237730 100644 --- a/code/ATMOSPHERICS/pipes.dm +++ b/code/ATMOSPHERICS/pipes.dm @@ -155,8 +155,17 @@ obj/machinery/atmospherics/pipe proc/burst() src.visible_message("\red \bold [src] bursts!"); playsound(src.loc, 'bang.ogg', 25, 1) + var/datum/effects/system/harmless_smoke_spread/smoke = new + smoke.set_up(1,0, src.loc, 0) + smoke.start() del(src) + proc/normalize_dir() + if(dir==3) + dir = 1 + else if(dir==12) + dir = 4 + Del() if(node1) node1.disconnect(src) @@ -169,8 +178,6 @@ obj/machinery/atmospherics/pipe return list(node1, node2) update_icon() - if(dir==3) dir = 1 - else if(dir==12) dir = 4 if(node1&&node2) var/C = "" switch(color) @@ -187,36 +194,35 @@ obj/machinery/atmospherics/pipe //dir = node1_direction|node2_direction else + if(!node1&&!node2) + del(src) //TODO: silent deleting looks weird var/have_node1 = node1?1:0 var/have_node2 = node2?1:0 icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" - if(!node1&&!node2) - del(src) initialize() - var/connect_directions = initialize_directions + normalize_dir() + var/node1_dir + var/node2_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)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break + 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 - 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 - connect_directions &= ~direction - break - if(node2) - break - var/turf/T = src.loc // hide if turf is not intact hide(T.intact) update_icon() @@ -268,16 +274,14 @@ obj/machinery/atmospherics/pipe del(src) initialize() - if(!node1) - for(var/obj/machinery/atmospherics/pipe/simple/target in get_step(src,initialize_directions)) - if(target.initialize_directions & get_dir(target,src)) - node1 = target - break - if(!node2) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - break + for(var/obj/machinery/atmospherics/target in get_step(src,initialize_directions)) + if(target.initialize_directions & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,initialize_directions_he)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break update_icon() @@ -291,26 +295,26 @@ obj/machinery/atmospherics/pipe thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT initialize() - var/connect_directions = initialize_directions_he + normalize_dir() + var/node1_dir + var/node2_dir + for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,direction)) - if(target.initialize_directions_he & get_dir(target,src)) - node1 = target - connect_directions &= ~direction - break - if (node1) - break + if(direction&initialize_directions_he) + if (!node1_dir) + node1_dir = direction + else if (!node2_dir) + node2_dir = direction + + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node1_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node1 = target + break + for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,node2_dir)) + if(target.initialize_directions_he & get_dir(target,src)) + node2 = target + break - for(var/direction in cardinal) - if(direction&connect_directions) - for(var/obj/machinery/atmospherics/pipe/simple/heat_exchanging/target in get_step(src,direction)) - if(target.initialize_directions_he & get_dir(target,src)) - node2 = target - connect_directions &= ~direction - break - if (node2) - break update_icon() @@ -711,9 +715,9 @@ obj/machinery/atmospherics/pipe update_icon() obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) - if (istype(W, /obj/machinery/atmospherics/pipe/tank)) + if (istype(src, /obj/machinery/atmospherics/pipe/tank)) return ..() - if (istype(W, /obj/machinery/atmospherics/pipe/vent)) + if (istype(src, /obj/machinery/atmospherics/pipe/vent)) return ..() if (!istype(W, /obj/item/weapon/wrench)) return ..() @@ -734,5 +738,9 @@ obj/machinery/atmospherics/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/u "[user] unfastens \the [src].", \ "\blue You have unfastened \the [src].", \ "You hear ratchet.") - new /obj/item/weapon/pipe(loc, make_from=src) + new /obj/item/pipe(loc, make_from=src) + for (var/obj/machinery/meter/meter in T) + if (meter.target == src) + new /obj/item/pipe_meter(T) + del(meter) del(src) \ No newline at end of file diff --git a/code/game/machinery/atmoalter/portable_atmospherics.dm b/code/game/machinery/atmoalter/portable_atmospherics.dm index 9a1cdaa2dc..a6c5fa95be 100644 --- a/code/game/machinery/atmoalter/portable_atmospherics.dm +++ b/code/game/machinery/atmoalter/portable_atmospherics.dm @@ -54,6 +54,7 @@ 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 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index add1efd048..71e63f933b 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -16,7 +16,7 @@ Buildable meters #define PIPE_INSULATED_STRAIGHT 11 #define PIPE_INSULATED_BENT 12 -/obj/item/weapon/pipe +/obj/item/pipe name = "pipe" desc = "A pipe" var/pipe_type = 0 @@ -28,8 +28,8 @@ Buildable meters flags = TABLEPASS|FPRINT w_class = 4 level = 2 - //TODO: список номер_типа -> тип -/obj/item/weapon/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) + +/obj/item/pipe/New(var/loc, var/pipe_type as num, var/dir as num, var/obj/machinery/atmospherics/make_from = null) ..() if (make_from) src.dir = make_from.dir @@ -41,8 +41,10 @@ Buildable meters is_bent = 1 if (istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction)) src.pipe_type = PIPE_JUNCTION - else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging)) + else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/heat_exchanging)) src.pipe_type = PIPE_HE_STRAIGHT + is_bent + else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/insulated)) + 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)) @@ -57,19 +59,17 @@ Buildable meters src.pipe_type = PIPE_PUMP else if(istype(make_from, /obj/machinery/atmospherics/unary/vent_scrubber)) src.pipe_type = PIPE_SCRUBBER - else if(istype(make_from, /obj/machinery/atmospherics/pipe/simple/insulated)) - src.pipe_type = PIPE_INSULATED_STRAIGHT + is_bent - if (is_bent) - src.dir = make_from.initialize_directions //workaround. Bent pipes with one node==null have cardinal direction. - rastaf0 else src.pipe_type = pipe_type src.dir = dir //src.pipe_dir = get_pipe_dir() update() + src.pixel_x = rand(-5, 5) + src.pixel_y = rand(-5, 5) //update the name and icon of the pipe item depending on the type -/obj/item/weapon/pipe/proc/update() +/obj/item/pipe/proc/update() var/list/nlist = list( \ "pipe", \ "bent pipe", \ @@ -102,31 +102,13 @@ Buildable meters "insulated", \ ) icon_state = islist[pipe_type + 1] - updateicon() - -//update the icon of the item - -/obj/item/weapon/pipe/proc/updateicon() - if(invisibility) // true if placed under floor - icon -= rgb(0,0,0,128) // fade the icon - else - icon = initial(icon) // otherwise reset to inital icon - -// called to hide or unhide a pipe -// i=true if hiding - -/obj/item/weapon/pipe/hide(var/i) - - invisibility = i ? 101 : 0 // make hidden pipe items invisible - updateicon() - //called when a turf is attacked with a pipe item // place the pipe on the turf, setting pipe level to 1 (underfloor) if the turf is not intact // rotate the pipe item clockwise -/obj/item/weapon/pipe/verb/rotate() +/obj/item/pipe/verb/rotate() set name = "Rotate Pipe" set src in view(1) @@ -134,18 +116,30 @@ Buildable meters return src.dir = turn(src.dir, -90) + + if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 //src.pipe_dir = get_pipe_dir() return -/obj/item/weapon/pipe/Move() - var/dir = src.dir +/obj/item/pipe/Move() ..() - src.dir = dir + if ((pipe_type in list (PIPE_SIMPLE_BENT, PIPE_HE_BENT, PIPE_INSULATED_BENT)) \ + && (src.dir in cardinal)) + src.dir = src.dir|turn(src.dir, 90) + else if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 return // returns all pipe's endpoints -/obj/item/weapon/pipe/proc/get_pipe_dir() +/obj/item/pipe/proc/get_pipe_dir() if (!dir) return 0 var/flip = turn(dir, 180) @@ -169,7 +163,7 @@ Buildable meters return flip|cw|acw return 0 -/obj/item/weapon/pipe/proc/get_pdir() //endpoints for regular pipes +/obj/item/pipe/proc/get_pdir() //endpoints for regular pipes var/flip = turn(dir, 180) // var/cw = turn(dir, -90) @@ -186,7 +180,7 @@ Buildable meters // return the h_dir (heat-exchange pipes) from the type and the dir -/obj/item/weapon/pipe/proc/get_hdir() //endpoints for h/e pipes +/obj/item/pipe/proc/get_hdir() //endpoints for h/e pipes // var/flip = turn(dir, 180) // var/cw = turn(dir, -90) @@ -201,15 +195,20 @@ Buildable meters else return 0 -/obj/item/weapon/pipe/attack_self(mob/user as mob) +/obj/item/pipe/attack_self(mob/user as mob) return rotate() -/obj/item/weapon/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/item/pipe/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) //* if (!istype(W, /obj/item/weapon/wrench)) return ..() if (!isturf(src.loc)) return 1 + if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE)) + if(dir==2) + dir = 1 + else if(dir==8) + dir = 4 var/pipe_dir = get_pipe_dir() for(var/obj/machinery/atmospherics/M in src.loc) @@ -264,6 +263,8 @@ Buildable meters 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) @@ -311,20 +312,15 @@ Buildable meters if (P.node2) P.node2.initialize() P.node2.build_network() -/* - if(6) //junctions - var/obj/machinery/junction/J = new( src.loc ) - J.dir = dir - J.p_dir = src.get_pdir() - J.h_dir = src.get_hdir() - J.level = 2 -*/ + if(PIPE_UVENT) //unary vent var/obj/machinery/atmospherics/unary/vent_pump/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.node) @@ -338,6 +334,8 @@ Buildable meters 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) @@ -355,6 +353,8 @@ Buildable meters 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) @@ -371,6 +371,8 @@ Buildable meters 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) @@ -397,8 +399,8 @@ Buildable meters playsound(src.loc, 'Ratchet.ogg', 50, 1) user.visible_message( \ - "[user] fastens the pipe.", \ - "\blue You have fastened the pipe.", \ + "[user] fastens the [src].", \ + "\blue You have fastened the [src].", \ "You hear ratchet.") del(src) // remove the pipe item @@ -409,7 +411,7 @@ Buildable meters -/obj/item/weapon/pipe_meter +/obj/item/pipe_meter name = "meter" desc = "A meter that can be laid on pipes" icon = 'pipe-item.dmi' @@ -418,7 +420,7 @@ Buildable meters flags = TABLEPASS|FPRINT w_class = 4 -/obj/item/weapon/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) +/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if (!istype(W, /obj/item/weapon/wrench)) return ..()