mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 11:13:16 +00:00
105 lines
2.9 KiB
Plaintext
105 lines
2.9 KiB
Plaintext
#define QUANTIZE(variable) (round(variable,0.0001))
|
|
var/explosion_halt = 0
|
|
zone
|
|
proc/process()
|
|
if(rebuild)
|
|
if(!contents.len)
|
|
del src
|
|
return 0
|
|
var
|
|
turf/sample = pick(contents)
|
|
list/new_contents = FloodFill(sample)
|
|
problem = 0
|
|
for(var/turf/T in contents)
|
|
if(!(T in new_contents))
|
|
problem = 1
|
|
|
|
if(problem)
|
|
var/list/rebuild_turfs = list()
|
|
for(var/turf/T in contents - new_contents)
|
|
contents -= T
|
|
rebuild_turfs += T
|
|
T.zone = null
|
|
for(var/turf/T in rebuild_turfs)
|
|
if(!T.zone)
|
|
var/zone/Z = new/zone(T)
|
|
Z.air.copy_from(air)
|
|
rebuild = 0
|
|
|
|
var/total_space = 0
|
|
var/turf/space/space
|
|
|
|
if(length(connected_zones))
|
|
for(var/zone/Z in connected_zones)
|
|
total_space += length(Z.space_tiles)
|
|
if(length(Z.space_tiles))
|
|
space = Z.space_tiles[1]
|
|
|
|
if(space_tiles)
|
|
for(var/T in space_tiles)
|
|
if(!istype(T,/turf/space)) space_tiles -= T
|
|
total_space += length(space_tiles)
|
|
if(length(space_tiles))
|
|
space = space_tiles[1]
|
|
|
|
if(total_space && space)
|
|
var/old_pressure = air.return_pressure()
|
|
air.temperature_mimic(space,OPEN_HEAT_TRANSFER_COEFFICIENT,total_space)
|
|
air.remove(MOLES_CELLSTANDARD * (air.group_multiplier/40) * total_space)
|
|
if(dbg_output) world << "Space removed [MOLES_CELLSTANDARD*(air.group_multiplier/40)*total_space] moles of air."
|
|
var/p_diff = old_pressure - air.return_pressure()
|
|
if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) AirflowSpace(src,p_diff)
|
|
|
|
air.react(null,0)
|
|
var/check = air.check_tile_graphic()
|
|
for(var/turf/T in contents)
|
|
if(T.zone && T.zone != src)
|
|
RemoveTurf(T)
|
|
if(dbg_output) world << "Removed invalid turf."
|
|
else if(!T.zone)
|
|
T.zone = src
|
|
|
|
if(istype(T,/turf/simulated))
|
|
var/turf/simulated/S = T
|
|
if(S.fire_protection) S.fire_protection--
|
|
if(check)
|
|
if(S.HasDoor(1))
|
|
S.update_visuals()
|
|
else
|
|
S.update_visuals(air)
|
|
|
|
if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST)
|
|
for(var/atom/movable/item in S)
|
|
item.temperature_expose(air, air.temperature, CELL_VOLUME)
|
|
S.temperature_expose(air, air.temperature, CELL_VOLUME)
|
|
air.graphic_archived = air.graphic
|
|
|
|
air.temperature = max(TCMB,air.temperature)
|
|
|
|
if(length(connections))
|
|
for(var/connection/C in connections)
|
|
C.Cleanup()
|
|
if(C && !C.indirect)
|
|
if(C.A.zone.air.compare(C.B.zone.air))
|
|
ZMerge(C.A.zone,C.B.zone)
|
|
for(var/zone/Z in connected_zones)
|
|
var/p_diff = (air.return_pressure()-Z.air.return_pressure())*connected_zones[Z]*(vsc.zone_share_percent/100)
|
|
if(p_diff > vsc.AF_TINY_MOVEMENT_THRESHOLD) Airflow(src,Z,p_diff)
|
|
air.share_ratio(Z.air,connected_zones[Z]*(vsc.zone_share_percent/100))
|
|
|
|
|
|
zone/proc
|
|
connected_zones()
|
|
. = list()
|
|
for(var/connection/C in connections)
|
|
var/zone/Z
|
|
if(C.A.zone == src)
|
|
Z = C.B.zone
|
|
else
|
|
Z = C.A.zone
|
|
|
|
if(Z in .)
|
|
.[Z]++
|
|
else
|
|
. += Z
|
|
.[Z] = 1 |