mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-30 16:56:26 +01:00
70 lines
2.4 KiB
Plaintext
70 lines
2.4 KiB
Plaintext
SUBSYSTEM_DEF(bluespace_locker)
|
|
name = "Bluespace Locker"
|
|
flags = SS_NO_FIRE
|
|
var/obj/structure/closet/bluespace/internal/internal_locker = null
|
|
var/obj/structure/closet/bluespace/external/external_locker = null
|
|
|
|
/datum/controller/subsystem/bluespace_locker/Initialize()
|
|
bluespaceify_random_locker()
|
|
if(external_locker)
|
|
external_locker.take_contents()
|
|
return ..()
|
|
|
|
/datum/controller/subsystem/bluespace_locker/proc/bluespaceify_random_locker()
|
|
if(external_locker)
|
|
return
|
|
// basically any normal-looking locker that isn't a secure one
|
|
var/list/valid_lockers = typecacheof(typesof(/obj/structure/closet) - typesof(/obj/structure/closet/body_bag)\
|
|
- typesof(/obj/structure/closet/secure_closet) - typesof(/obj/structure/closet/cabinet)\
|
|
- typesof(/obj/structure/closet/cardboard) - typesof(/obj/structure/closet/crate)\
|
|
- typesof(/obj/structure/closet/supplypod) - typesof(/obj/structure/closet/stasis)\
|
|
- typesof(/obj/structure/closet/abductor) - typesof(/obj/structure/closet/bluespace), only_root_path = TRUE)
|
|
|
|
var/list/lockers_list = list()
|
|
for(var/obj/structure/closet/L in world)
|
|
if(is_station_level(L.z) && is_type_in_typecache(L, valid_lockers))
|
|
lockers_list += L
|
|
if(!lockers_list.len)
|
|
// Congratulations, you managed to destroy all the lockers somehow.
|
|
// Now let's make a new one.
|
|
var/targetturf = find_safe_turf()
|
|
if(!targetturf)
|
|
if(GLOB.blobstart.len > 0)
|
|
targetturf = get_turf(pick(GLOB.blobstart))
|
|
else
|
|
CRASH("Unable to find a blobstart landmark")
|
|
lockers_list += new /obj/structure/closet(targetturf)
|
|
var/obj/structure/closet/L = pick(lockers_list)
|
|
|
|
var/obj/structure/closet/bluespace/external/E = new(L.loc)
|
|
E.contents = L.contents
|
|
E.name = L.name
|
|
E.desc = L.desc
|
|
if(L.opened)
|
|
E.open()
|
|
E.icon = L.icon
|
|
E.icon_state = L.icon_state
|
|
E.icon_door = L.icon_door
|
|
E.icon_door_override = L.icon_door_override
|
|
E.icon_welded = L.icon_welded
|
|
qdel(L)
|
|
|
|
relink_lockers()
|
|
|
|
/datum/controller/subsystem/bluespace_locker/proc/relink_lockers()
|
|
if(!internal_locker)
|
|
return
|
|
//var/area/A = get_area(internal_locker)
|
|
//A.global_turf_object = external_locker
|
|
internal_locker.update_mirage()
|
|
if(!external_locker)
|
|
return
|
|
if(external_locker.opened)
|
|
internal_locker.close()
|
|
else
|
|
internal_locker.contents += external_locker.contents
|
|
internal_locker.open()
|
|
internal_locker.dump_contents()
|
|
internal_locker.update_icon()
|
|
external_locker.update_icon()
|