[MIRROR] Transit space refactor (#7130)
* Transit space refactor * Update bitfields.dm
This commit is contained in:
committed by
kevinz000
parent
389e9584a3
commit
03a22ca16d
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user