mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-09 07:54:14 +00:00
* Update beefman.dm * Update beefman.dm * xsaxsfvvvvvvvv * Update shaded_bloodsucker.dm * poo * Update tgstation.dme * Create screenshot_humanoids__datum_species_beefman.png * update paths * more update paths * basic mob chicks and random tiles * p * request consoles updatepath script * Update README.md * Create screenshot_antag_icons_vampiricaccident.png * Create screenshot_humanoids__datum_species_human_felinid_nobraindamage.png * Update SeleneStation.dmm * Update PubbyStation.dmm * Update PubbyStation.dmm * Update PubbyStation.dmm * Update PubbyStation.dmm * FUCK this map
56 lines
2.7 KiB
Plaintext
56 lines
2.7 KiB
Plaintext
/// each cell in a spatial_grid is this many turfs in length and width (with world.max(x or y) being 255, 15 of these fit on each side of a z level)
|
|
#define SPATIAL_GRID_CELLSIZE 17
|
|
/// Takes a coordinate, and spits out the spatial grid index (x or y) it's inside
|
|
#define GET_SPATIAL_INDEX(coord) ROUND_UP((coord) / SPATIAL_GRID_CELLSIZE)
|
|
/// changes the cell_(x or y) vars on /datum/spatial_grid_cell to the x or y coordinate on the map for the LOWER LEFT CORNER of the grid cell.
|
|
/// index is from 1 to SPATIAL_GRID_CELLS_PER_SIDE
|
|
#define GRID_INDEX_TO_COORDS(index) ((((index) - 1) * SPATIAL_GRID_CELLSIZE) + 1)
|
|
/// number of grid cells per x or y side of all z levels. pass in world.maxx or world.maxy
|
|
#define SPATIAL_GRID_CELLS_PER_SIDE(world_bounds) GET_SPATIAL_INDEX(world_bounds)
|
|
|
|
//grid contents channels
|
|
|
|
///everything that is hearing sensitive is stored in this channel
|
|
#define SPATIAL_GRID_CONTENTS_TYPE_HEARING RECURSIVE_CONTENTS_HEARING_SENSITIVE
|
|
///every movable that has a client in it is stored in this channel
|
|
#define SPATIAL_GRID_CONTENTS_TYPE_CLIENTS RECURSIVE_CONTENTS_CLIENT_MOBS
|
|
///all atmos machines are stored in this channel (I'm sorry kyler)
|
|
#define SPATIAL_GRID_CONTENTS_TYPE_ATMOS "spatial_grid_contents_type_atmos"
|
|
|
|
#define ALL_CONTENTS_OF_CELL(cell) (cell.hearing_contents | cell.client_contents | cell.atmos_contents)
|
|
|
|
///whether movable is itself or containing something which should be in one of the spatial grid channels.
|
|
#define HAS_SPATIAL_GRID_CONTENTS(movable) (movable.spatial_grid_key)
|
|
|
|
// macros meant specifically to add/remove movables from the internal lists of /datum/spatial_grid_cell,
|
|
// when empty they become references to a single list in SSspatial_grid and when filled they become their own list
|
|
// this is to save memory without making them lazylists as that slows down iteration through them
|
|
#define GRID_CELL_ADD(cell_contents_list, movable_or_list) \
|
|
if(!length(cell_contents_list)) { \
|
|
cell_contents_list = list(); \
|
|
cell_contents_list += movable_or_list; \
|
|
} else { \
|
|
cell_contents_list += movable_or_list; \
|
|
};
|
|
|
|
#define GRID_CELL_SET(cell_contents_list, movable_or_list) \
|
|
if(!length(cell_contents_list)) { \
|
|
cell_contents_list = list(); \
|
|
cell_contents_list += movable_or_list; \
|
|
} else { \
|
|
cell_contents_list |= movable_or_list; \
|
|
};
|
|
|
|
//dont use these outside of SSspatial_grid's scope use the procs it has for this purpose
|
|
#define GRID_CELL_REMOVE(cell_contents_list, movable_or_list) \
|
|
cell_contents_list -= movable_or_list; \
|
|
if(!length(cell_contents_list)) {\
|
|
cell_contents_list = dummy_list; \
|
|
};
|
|
|
|
///remove from every list
|
|
#define GRID_CELL_REMOVE_ALL(cell, movable) \
|
|
GRID_CELL_REMOVE(cell.hearing_contents, movable) \
|
|
GRID_CELL_REMOVE(cell.client_contents, movable) \
|
|
GRID_CELL_REMOVE(cell.atmos_contents, movable)
|