mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 02:34:00 +00:00
Merge branch 'dev' of https://github.com/Baystation12/Baystation12 into 11/6/2015_neerti_breaks_everything_bay_merge
Conflicts: .travis.yml code/_helpers/lists.dm code/game/objects/structures/crates_lockers/closets/secure/engineering.dm code/global.dm code/modules/client/preferences.dm code/modules/client/preferences_savefile.dm code/modules/reagents/dispenser/dispenser2.dm polaris.dme
This commit is contained in:
21
code/_helpers/areas.dm
Normal file
21
code/_helpers/areas.dm
Normal file
@@ -0,0 +1,21 @@
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all turfs in areas of that type in the world.
|
||||
/proc/get_area_turfs(var/areatype, var/list/predicates)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
var/area/areatemp = areatype
|
||||
areatype = areatemp.type
|
||||
|
||||
var/list/turfs = new/list()
|
||||
for(var/areapath in typesof(areatype))
|
||||
var/area/A = locate(areapath)
|
||||
for(var/turf/T in A.contents)
|
||||
if(!predicates || all_predicates_true(T, predicates))
|
||||
turfs += T
|
||||
return turfs
|
||||
|
||||
/proc/pick_area_turf(var/areatype, var/list/predicates)
|
||||
var/list/turfs = get_area_turfs(areatype, predicates)
|
||||
if(turfs && turfs.len)
|
||||
return pick(turfs)
|
||||
14
code/_helpers/functional.dm
Normal file
14
code/_helpers/functional.dm
Normal file
@@ -0,0 +1,14 @@
|
||||
/proc/all_predicates_true(var/input, var/list/predicates)
|
||||
for(var/i = 1 to predicates.len)
|
||||
if(!call(predicates[i])(input))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/proc/any_predicate_true(var/input, var/list/predicates)
|
||||
if(!predicates.len)
|
||||
return TRUE
|
||||
|
||||
for(var/i = 1 to predicates.len)
|
||||
if(call(predicates[i])(input))
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -71,6 +71,12 @@ proc/isemptylist(list/list)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/proc/instances_of_type_in_list(var/atom/A, var/list/L)
|
||||
var/instances = 0
|
||||
for(var/type in L)
|
||||
if(istype(A, type))
|
||||
instances++
|
||||
return instances
|
||||
//Checks for specific paths in a list
|
||||
/proc/is_path_in_list(var/atom/A, var/list/L)
|
||||
for(var/path in L)
|
||||
@@ -78,11 +84,11 @@ proc/isemptylist(list/list)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
//Empties the list by setting the length to 0. Hopefully the elements get garbage collected
|
||||
proc/clearlist(list/list)
|
||||
if(istype(list))
|
||||
list.len = 0
|
||||
return
|
||||
|
||||
//Empties the list by .Cut(). Setting lenght = 0 has been confirmed to leak references.
|
||||
proc/clearlist(var/list/L)
|
||||
if(islist(L))
|
||||
L.Cut()
|
||||
|
||||
//Removes any null entries from the list
|
||||
proc/listclearnulls(list/list)
|
||||
|
||||
@@ -32,3 +32,12 @@
|
||||
if(!available_turfs.len)
|
||||
available_turfs = start_turfs
|
||||
return pick(available_turfs)
|
||||
|
||||
/proc/turf_contains_dense_objects(var/turf/T)
|
||||
return T.contains_dense_objects()
|
||||
|
||||
/proc/not_turf_contains_dense_objects(var/turf/T)
|
||||
return !turf_contains_dense_objects(T)
|
||||
|
||||
/proc/is_station_turf(var/turf/T)
|
||||
return T && isStationLevel(T.z)
|
||||
|
||||
@@ -229,14 +229,14 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
#define LOCATE_COORDS(X, Y, Z) locate(between(1, X, world.maxx), between(1, Y, world.maxy), Z)
|
||||
/proc/getcircle(turf/center, var/radius) //Uses a fast Bresenham rasterization algorithm to return the turfs in a thin circle.
|
||||
if(!radius) return list(center)
|
||||
|
||||
|
||||
var/x = 0
|
||||
var/y = radius
|
||||
var/p = 3 - 2 * radius
|
||||
|
||||
|
||||
. = list()
|
||||
while(y >= x) // only formulate 1/8 of circle
|
||||
|
||||
|
||||
. += LOCATE_COORDS(center.x - x, center.y - y, center.z) //upper left left
|
||||
. += LOCATE_COORDS(center.x - y, center.y - x, center.z) //upper upper left
|
||||
. += LOCATE_COORDS(center.x + y, center.y - x, center.z) //upper upper right
|
||||
@@ -247,7 +247,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
. += LOCATE_COORDS(center.x + x, center.y + y, center.z) //lower right right
|
||||
|
||||
if(p < 0)
|
||||
p += 4*x++ + 6;
|
||||
p += 4*x++ + 6;
|
||||
else
|
||||
p += 4*(x++ - y--) + 10;
|
||||
|
||||
@@ -558,7 +558,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
var/y = min(world.maxy, max(1, A.y + dy))
|
||||
return locate(x,y,A.z)
|
||||
|
||||
//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value.
|
||||
//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value. Lower bound takes priority.
|
||||
/proc/between(var/low, var/middle, var/high)
|
||||
return max(min(middle, high), low)
|
||||
|
||||
@@ -718,21 +718,6 @@ proc/GaussRandRound(var/sigma,var/roundto)
|
||||
if(istype(N, areatype)) areas += N
|
||||
return areas
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all turfs in areas of that type of that type in the world.
|
||||
/proc/get_area_turfs(var/areatype)
|
||||
if(!areatype) return null
|
||||
if(istext(areatype)) areatype = text2path(areatype)
|
||||
if(isarea(areatype))
|
||||
var/area/areatemp = areatype
|
||||
areatype = areatemp.type
|
||||
|
||||
var/list/turfs = new/list()
|
||||
for(var/area/N in world)
|
||||
if(istype(N, areatype))
|
||||
for(var/turf/T in N) turfs += T
|
||||
return turfs
|
||||
|
||||
//Takes: Area type as text string or as typepath OR an instance of the area.
|
||||
//Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world.
|
||||
/proc/get_area_all_atoms(var/areatype)
|
||||
|
||||
Reference in New Issue
Block a user