[MIRROR] Transit space refactor (#7130)

* Transit space refactor

* Update bitfields.dm
This commit is contained in:
CitadelStationBot
2018-06-18 13:51:02 -05:00
committed by kevinz000
parent 389e9584a3
commit 03a22ca16d
19 changed files with 241 additions and 163 deletions
+6 -4
View File
@@ -961,15 +961,17 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
/client/proc/clear_dynamic_transit()
set category = "Debug"
set name = "Clear Dynamic Transit"
set desc = "Deallocates all transit space, restoring it to round start conditions."
set name = "Clear Dynamic Turf Reservations"
set desc = "Deallocates all reserved space, restoring it to round start conditions."
if(!holder)
return
SSshuttle.clear_transit = TRUE
var/answer = alert("WARNING: THIS WILL WIPE ALL RESERVED SPACE TO A CLEAN SLATE! ANY MOVING SHUTTLES, ELEVATORS, OR IN-PROGRESS PHOTOGRAPHY WILL BE DELETED!", "Really wipe dynamic turfs?", "YES", "NO")
if(answer != "YES")
return
message_admins("<span class='adminnotice'>[key_name_admin(src)] cleared dynamic transit space.</span>")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Clear Dynamic Transit") // If...
log_admin("[key_name(src)] cleared dynamic transit space.")
SSmapping.wipe_reservations() //this goes after it's logged, incase something horrible happens.
/client/proc/toggle_medal_disable()
set category = "Debug"
+2 -1
View File
@@ -258,7 +258,8 @@
/datum/team/nuclear/proc/syndies_escaped()
var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate")
return S && (is_centcom_level(S.z) || is_transit_level(S.z))
var/obj/docking_port/stationary/transit/T = locate() in S.loc
return S && (is_centcom_level(S.z) || T)
/datum/team/nuclear/proc/get_result()
var/evacuation = SSshuttle.emergency.mode == SHUTTLE_ENDGAME
+1 -1
View File
@@ -209,7 +209,7 @@
/obj/docking_port/mobile/pirate/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE)
. = ..()
if(. == DOCKING_SUCCESS && !is_transit_level(new_dock.z))
if(. == DOCKING_SUCCESS && !is_reserved_level(new_dock.z))
engines_cooling = TRUE
addtimer(CALLBACK(src,.proc/reset_cooldown),engine_cooldown,TIMER_UNIQUE)
@@ -0,0 +1,70 @@
//Yes, they can only be rectangular.
//Yes, I'm sorry.
/datum/turf_reservation
var/list/reserved_turfs = list()
var/bottom_left_coords[3]
var/top_right_coords[3]
var/wipe_reservation_on_release = TRUE
var/turf_type = /turf/open/space
/datum/turf_reservation/transit
turf_type = /turf/open/space/transit
/datum/turf_reservation/proc/Release()
var/v = reserved_turfs.Copy()
for(var/i in reserved_turfs)
reserved_turfs -= i
SSmapping.used_turfs -= i
SSmapping.reserve_turfs(v)
/datum/turf_reservation/proc/Reserve(width, height, zlevel)
if(width > world.maxx || height > world.maxy)
return FALSE
var/list/avail = SSmapping.unused_turfs["[zlevel]"]
var/turf/BL
var/turf/TR
var/list/turf/final = list()
var/passing = FALSE
for(var/i in avail)
CHECK_TICK
BL = i
if(!(BL.flags_1 & UNUSED_RESERVATION_TURF_1))
continue
if(BL.x + width > world.maxx || BL.y + height > world.maxy)
continue
TR = locate(BL.x + width, BL.y + height, BL.z)
if(!(TR.flags_1 & UNUSED_RESERVATION_TURF_1))
continue
final = block(BL, TR)
if(!final)
continue
passing = TRUE
for(var/I in final)
var/turf/checking = I
if(!(checking.flags_1 & UNUSED_RESERVATION_TURF_1))
passing = FALSE
break
if(!passing)
continue
break
if(!passing || !istype(BL) || !istype(TR))
return FALSE
bottom_left_coords = list(BL.x, BL.y, BL.z)
top_right_coords = list(TR.x, TR.y, TR.z)
for(var/i in final)
var/turf/T = i
reserved_turfs |= T
T.flags_1 &= ~UNUSED_RESERVATION_TURF_1
SSmapping.unused_turfs["[T.z]"] -= T
SSmapping.used_turfs[T] = src
T.ChangeTurf(turf_type, turf_type)
return TRUE
/datum/turf_reservation/New()
LAZYADD(SSmapping.turf_reservations, src)
/datum/turf_reservation/Destroy()
Release()
LAZYREMOVE(SSmapping.turf_reservations, src)
return ..()
@@ -20,7 +20,7 @@
/obj/item/wormhole_jaunter/proc/turf_check(mob/user)
var/turf/device_turf = get_turf(user)
if(!device_turf || is_centcom_level(device_turf.z) || is_transit_level(device_turf.z))
if(!device_turf || is_centcom_level(device_turf.z) || is_reserved_level(device_turf.z))
to_chat(user, "<span class='notice'>You're having difficulties getting the [src.name] to work.</span>")
return FALSE
return TRUE
@@ -595,7 +595,7 @@
to_chat(user, "<span class='notice'>You unfold the ladder. It extends much farther than you were expecting.</span>")
var/last_ladder = null
for(var/i in 1 to world.maxz)
if(is_centcom_level(i) || is_transit_level(i) || is_reebe(i) || is_away_level(i))
if(is_centcom_level(i) || is_reserved_level(i) || is_reebe(i) || is_away_level(i))
continue
var/turf/T2 = locate(ladder_x, ladder_y, i)
last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder)
+3 -3
View File
@@ -16,7 +16,7 @@
// The area that gets placed under where the shuttle moved from
var/underlying_area_type = SHUTTLE_DEFAULT_UNDERLYING_AREA
if(old_dock) //Dock overwrites
underlying_area_type = old_dock.area_type
@@ -105,7 +105,7 @@
list/areas_to_move,
rotation,
)
for(var/i in 1 to old_turfs.len)
CHECK_TICK
var/turf/oldT = old_turfs[i]
@@ -173,7 +173,7 @@
movement_direction,
area/underlying_old_area,
)
underlying_old_area.afterShuttleMove()
// Parallax handling
+8 -17
View File
@@ -202,7 +202,7 @@
/obj/docking_port/stationary/transit
name = "In Transit"
var/list/turf/assigned_turfs = list()
var/datum/turf_reservation/reserved_area
var/area/shuttle/transit/assigned_area
var/obj/docking_port/mobile/owner
@@ -210,14 +210,6 @@
. = ..()
SSshuttle.transit += src
/obj/docking_port/stationary/transit/proc/dezone()
for(var/i in 1 to assigned_turfs.len)
var/turf/T = assigned_turfs[i]
if(istype(T, /turf/open/space/transit))
T.ChangeTurf(/turf/open/space)
T.assemble_baseturfs(initial(T.baseturfs))
T.flags_1 |= UNUSED_TRANSIT_TURF_1
/obj/docking_port/stationary/transit/Destroy(force=FALSE)
if(force)
if(get_docked())
@@ -227,11 +219,10 @@
if(owner.assigned_transit == src)
owner.assigned_transit = null
owner = null
if(assigned_turfs)
dezone()
assigned_turfs.Cut()
assigned_turfs = null
. = ..()
if(!QDELETED(reserved_area))
qdel(reserved_area)
reserved_area = null
return ..()
/obj/docking_port/mobile
name = "shuttle"
@@ -282,7 +273,7 @@
SSshuttle.mobile -= src
destination = null
previous = null
assigned_transit = null
QDEL_NULL(assigned_transit) //don't need it where we're goin'!
shuttle_areas = null
remove_ripples()
. = ..()
@@ -433,7 +424,7 @@
underlying_area_type = current_dock.area_type
var/list/old_turfs = return_ordered_turfs(x, y, z, dir)
var/area/underlying_area
for(var/i in GLOB.sortedAreas)
var/area/place = i
@@ -451,7 +442,7 @@
underlying_area.contents += oldT
oldT.change_area(old_area, underlying_area)
oldT.empty(FALSE)
// Here we locate the bottomost shuttle boundary and remove all turfs above it
var/list/baseturf_cache = oldT.baseturfs
for(var/k in 1 to length(baseturf_cache))