Space transitions now automatically set up as turfs change

This commit is contained in:
Crazylemon64
2016-08-06 18:56:58 -07:00
parent bd0028aff1
commit f307ad7d30
3 changed files with 55 additions and 22 deletions
+11 -1
View File
@@ -23,6 +23,16 @@
/turf/space/Destroy()
return QDEL_HINT_LETMELIVE
/turf/space/PreChange()
..()
var/datum/space_level/S = space_manager.get_zlev(z)
S.remove_from_transit(src)
/turf/space/AfterChange(ignore_air, keep_cabling = FALSE)
..()
var/datum/space_level/S = space_manager.get_zlev(z)
S.add_to_transit(src)
/turf/space/proc/update_starlight()
if(!config.starlight)
return
@@ -69,7 +79,7 @@
/turf/space/Entered(atom/movable/A as mob|obj, atom/OL, ignoreRest = 0)
..()
if(destination_z && A && (src in A.locs))
A.x = destination_x
A.y = destination_y
+5 -1
View File
@@ -165,6 +165,7 @@
var/old_blueprint_data = blueprint_data
var/old_obscured = obscured
PreChange()
if(air_master)
air_master.remove_from_active(src)
var/turf/W = new path(src)
@@ -186,11 +187,14 @@
lighting_build_overlays()
else
lighting_clear_overlays()
obscured = old_obscured
return W
/turf/proc/PreChange()
return
// I'm including `ignore_air` because BYOND lacks positional-only arguments
/turf/proc/AfterChange(ignore_air, keep_cabling = FALSE) //called after a turf has been replaced in ChangeTurf()
levelupdate()
+39 -20
View File
@@ -28,28 +28,47 @@
var/timer = start_watch()
log_debug("Starting to build space destination arrays for z level '[zpos]'...")
for(var/turf/space/S in get_turfs())
// Bottom border
if(S.y <= TRANSITIONEDGE)
transit_south |= S
continue
// Top border
if(S.y >= (world.maxy - TRANSITIONEDGE - 1))
transit_north |= S
continue
// Left border
if(S.x <= TRANSITIONEDGE)
transit_west |= S
continue
// Right border
if(S.x >= (world.maxx - TRANSITIONEDGE - 1))
transit_east |= S
continue
add_to_transit(S)
log_debug("Building space destination arrays complete, took [stop_watch(timer)]s.")
/datum/space_level/proc/add_to_transit(turf/space/S)
if(S.y <= TRANSITIONEDGE)
transit_south |= S
return
// Top border
if(S.y >= (world.maxy - TRANSITIONEDGE - 1))
transit_north |= S
return
// Left border
if(S.x <= TRANSITIONEDGE)
transit_west |= S
return
// Right border
if(S.x >= (world.maxx - TRANSITIONEDGE - 1))
transit_east |= S
/datum/space_level/proc/remove_from_transit(turf/space/S)
if(S.y <= TRANSITIONEDGE)
transit_south -= S
return
// Top border
if(S.y >= (world.maxy - TRANSITIONEDGE - 1))
transit_north -= S
return
// Left border
if(S.x <= TRANSITIONEDGE)
transit_west -= S
return
// Right border
if(S.x >= (world.maxx - TRANSITIONEDGE - 1))
transit_east -= S
/datum/space_level/proc/get_turfs()
return block(locate(1, 1, zpos), locate(world.maxx, world.maxy, zpos))