mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 02:54:41 +01:00
Space transitions now automatically set up as turfs change
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user