mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
[MIRROR] Fixes not being dumped in space after jumping off the shuttle [MDB IGNORE] (#19402)
* Fixes not being dumped in space after jumping off the shuttle * Update transit.dm --------- Co-authored-by: Time-Green <timkoster1@hotmail.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com>
This commit is contained in:
co-authored by
Time-Green
Gandalf
parent
c338382a18
commit
f9ce50bb89
@@ -1,17 +1,22 @@
|
||||
|
||||
//Yes, they can only be rectangular.
|
||||
//Yes, I'm sorry.
|
||||
/datum/turf_reservation
|
||||
var/list/reserved_turfs = list()
|
||||
///Turfs around the reservation for cordoning
|
||||
var/list/cordon_turfs = list()
|
||||
///Area of turfs next to the cordon to fill with pre_cordon_area's
|
||||
var/list/pre_cordon_turfs = list()
|
||||
var/width = 0
|
||||
var/height = 0
|
||||
var/bottom_left_coords[3]
|
||||
var/top_right_coords[3]
|
||||
var/turf_type = /turf/open/space
|
||||
///Distance away from the cordon where we can put a "sort-cordon" and run some extra code (see make_repel). 0 makes nothing happen
|
||||
var/pre_cordon_distance = 0
|
||||
|
||||
/datum/turf_reservation/transit
|
||||
turf_type = /turf/open/space/transit
|
||||
pre_cordon_distance = 7
|
||||
|
||||
/datum/turf_reservation/proc/Release()
|
||||
var/list/reserved_copy = reserved_turfs.Copy()
|
||||
@@ -40,6 +45,15 @@
|
||||
if(!(cordon_turf.flags_1 & UNUSED_RESERVATION_TURF))
|
||||
return FALSE
|
||||
cordon_turfs = possible_turfs
|
||||
|
||||
pre_cordon_turfs.Cut()
|
||||
|
||||
if(pre_cordon_distance)
|
||||
var/turf/offset_turf = locate(BL.x + pre_cordon_distance, BL.y + pre_cordon_distance, BL.z)
|
||||
var/list/to_add = CORNER_OUTLINE(offset_turf, width - pre_cordon_distance * 2, height - pre_cordon_distance * 2) //we step-by-stop move inwards from the outer cordon
|
||||
for(var/turf/turf_being_added as anything in to_add)
|
||||
pre_cordon_turfs |= turf_being_added //add one by one so we can filter out duplicates
|
||||
|
||||
return TRUE
|
||||
|
||||
/// Actually generates the cordon around the reservation, and marking the cordon turfs as reserved
|
||||
@@ -56,6 +70,42 @@
|
||||
SSmapping.unused_turfs["[cordon_turf.z]"] -= cordon_turf
|
||||
SSmapping.used_turfs[cordon_turf] = src
|
||||
|
||||
//swap the area with the pre-cordoning area
|
||||
for(var/turf/pre_cordon_turf as anything in pre_cordon_turfs)
|
||||
make_repel(pre_cordon_turf)
|
||||
|
||||
///Register signals in the cordon "danger zone" to do something with whoever trespasses
|
||||
/datum/turf_reservation/proc/make_repel(turf/pre_cordon_turf)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
//Okay so hear me out. If we place a special turf IN the reserved area, it will be overwritten, so we can't do that
|
||||
//But signals are preserved even between turf changes, so even if we register a signal now it will stay even if that turf is overriden by the template
|
||||
RegisterSignals(pre_cordon_turf, list(COMSIG_PARENT_QDELETING, COMSIG_TURF_RESERVATION_RELEASED), PROC_REF(on_stop_repel))
|
||||
|
||||
/datum/turf_reservation/proc/on_stop_repel(turf/pre_cordon_turf)
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
stop_repel(pre_cordon_turf)
|
||||
|
||||
///Unregister all the signals we added in RegisterRepelSignals
|
||||
/datum/turf_reservation/proc/stop_repel(turf/pre_cordon_turf)
|
||||
UnregisterSignal(pre_cordon_turf, list(COMSIG_PARENT_QDELETING, COMSIG_TURF_RESERVATION_RELEASED))
|
||||
|
||||
/datum/turf_reservation/transit/make_repel(turf/pre_cordon_turf)
|
||||
..()
|
||||
|
||||
RegisterSignal(pre_cordon_turf, COMSIG_ATOM_ENTERED, PROC_REF(space_dump))
|
||||
|
||||
/datum/turf_reservation/transit/stop_repel(turf/pre_cordon_turf)
|
||||
..()
|
||||
|
||||
UnregisterSignal(pre_cordon_turf, COMSIG_ATOM_ENTERED)
|
||||
|
||||
/datum/turf_reservation/transit/proc/space_dump(atom/source, atom/movable/enterer)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
dump_in_space(enterer)
|
||||
|
||||
/datum/turf_reservation/proc/Reserve(width, height, zlevel)
|
||||
src.width = width
|
||||
src.height = height
|
||||
|
||||
Reference in New Issue
Block a user