mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Experimental ZAS capability for heat to transfer through closed doors.
This commit is contained in:
@@ -17,7 +17,7 @@ connection
|
|||||||
zone_B
|
zone_B
|
||||||
ref_A
|
ref_A
|
||||||
ref_B
|
ref_B
|
||||||
indirect = 0 //If the connection is purely indirect, the zones should not join.
|
indirect = CONNECTION_DIRECT //If the connection is purely indirect, the zones should not join.
|
||||||
last_updated //The tick at which this was last updated.
|
last_updated //The tick at which this was last updated.
|
||||||
no_zone_count = 0
|
no_zone_count = 0
|
||||||
|
|
||||||
@@ -47,6 +47,8 @@ connection
|
|||||||
else
|
else
|
||||||
air_master.turfs_with_connections[ref_B] = list(src)
|
air_master.turfs_with_connections[ref_B] = list(src)
|
||||||
|
|
||||||
|
if(A.CanPass(null, B, 0, 0))
|
||||||
|
|
||||||
if(!A.zone.connected_zones)
|
if(!A.zone.connected_zones)
|
||||||
A.zone.connected_zones = list()
|
A.zone.connected_zones = list()
|
||||||
if(!B.zone.connected_zones)
|
if(!B.zone.connected_zones)
|
||||||
@@ -63,8 +65,29 @@ connection
|
|||||||
else
|
else
|
||||||
B.zone.connected_zones += A.zone
|
B.zone.connected_zones += A.zone
|
||||||
B.zone.connected_zones[A.zone] = 1
|
B.zone.connected_zones[A.zone] = 1
|
||||||
|
|
||||||
|
else
|
||||||
|
indirect = CONNECTION_CLOSED
|
||||||
|
|
||||||
|
|
||||||
|
if(!A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones = list()
|
||||||
|
if(B.zone in A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones[B.zone]++
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones += B.zone
|
||||||
|
A.zone.closed_connection_zones[B.zone] = 1
|
||||||
|
|
||||||
|
if(!B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones = list()
|
||||||
|
if(A.zone in B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones[A.zone]++
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones += A.zone
|
||||||
|
B.zone.closed_connection_zones[A.zone] = 1
|
||||||
|
|
||||||
if(A.HasDoor(B) || B.HasDoor(A))
|
if(A.HasDoor(B) || B.HasDoor(A))
|
||||||
indirect = 1
|
indirect = CONNECTION_INDIRECT
|
||||||
else
|
else
|
||||||
world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]"
|
world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]"
|
||||||
del(src)
|
del(src)
|
||||||
@@ -168,6 +191,75 @@ connection
|
|||||||
zone_B.connected_zones -= zone_A
|
zone_B.connected_zones -= zone_A
|
||||||
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
||||||
zone_B.connected_zones = null
|
zone_B.connected_zones = null
|
||||||
|
else
|
||||||
|
if(A && A.zone)
|
||||||
|
if(B && B.zone)
|
||||||
|
if(B.zone in A.zone.closed_connection_zones)
|
||||||
|
if(A.zone.closed_connection_zones[B.zone] > 1)
|
||||||
|
A.zone.closed_connection_zones[B.zone]--
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones -= B.zone
|
||||||
|
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
|
||||||
|
A.zone.closed_connection_zones = null
|
||||||
|
if( zone_B && (!B.zone || zone_B != B.zone) )
|
||||||
|
if(zone_B in A.zone.closed_connection_zones)
|
||||||
|
if(A.zone.closed_connection_zones[zone_B] > 1)
|
||||||
|
A.zone.closed_connection_zones[zone_B]--
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones -= zone_B
|
||||||
|
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
|
||||||
|
A.zone.closed_connection_zones = null
|
||||||
|
if(zone_A && (!A.zone || zone_A != A.zone))
|
||||||
|
if(B && B.zone)
|
||||||
|
if(B.zone in zone_A.closed_connection_zones)
|
||||||
|
if(zone_A.closed_connection_zones[B.zone] > 1)
|
||||||
|
zone_A.closed_connection_zones[B.zone]--
|
||||||
|
else
|
||||||
|
zone_A.closed_connection_zones -= B.zone
|
||||||
|
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
|
||||||
|
zone_A.closed_connection_zones = null
|
||||||
|
if( zone_B && (!B.zone || zone_B != B.zone) )
|
||||||
|
if(zone_B in zone_A.closed_connection_zones)
|
||||||
|
if(zone_A.closed_connection_zones[zone_B] > 1)
|
||||||
|
zone_A.closed_connection_zones[zone_B]--
|
||||||
|
else
|
||||||
|
zone_A.closed_connection_zones -= zone_B
|
||||||
|
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
|
||||||
|
zone_A.closed_connection_zones = null
|
||||||
|
if(B && B.zone)
|
||||||
|
if(A && A.zone)
|
||||||
|
if(A.zone in B.zone.closed_connection_zones)
|
||||||
|
if(B.zone.closed_connection_zones[A.zone] > 1)
|
||||||
|
B.zone.closed_connection_zones[A.zone]--
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones -= A.zone
|
||||||
|
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
|
||||||
|
B.zone.closed_connection_zones = null
|
||||||
|
if( zone_A && (!A.zone || zone_A != A.zone) )
|
||||||
|
if(zone_A in B.zone.closed_connection_zones)
|
||||||
|
if(B.zone.closed_connection_zones[zone_A] > 1)
|
||||||
|
B.zone.closed_connection_zones[zone_A]--
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones -= zone_A
|
||||||
|
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
|
||||||
|
B.zone.closed_connection_zones = null
|
||||||
|
if(zone_B && (!B.zone || zone_B != B.zone))
|
||||||
|
if(A && A.zone)
|
||||||
|
if(A.zone in zone_B.closed_connection_zones)
|
||||||
|
if(zone_B.closed_connection_zones[A.zone] > 1)
|
||||||
|
zone_B.closed_connection_zones[A.zone]--
|
||||||
|
else
|
||||||
|
zone_B.closed_connection_zones -= A.zone
|
||||||
|
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
|
||||||
|
zone_B.closed_connection_zones = null
|
||||||
|
if( zone_A && (!A.zone || zone_A != A.zone) )
|
||||||
|
if(zone_A in zone_B.closed_connection_zones)
|
||||||
|
if(zone_B.closed_connection_zones[zone_A] > 1)
|
||||||
|
zone_B.closed_connection_zones[zone_A]--
|
||||||
|
else
|
||||||
|
zone_B.closed_connection_zones -= zone_A
|
||||||
|
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
|
||||||
|
zone_B.closed_connection_zones = null
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
proc/Cleanup()
|
proc/Cleanup()
|
||||||
@@ -212,12 +304,32 @@ connection
|
|||||||
else
|
else
|
||||||
B.zone.connected_zones += A.zone
|
B.zone.connected_zones += A.zone
|
||||||
B.zone.connected_zones[A.zone] = 1
|
B.zone.connected_zones[A.zone] = 1
|
||||||
|
|
||||||
|
if(A.zone.closed_connection_zones)
|
||||||
|
if(A.zone.closed_connection_zones[B.zone] > 1)
|
||||||
|
A.zone.closed_connection_zones[B.zone]--
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones.Remove(B.zone)
|
||||||
|
if(A.zone.closed_connection_zones && !A.zone.closed_connection_zones.len)
|
||||||
|
A.zone.closed_connection_zones = null
|
||||||
|
|
||||||
|
if(B.zone.closed_connection_zones)
|
||||||
|
if(B.zone.closed_connection_zones[A.zone] > 1)
|
||||||
|
B.zone.closed_connection_zones[A.zone]--
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones.Remove(A.zone)
|
||||||
|
|
||||||
|
if(B.zone.closed_connection_zones && !B.zone.closed_connection_zones.len)
|
||||||
|
B.zone.closed_connection_zones = null
|
||||||
|
|
||||||
if(door_pass)
|
if(door_pass)
|
||||||
indirect = CONNECTION_DIRECT
|
indirect = CONNECTION_DIRECT
|
||||||
else if(!door_pass)
|
else if(!door_pass)
|
||||||
indirect = CONNECTION_INDIRECT
|
indirect = CONNECTION_INDIRECT
|
||||||
|
|
||||||
else if(indirect > CONNECTION_CLOSED)
|
else if(indirect > CONNECTION_CLOSED)
|
||||||
indirect = CONNECTION_CLOSED
|
indirect = CONNECTION_CLOSED
|
||||||
|
|
||||||
//ADJUST FOR CANNOT CONNECT
|
//ADJUST FOR CANNOT CONNECT
|
||||||
if(A.zone.connected_zones)
|
if(A.zone.connected_zones)
|
||||||
if(A.zone.connected_zones[B.zone] > 1)
|
if(A.zone.connected_zones[B.zone] > 1)
|
||||||
@@ -226,13 +338,33 @@ connection
|
|||||||
A.zone.connected_zones.Remove(B.zone)
|
A.zone.connected_zones.Remove(B.zone)
|
||||||
if(A.zone.connected_zones && !A.zone.connected_zones.len)
|
if(A.zone.connected_zones && !A.zone.connected_zones.len)
|
||||||
A.zone.connected_zones = null
|
A.zone.connected_zones = null
|
||||||
|
|
||||||
if(B.zone.connected_zones)
|
if(B.zone.connected_zones)
|
||||||
if(B.zone.connected_zones[A.zone] > 1)
|
if(B.zone.connected_zones[A.zone] > 1)
|
||||||
B.zone.connected_zones[A.zone]--
|
B.zone.connected_zones[A.zone]--
|
||||||
else
|
else
|
||||||
B.zone.connected_zones.Remove(A.zone)
|
B.zone.connected_zones.Remove(A.zone)
|
||||||
|
|
||||||
if(B.zone.connected_zones && !B.zone.connected_zones.len)
|
if(B.zone.connected_zones && !B.zone.connected_zones.len)
|
||||||
B.zone.connected_zones = null
|
B.zone.connected_zones = null
|
||||||
|
|
||||||
|
//Add to the closed connections list(s)
|
||||||
|
if(!A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones = list()
|
||||||
|
if(B.zone in A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones[B.zone]++
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones += B.zone
|
||||||
|
A.zone.closed_connection_zones[B.zone] = 1
|
||||||
|
|
||||||
|
if(!B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones = list()
|
||||||
|
if(A.zone in B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones[A.zone]++
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones += A.zone
|
||||||
|
B.zone.closed_connection_zones[A.zone] = 1
|
||||||
|
|
||||||
else //If I can no longer pass air, better delete
|
else //If I can no longer pass air, better delete
|
||||||
del src
|
del src
|
||||||
|
|
||||||
@@ -268,6 +400,16 @@ connection
|
|||||||
if(zone_A.connected_zones && !zone_A.connected_zones.len)
|
if(zone_A.connected_zones && !zone_A.connected_zones.len)
|
||||||
zone_A.connected_zones = null
|
zone_A.connected_zones = null
|
||||||
|
|
||||||
|
else
|
||||||
|
if(zone_A.closed_connection_zones)
|
||||||
|
if(zone_A.closed_connection_zones[zone_B] > 1)
|
||||||
|
zone_A.closed_connection_zones[zone_B]--
|
||||||
|
else
|
||||||
|
zone_A.closed_connection_zones.Remove(zone_B)
|
||||||
|
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
|
||||||
|
zone_A.closed_connection_zones = null
|
||||||
|
|
||||||
|
|
||||||
if(zone_B)
|
if(zone_B)
|
||||||
if(zone_B.connections)
|
if(zone_B.connections)
|
||||||
zone_B.connections.Remove(src)
|
zone_B.connections.Remove(src)
|
||||||
@@ -283,6 +425,15 @@ connection
|
|||||||
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
||||||
zone_B.connected_zones = null
|
zone_B.connected_zones = null
|
||||||
|
|
||||||
|
else
|
||||||
|
if(zone_B.closed_connection_zones)
|
||||||
|
if(zone_B.closed_connection_zones[zone_A] > 1)
|
||||||
|
zone_B.closed_connection_zones[zone_A]--
|
||||||
|
else
|
||||||
|
zone_B.closed_connection_zones.Remove(zone_A)
|
||||||
|
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
|
||||||
|
zone_B.closed_connection_zones = null
|
||||||
|
|
||||||
if(indirect != CONNECTION_CLOSED)
|
if(indirect != CONNECTION_CLOSED)
|
||||||
if(!A.zone.connections)
|
if(!A.zone.connections)
|
||||||
A.zone.connections = list()
|
A.zone.connections = list()
|
||||||
@@ -307,6 +458,31 @@ connection
|
|||||||
B.zone.connected_zones += A.zone
|
B.zone.connected_zones += A.zone
|
||||||
B.zone.connected_zones[A.zone] = 1
|
B.zone.connected_zones[A.zone] = 1
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
if(!A.zone.connections)
|
||||||
|
A.zone.connections = list()
|
||||||
|
A.zone.connections |= src
|
||||||
|
if(!B.zone.connections)
|
||||||
|
B.zone.connections = list()
|
||||||
|
B.zone.connections |= src
|
||||||
|
|
||||||
|
if(!A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones = list()
|
||||||
|
if(B.zone in A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones[B.zone]++
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones += B.zone
|
||||||
|
A.zone.closed_connection_zones[B.zone] = 1
|
||||||
|
|
||||||
|
if(!B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones = list()
|
||||||
|
if(A.zone in B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones[A.zone]++
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones += A.zone
|
||||||
|
B.zone.closed_connection_zones[A.zone] = 1
|
||||||
|
|
||||||
zone_B = B.zone
|
zone_B = B.zone
|
||||||
|
|
||||||
zone_A = A.zone
|
zone_A = A.zone
|
||||||
@@ -340,6 +516,23 @@ connection
|
|||||||
else
|
else
|
||||||
A.zone.connected_zones[zone_B]++
|
A.zone.connected_zones[zone_B]++
|
||||||
|
|
||||||
|
else
|
||||||
|
if(zone_A.closed_connection_zones)
|
||||||
|
if(zone_A.closed_connection_zones[zone_B] > 1)
|
||||||
|
zone_A.closed_connection_zones[zone_B]--
|
||||||
|
else
|
||||||
|
zone_A.closed_connection_zones.Remove(zone_B)
|
||||||
|
if(zone_A.closed_connection_zones && !zone_A.closed_connection_zones.len)
|
||||||
|
zone_A.closed_connection_zones = null
|
||||||
|
|
||||||
|
if(!A.zone.closed_connection_zones)
|
||||||
|
A.zone.closed_connection_zones = list()
|
||||||
|
if(!(zone_B in A.zone.closed_connection_zones))
|
||||||
|
A.zone.closed_connection_zones += zone_B
|
||||||
|
A.zone.closed_connection_zones[zone_B] = 1
|
||||||
|
else
|
||||||
|
A.zone.closed_connection_zones[zone_B]++
|
||||||
|
|
||||||
zone_A = A.zone
|
zone_A = A.zone
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -373,6 +566,23 @@ connection
|
|||||||
else
|
else
|
||||||
B.zone.connected_zones[zone_A]++
|
B.zone.connected_zones[zone_A]++
|
||||||
|
|
||||||
|
else
|
||||||
|
if(zone_B.closed_connection_zones)
|
||||||
|
if(zone_B.closed_connection_zones[zone_A] > 1)
|
||||||
|
zone_B.closed_connection_zones[zone_A]--
|
||||||
|
else
|
||||||
|
zone_B.closed_connection_zones.Remove(zone_A)
|
||||||
|
if(zone_B.closed_connection_zones && !zone_B.closed_connection_zones.len)
|
||||||
|
zone_B.closed_connection_zones = null
|
||||||
|
|
||||||
|
if(!B.zone.closed_connection_zones)
|
||||||
|
B.zone.closed_connection_zones = list()
|
||||||
|
if(!(zone_A in B.zone.closed_connection_zones))
|
||||||
|
B.zone.closed_connection_zones += zone_A
|
||||||
|
B.zone.closed_connection_zones[zone_A] = 1
|
||||||
|
else
|
||||||
|
B.zone.closed_connection_zones[zone_A]++
|
||||||
|
|
||||||
zone_B = B.zone
|
zone_B = B.zone
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -126,8 +126,6 @@ proc/ZConnect(turf/simulated/A,turf/simulated/B)
|
|||||||
if(!A.zone || !B.zone) return
|
if(!A.zone || !B.zone) return
|
||||||
if(A.zone == B.zone) return
|
if(A.zone == B.zone) return
|
||||||
|
|
||||||
if(!A.CanPass(null,B,0,0)) return
|
|
||||||
|
|
||||||
if(A.CanPass(null,B,0,1))
|
if(A.CanPass(null,B,0,1))
|
||||||
return ZMerge(A.zone,B.zone)
|
return ZMerge(A.zone,B.zone)
|
||||||
|
|
||||||
|
|||||||
@@ -181,38 +181,9 @@ turf
|
|||||||
// var/list/zone/adjacent_zones = list()
|
// var/list/zone/adjacent_zones = list()
|
||||||
|
|
||||||
if(air_check_directions&direction) //I can connect air in this direction
|
if(air_check_directions&direction) //I can connect air in this direction
|
||||||
if(!CanPass(null, T, 0, 0)) //If either block air, we must look to see if the adjacent turfs need rebuilt.
|
if(!CanPass(null, T, 0, 0)) //If either block air from a door
|
||||||
if(!T.CanPass(null, T, 0, 0)) //Target blocks air
|
if(!CanPass(null, src, 0, 0)) //I block air, so I have a door. Forge a closed connection through me.
|
||||||
var/turf/NT = get_step(T, direction)
|
ZConnect(src, T)
|
||||||
if(istype(NT,/turf/simulated) && NT in zone.contents)
|
|
||||||
air_master.AddToConsiderRebuild(src,NT)
|
|
||||||
else if(istype(NT) && NT in zone.unsimulated_tiles)
|
|
||||||
var/consider_rebuild = 0
|
|
||||||
for(var/d in cardinal)
|
|
||||||
var/turf/UT = get_step(NT,d)
|
|
||||||
if(istype(UT, /turf/simulated) && UT.zone == zone && UT.CanPass(null, NT, 0, 0)) //If we find a neighboring tile that is in the same zone, check if we need to rebuild
|
|
||||||
consider_rebuild = 1
|
|
||||||
break
|
|
||||||
if(consider_rebuild)
|
|
||||||
air_master.AddToConsiderRebuild(src,NT) //Gotta check if we need to rebuild, dammit
|
|
||||||
else
|
|
||||||
zone.RemoveTurf(NT) //Not adjacent to anything, and unsimulated. Goodbye~
|
|
||||||
|
|
||||||
if(T.zone && !T.zone.rebuild) //I block air.
|
|
||||||
var/turf/NT = get_step(src, reverse_direction(direction))
|
|
||||||
if(istype(NT,/turf/simulated) && (NT in T.zone.contents || (NT.zone && T in NT.zone.contents)))
|
|
||||||
air_master.AddToConsiderRebuild(T,NT)
|
|
||||||
else if(istype(NT) && NT in T.zone.unsimulated_tiles)
|
|
||||||
var/consider_rebuild = 0
|
|
||||||
for(var/d in cardinal)
|
|
||||||
var/turf/UT = get_step(NT,d)
|
|
||||||
if(istype(UT, /turf/simulated) && UT.zone == T.zone && UT.CanPass(null, NT, 0, 0)) //If we find a neighboring tile that is in the same zone, check if we need to rebuild
|
|
||||||
consider_rebuild = 1
|
|
||||||
break
|
|
||||||
if(consider_rebuild)
|
|
||||||
air_master.AddToConsiderRebuild(T,NT) //Gotta check if we need to rebuild, dammit
|
|
||||||
else
|
|
||||||
T.zone.RemoveTurf(NT) //Not adjacent to anything, and unsimulated. Goodbye~
|
|
||||||
|
|
||||||
else
|
else
|
||||||
ZConnect(src,T)
|
ZConnect(src,T)
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ zone
|
|||||||
list/connections // /connection objects which refer to connections with other zones, e.g. through a door.
|
list/connections // /connection objects which refer to connections with other zones, e.g. through a door.
|
||||||
list/connected_zones //Parallels connections, but lists zones to which this one is connected and the number
|
list/connected_zones //Parallels connections, but lists zones to which this one is connected and the number
|
||||||
//of points they're connected at.
|
//of points they're connected at.
|
||||||
|
list/closed_connection_zones //Same as connected_zones, but for zones where the door or whatever is closed.
|
||||||
list/unsimulated_tiles // Any space tiles in this list will cause air to flow out.
|
list/unsimulated_tiles // Any space tiles in this list will cause air to flow out.
|
||||||
last_update = 0
|
last_update = 0
|
||||||
progress = "nothing"
|
progress = "nothing"
|
||||||
@@ -244,7 +245,9 @@ zone/proc/process()
|
|||||||
//Do merging if conditions are met. Specifically, if there's a non-door connection
|
//Do merging if conditions are met. Specifically, if there's a non-door connection
|
||||||
//to somewhere with space, the zones are merged regardless of equilibrium, to speed
|
//to somewhere with space, the zones are merged regardless of equilibrium, to speed
|
||||||
//up spacing in areas with double-plated windows.
|
//up spacing in areas with double-plated windows.
|
||||||
if(C && C.indirect == 2 && C.A.zone && C.B.zone) //indirect = 2 is a direct connection.
|
if(C && C.A.zone && C.B.zone)
|
||||||
|
//indirect = 2 is a direct connection.
|
||||||
|
if(C.indirect == 2 )
|
||||||
if(C.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles)
|
if(C.A.zone.air.compare(C.B.zone.air) || unsimulated_tiles)
|
||||||
ZMerge(C.A.zone,C.B.zone)
|
ZMerge(C.A.zone,C.B.zone)
|
||||||
|
|
||||||
@@ -269,6 +272,11 @@ zone/proc/process()
|
|||||||
Airflow(src,Z)
|
Airflow(src,Z)
|
||||||
ShareRatio( air , Z.air , connected_zones[Z] )
|
ShareRatio( air , Z.air , connected_zones[Z] )
|
||||||
|
|
||||||
|
for(var/zone/Z in closed_connection_zones)
|
||||||
|
if(air && Z.air)
|
||||||
|
if( abs(air.temperature - Z.air.temperature) > 50 )
|
||||||
|
ShareHeat(air, Z.air, closed_connection_zones[Z])
|
||||||
|
|
||||||
progress = "all components completed successfully, the problem is not here"
|
progress = "all components completed successfully, the problem is not here"
|
||||||
|
|
||||||
////////////////
|
////////////////
|
||||||
@@ -407,6 +415,29 @@ proc/ShareSpace(datum/gas_mixture/A, list/unsimulated_tiles)
|
|||||||
|
|
||||||
return abs(old_pressure - A.return_pressure())
|
return abs(old_pressure - A.return_pressure())
|
||||||
|
|
||||||
|
|
||||||
|
proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles)
|
||||||
|
//Shares a specific ratio of gas between mixtures using simple weighted averages.
|
||||||
|
var
|
||||||
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
ratio = 0.33
|
||||||
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
|
||||||
|
full_heat_capacity = A.heat_capacity()
|
||||||
|
|
||||||
|
s_full_heat_capacity = B.heat_capacity()
|
||||||
|
|
||||||
|
temp_avg = (A.temperature * full_heat_capacity + B.temperature * s_full_heat_capacity) / (full_heat_capacity + s_full_heat_capacity)
|
||||||
|
|
||||||
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
if(sharing_lookup_table.len >= connecting_tiles) //6 or more interconnecting tiles will max at 42% of air moved per tick.
|
||||||
|
ratio = sharing_lookup_table[connecting_tiles]
|
||||||
|
//WOOT WOOT TOUCH THIS AND YOU ARE A RETARD
|
||||||
|
|
||||||
|
A.temperature = max(0, (A.temperature - temp_avg) * (1- (ratio / max(1,A.group_multiplier)) ) + temp_avg )
|
||||||
|
B.temperature = max(0, (B.temperature - temp_avg) * (1- (ratio / max(1,B.group_multiplier)) ) + temp_avg )
|
||||||
|
|
||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
//Zone Rebuilding//
|
//Zone Rebuilding//
|
||||||
///////////////////
|
///////////////////
|
||||||
@@ -487,6 +518,7 @@ zone/proc/Rebuild()
|
|||||||
if(istype(T) && T.zone && S.CanPass(null, T, 0, 0))
|
if(istype(T) && T.zone && S.CanPass(null, T, 0, 0))
|
||||||
T.zone.AddTurf(S)
|
T.zone.AddTurf(S)
|
||||||
|
|
||||||
|
|
||||||
proc/play_wind_sound(var/turf/random_border, var/n)
|
proc/play_wind_sound(var/turf/random_border, var/n)
|
||||||
if(random_border)
|
if(random_border)
|
||||||
var/windsound = 'sound/effects/wind/wind_2_1.ogg'
|
var/windsound = 'sound/effects/wind/wind_2_1.ogg'
|
||||||
|
|||||||
Reference in New Issue
Block a user