mirror of
https://github.com/Yawn-Wider/YWPolarisVore.git
synced 2026-07-13 17:16:11 +01:00
Add bapi-dmm to reduce startup time by... a lot (#16148)
* Add bapi-dmm, a rust maploader that goes BRRRRRRR * A few more maps switched away from file paths * Update to include 48f4879d8704cb057a (better path error handling)
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
// Internal bapi-dmm helpers
|
||||
/datum/bapi_parsed_map/proc/_bapi_add_warning(warning)
|
||||
loaded_warnings += list(warning)
|
||||
|
||||
/datum/bapi_parsed_map/proc/_bapi_expand_map(x, y, z, new_z, z_offset)
|
||||
if(x > world.maxx)
|
||||
expanded_x = TRUE
|
||||
world.maxx = x
|
||||
// if(new_z)
|
||||
// world.increase_max_x(x, map_load_z_cutoff = z_offset - 1)
|
||||
// else
|
||||
// world.increase_max_x(x)
|
||||
if(y > world.maxy)
|
||||
expanded_y = TRUE
|
||||
world.maxy = y
|
||||
// if(new_z)
|
||||
// world.increase_max_y(y, map_load_z_cutoff = z_offset - 1)
|
||||
// else
|
||||
// world.increase_max_y(y)
|
||||
if(z > world.maxz)
|
||||
while(world.maxz < z)
|
||||
world.increment_max_z()
|
||||
|
||||
/proc/_bapi_helper_get_world_bounds()
|
||||
. = list(world.maxx, world.maxy, world.maxz)
|
||||
|
||||
/proc/_bapi_helper_text2path(text)
|
||||
. = text2path(text)
|
||||
|
||||
/proc/_bapi_helper_text2file(text)
|
||||
. = file(text)
|
||||
|
||||
/proc/_bapi_create_atom(path, crds)
|
||||
set waitfor = FALSE
|
||||
. = new path (crds)
|
||||
|
||||
/proc/_bapi_setup_preloader(list/attributes, path)
|
||||
world.preloader_setup(attributes, path)
|
||||
|
||||
/proc/_bapi_apply_preloader(atom/A)
|
||||
if(GLOB.use_preloader)
|
||||
world.preloader_load(A)
|
||||
|
||||
/proc/_bapi_new_atom(text_path, turf/crds, list/attributes)
|
||||
var/path = text2path(text_path)
|
||||
if(!path)
|
||||
CRASH("Bad atom path [text_path]")
|
||||
|
||||
if(attributes != null)
|
||||
world.preloader_setup(attributes, path)
|
||||
|
||||
var/atom/instance = _bapi_create_atom(path, crds) // first preloader pass
|
||||
|
||||
if(GLOB.use_preloader && instance) // second preloader pass for atoms that don't ..() in New()
|
||||
world.preloader_load(instance)
|
||||
|
||||
/proc/_bapi_create_or_get_area(text_path)
|
||||
var/path = text2path(text_path)
|
||||
if(!path)
|
||||
CRASH("Bad area path [text_path]")
|
||||
|
||||
var/area/area_instance = GLOB.areas_by_type[path]
|
||||
if(!area_instance)
|
||||
area_instance = new path(null)
|
||||
if(!area_instance)
|
||||
CRASH("[path] failed to be new'd, what'd you do?")
|
||||
|
||||
return area_instance
|
||||
|
||||
/proc/_bapi_handle_area_contain(turf/T, area/A)
|
||||
// var/area/old_area = T.loc
|
||||
// if(old_area == A)
|
||||
// return // no changing areas that already contain this turf, it'll confuse them
|
||||
// LISTASSERTLEN(old_area.turfs_to_uncontain_by_zlevel, T.z, list())
|
||||
// LISTASSERTLEN(A.turfs_by_zlevel, T.z, list())
|
||||
// old_area.turfs_to_uncontain_by_zlevel[T.z] += T
|
||||
// A.turfs_by_zlevel[T.z] += T
|
||||
|
||||
/proc/_bapi_create_turf(turf/crds, text_path, list/attributes, place_on_top, no_changeturf)
|
||||
var/path = text2path(text_path)
|
||||
if(!path)
|
||||
CRASH("Bad turf path [text_path]")
|
||||
|
||||
if(attributes != null)
|
||||
world.preloader_setup(attributes, path)
|
||||
|
||||
var/atom/instance
|
||||
if(no_changeturf)
|
||||
instance = _bapi_create_atom(path, crds)
|
||||
else
|
||||
instance = crds.ChangeTurf(path, FALSE, TRUE)
|
||||
|
||||
if(GLOB.use_preloader && instance) // second preloader pass for atoms that don't ..() in New()
|
||||
world.preloader_load(instance)
|
||||
|
||||
/proc/_bapi_add_turf_to_area(area/A, turf/T)
|
||||
if(!A || !T)
|
||||
return
|
||||
A.contents.Add(T)
|
||||
|
||||
/proc/_bapi_helper_get_world_type_turf()
|
||||
return "[world.turf]"
|
||||
|
||||
/proc/_bapi_helper_get_world_type_area()
|
||||
return "[world.area]"
|
||||
|
||||
/// Implement this to have bapi-dmm sleep occasionally
|
||||
/// by returning true
|
||||
/proc/_bapi_helper_tick_check()
|
||||
return TICK_CHECK
|
||||
Reference in New Issue
Block a user