mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
39 lines
1.7 KiB
Plaintext
39 lines
1.7 KiB
Plaintext
/proc/get_station_areas(var/list/area/excluded_areas)
|
|
var/list/area/grand_list_of_areas = list()
|
|
// Assemble areas that all exists (See DM reference if you are confused about loop labels)
|
|
looping_station_areas:
|
|
for(var/parentpath in global.the_station_areas)
|
|
// Check its not excluded
|
|
for(var/excluded_path in excluded_areas)
|
|
if(ispath(parentpath, excluded_path))
|
|
continue looping_station_areas
|
|
// Otherwise add it and all subtypes that exist on the map to our grand list
|
|
for(var/areapath in typesof(parentpath))
|
|
var/area/A = locate(areapath) // Check if it actually exists
|
|
if(istype(A) && A.z in using_map.player_levels)
|
|
grand_list_of_areas += A
|
|
return grand_list_of_areas
|
|
|
|
/** Checks if any living humans are in a given area! */
|
|
/proc/is_area_occupied(var/area/myarea)
|
|
// Testing suggests looping over human_mob_list is quicker than looping over area contents
|
|
for(var/mob/living/carbon/human/H in human_mob_list)
|
|
if(H.stat >= DEAD) //Conditions for exclusion here, like if disconnected people start blocking it.
|
|
continue
|
|
var/area/A = get_area(H)
|
|
if(A == myarea) //The loc of a turf is the area it is in.
|
|
return 1
|
|
return 0
|
|
|
|
// Returns a list of area instances, or a subtypes of them, that are mapped in somewhere.
|
|
// Avoid feeding it `/area`, as it will likely cause a lot of lag as it evaluates every single area coded in.
|
|
/proc/get_all_existing_areas_of_types(list/area_types)
|
|
. = list()
|
|
for(var/area_type in area_types)
|
|
var/list/types = typesof(area_type)
|
|
for(var/T in types)
|
|
// Test for existance.
|
|
var/area/A = locate(T)
|
|
if(!istype(A) || !A.contents.len) // Empty contents list means it's not on the map.
|
|
continue
|
|
. += A |