mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
Experimental ZAS capability for heat to transfer through closed doors.
This commit is contained in:
@@ -17,7 +17,7 @@ connection
|
||||
zone_B
|
||||
ref_A
|
||||
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.
|
||||
no_zone_count = 0
|
||||
|
||||
@@ -47,24 +47,47 @@ connection
|
||||
else
|
||||
air_master.turfs_with_connections[ref_B] = list(src)
|
||||
|
||||
if(!A.zone.connected_zones)
|
||||
A.zone.connected_zones = list()
|
||||
if(!B.zone.connected_zones)
|
||||
B.zone.connected_zones = list()
|
||||
if(A.CanPass(null, B, 0, 0))
|
||||
|
||||
if(B.zone in A.zone.connected_zones)
|
||||
A.zone.connected_zones[B.zone]++
|
||||
else
|
||||
A.zone.connected_zones += B.zone
|
||||
A.zone.connected_zones[B.zone] = 1
|
||||
if(!A.zone.connected_zones)
|
||||
A.zone.connected_zones = list()
|
||||
if(!B.zone.connected_zones)
|
||||
B.zone.connected_zones = list()
|
||||
|
||||
if(B.zone in A.zone.connected_zones)
|
||||
A.zone.connected_zones[B.zone]++
|
||||
else
|
||||
A.zone.connected_zones += B.zone
|
||||
A.zone.connected_zones[B.zone] = 1
|
||||
|
||||
if(A.zone in B.zone.connected_zones)
|
||||
B.zone.connected_zones[A.zone]++
|
||||
else
|
||||
B.zone.connected_zones += A.zone
|
||||
B.zone.connected_zones[A.zone] = 1
|
||||
|
||||
if(A.zone in B.zone.connected_zones)
|
||||
B.zone.connected_zones[A.zone]++
|
||||
else
|
||||
B.zone.connected_zones += A.zone
|
||||
B.zone.connected_zones[A.zone] = 1
|
||||
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))
|
||||
indirect = 1
|
||||
indirect = CONNECTION_INDIRECT
|
||||
else
|
||||
world.log << "Attempted to create connection object for non-zone tiles: [T] -> [O]"
|
||||
del(src)
|
||||
@@ -168,6 +191,75 @@ connection
|
||||
zone_B.connected_zones -= zone_A
|
||||
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
||||
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()
|
||||
@@ -212,12 +304,32 @@ connection
|
||||
else
|
||||
B.zone.connected_zones += A.zone
|
||||
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)
|
||||
indirect = CONNECTION_DIRECT
|
||||
else if(!door_pass)
|
||||
indirect = CONNECTION_INDIRECT
|
||||
|
||||
else if(indirect > CONNECTION_CLOSED)
|
||||
indirect = CONNECTION_CLOSED
|
||||
|
||||
//ADJUST FOR CANNOT CONNECT
|
||||
if(A.zone.connected_zones)
|
||||
if(A.zone.connected_zones[B.zone] > 1)
|
||||
@@ -226,13 +338,33 @@ connection
|
||||
A.zone.connected_zones.Remove(B.zone)
|
||||
if(A.zone.connected_zones && !A.zone.connected_zones.len)
|
||||
A.zone.connected_zones = null
|
||||
|
||||
if(B.zone.connected_zones)
|
||||
if(B.zone.connected_zones[A.zone] > 1)
|
||||
B.zone.connected_zones[A.zone]--
|
||||
else
|
||||
B.zone.connected_zones.Remove(A.zone)
|
||||
|
||||
if(B.zone.connected_zones && !B.zone.connected_zones.len)
|
||||
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
|
||||
del src
|
||||
|
||||
@@ -268,6 +400,16 @@ connection
|
||||
if(zone_A.connected_zones && !zone_A.connected_zones.len)
|
||||
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.connections)
|
||||
zone_B.connections.Remove(src)
|
||||
@@ -283,6 +425,15 @@ connection
|
||||
if(zone_B.connected_zones && !zone_B.connected_zones.len)
|
||||
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(!A.zone.connections)
|
||||
A.zone.connections = list()
|
||||
@@ -307,6 +458,31 @@ connection
|
||||
B.zone.connected_zones += A.zone
|
||||
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_A = A.zone
|
||||
@@ -340,6 +516,23 @@ connection
|
||||
else
|
||||
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
|
||||
|
||||
else
|
||||
@@ -373,6 +566,23 @@ connection
|
||||
else
|
||||
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
|
||||
|
||||
else
|
||||
|
||||
Reference in New Issue
Block a user