From 1aeec3bfb3fe1df8fe6fc0f17f62fc73073d6a1f Mon Sep 17 00:00:00 2001 From: panurgomatic Date: Sun, 14 Nov 2010 12:00:17 +0000 Subject: [PATCH] - Constructed vents and scrubbers can be initialized through air alarm interface. - Minor tweaks. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@417 316c924e-a436-60f5-8080-3fe189b3f50e --- .../components/unary/vent_scrubber.dm | 6 +- code/ATMOSPHERICS/init_S_V_A.dm | 154 ++++++++++-------- code/game/machinery/alarm.dm | 4 + 3 files changed, 89 insertions(+), 75 deletions(-) diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 6ffb27a4ee8..68a00623163 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -21,14 +21,14 @@ var/panic = 0 //is this scrubber panicked? update_icon() - if(on)//&&node)//seems to be broken + if(on&&node) if(scrubbing) icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]on" else icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]in" else icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]off" - //on = 0 + on = 0 return @@ -155,7 +155,7 @@ volume_rate = 2000 else scrubbing = 1 - volume_rate = 120 + volume_rate = initial(volume_rate) if(signal.data["tag"]) spawn(2) broadcast_status() diff --git a/code/ATMOSPHERICS/init_S_V_A.dm b/code/ATMOSPHERICS/init_S_V_A.dm index f5f98d5655e..f5ecd07ce74 100644 --- a/code/ATMOSPHERICS/init_S_V_A.dm +++ b/code/ATMOSPHERICS/init_S_V_A.dm @@ -1,82 +1,92 @@ datum/controller/game_controller proc/find_air_alarms() - + var/list/processed_areas = list() for(var/area/A in world) - var/area/M = A.master //we want to search master area, not only L(number) one + if(A in processed_areas) continue + processed_areas += connect_area_atmos_machinery(A) + return - var/uniq_id = md5(M.name)//hash works like a charm - var/list/alarms = list() - var/list/scrubbers = list() - var/list/vents = list() - var/i = 0 //used in id_tag and name generation - if(M.related && M.related.len)//if has relatives - for(var/area/Rel in M.related)//check all relatives - if(Rel == M) continue //same parent area. - if(Rel.contents && Rel.contents.len) - for(var/obj/O in Rel.contents) - switch(O.type) - if(/obj/machinery/alarm) - alarms += O - if(/obj/machinery/atmospherics/unary/vent_scrubber) - scrubbers += O - if(/obj/machinery/atmospherics/unary/vent_pump) - vents += O - else continue +/proc/connect_area_atmos_machinery(var/area/A) + var/area/M = A.master //we want to search master area, not only L(number) one + + var/uniq_id = md5(M.name)//hash works like a charm + var/list/alarms = list() + var/list/scrubbers = list() + var/list/vents = list() + var/list/processed_areas = list() + var/i = 0 //used in id_tag and name generation + + if(M.related && M.related.len)//if has relatives + for(var/area/Rel in M.related)//check all relatives + if(Rel == M) continue //same parent area. + processed_areas += Rel + if(Rel.contents && Rel.contents.len) + for(var/obj/machinery/O in Rel.contents) + switch(O.type) + if(/obj/machinery/alarm) + alarms += O + if(/obj/machinery/atmospherics/unary/vent_scrubber) + if(O:id_tag) continue + scrubbers += O + if(/obj/machinery/atmospherics/unary/vent_pump) + if(O:id) continue + vents += O + else continue /* - for(var/obj/machinery/alarm/Al in Rel.contents)//find air alarms in area, append to list - alarms += Al - for(var/obj/machinery/atmospherics/unary/vent_scrubber/V in Rel.contents)//find scrubbers in area, append to list - if(V.id_tag) continue//already connected to air alarm - scrubbers += V - for(var/obj/machinery/atmospherics/unary/vent_pump/P in Rel.contents) - if(P.id) continue - vents += P + for(var/obj/machinery/alarm/Al in Rel.contents)//find air alarms in area, append to list + alarms += Al + for(var/obj/machinery/atmospherics/unary/vent_scrubber/V in Rel.contents)//find scrubbers in area, append to list + if(V.id_tag) continue//already connected to air alarm + scrubbers += V + for(var/obj/machinery/atmospherics/unary/vent_pump/P in Rel.contents) + if(P.id) continue + vents += P */ - if(!alarms.len || (!scrubbers.len && !vents.len)) continue + if(!alarms.len || (!scrubbers.len && !vents.len)) return - i = 0 - if(scrubbers.len) //if scrubbers found in area - for(var/obj/machinery/atmospherics/unary/vent_scrubber/Sc in scrubbers)//iterate over found scrubbers - if(Sc.id_tag) continue - var/dist = 127 //max value returned by get_dist - var/obj/machinery/alarm/target_alarm = null - for(var/obj/machinery/alarm/Al in alarms)//iterate over found alarms - var/temp_dist = get_dist(Sc.loc, Al.loc)//if distance between current scrubber and current alarm < previous distance, set this alarm as target to connect to - if(temp_dist