mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
60 lines
1.4 KiB
Plaintext
60 lines
1.4 KiB
Plaintext
zone
|
|
New(turf/start)
|
|
if(istype(start,/list))
|
|
contents = start
|
|
else
|
|
contents = FloodFill(start)
|
|
for(var/turf/T in contents)
|
|
T.zone = src
|
|
if(istype(T,/turf/space))
|
|
AddSpace(T)
|
|
air = new
|
|
var/members = contents.len
|
|
for(var/turf/simulated/T in contents)
|
|
air.oxygen += T.oxygen / members
|
|
air.nitrogen += T.nitrogen / members
|
|
air.carbon_dioxide += T.carbon_dioxide / members
|
|
air.toxins += T.toxins / members
|
|
air.temperature += T.temperature / members
|
|
air.group_multiplier = contents.len
|
|
zones += src
|
|
Del()
|
|
zones -= src
|
|
. = ..()
|
|
|
|
proc/FloodFill(turf/start)
|
|
var
|
|
list
|
|
open = list(start)
|
|
closed = list()
|
|
|
|
while(open.len)
|
|
for(var/turf/T in open)
|
|
if(!T.HasDoor())
|
|
for(var/d in cardinal)
|
|
var/turf/O = get_step(T,d)
|
|
if(O.ZCanPass(T) && !(O in open) && !(O in closed))
|
|
open += O
|
|
open -= T
|
|
closed += T
|
|
|
|
return closed
|
|
|
|
turf/proc/ZCanPass(turf/T)
|
|
if(istype(T,/turf/space)) return 0
|
|
else
|
|
if(T.blocks_air||blocks_air)
|
|
return 0
|
|
|
|
for(var/obj/obstacle in src)
|
|
if(istype(obstacle,/obj/machinery/door) && !istype(obstacle,/obj/machinery/door/window))
|
|
continue
|
|
if(!obstacle.CanPass(0, T, 0, 1))
|
|
return 0
|
|
for(var/obj/obstacle in T)
|
|
if(istype(obstacle,/obj/machinery/door) && !istype(obstacle,/obj/machinery/door/window))
|
|
continue
|
|
if(!obstacle.CanPass(0, src, 0, 1))
|
|
return 0
|
|
|
|
return 1 |