mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-25 21:19:00 +01:00
Wire up client mobs to the spatial grid (#31330)
* Add client mobs to the spatial grid * reviews * apparently having a mob is not guaranteed
This commit is contained in:
@@ -443,6 +443,20 @@
|
||||
if(old_turf?.z != new_turf?.z)
|
||||
on_changed_z_level(old_turf, new_turf)
|
||||
|
||||
if(HAS_SPATIAL_GRID_CONTENTS(src))
|
||||
if(old_turf && new_turf && (old_turf.z != new_turf.z \
|
||||
|| GET_SPATIAL_INDEX(old_turf.x) != GET_SPATIAL_INDEX(new_turf.x) \
|
||||
|| GET_SPATIAL_INDEX(old_turf.y) != GET_SPATIAL_INDEX(new_turf.y)))
|
||||
|
||||
SSspatial_grid.exit_cell(src, old_turf)
|
||||
SSspatial_grid.enter_cell(src, new_turf)
|
||||
|
||||
else if(old_turf && !new_turf)
|
||||
SSspatial_grid.exit_cell(src, old_turf)
|
||||
|
||||
else if(new_turf && !old_turf)
|
||||
SSspatial_grid.enter_cell(src, new_turf)
|
||||
|
||||
var/datum/light_source/L
|
||||
var/thing
|
||||
for(thing in light_sources) // Cycle through the light sources on this atom and tell them to update.
|
||||
@@ -1307,3 +1321,33 @@
|
||||
|
||||
for(var/atom/movable/location as anything in get_nested_locs(src) + src)
|
||||
LAZYREMOVEASSOC(location.important_recursive_contents, RECURSIVE_CONTENTS_AREA_SENSITIVE, src)
|
||||
|
||||
/// Propogates ourselves through our nested contents, similar to other important_recursive_contents procs
|
||||
/// Main difference is that client contents need to possibly duplicate recursive contents for the clients mob AND its eye
|
||||
/mob/proc/enable_client_mobs_in_contents()
|
||||
for(var/atom/movable/movable_loc as anything in get_nested_locs(src) + src)
|
||||
LAZYINITLIST(movable_loc.important_recursive_contents)
|
||||
var/list/recursive_contents = movable_loc.important_recursive_contents // blue hedgehog velocity
|
||||
if(!length(recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS]))
|
||||
SSspatial_grid.add_grid_awareness(movable_loc, SPATIAL_GRID_CONTENTS_TYPE_CLIENTS)
|
||||
LAZYINITLIST(recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS])
|
||||
recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS] |= src
|
||||
|
||||
var/turf/our_turf = get_turf(src)
|
||||
/// We got our awareness updated by the important recursive contents stuff, now we add our membership
|
||||
SSspatial_grid.add_grid_membership(src, our_turf, SPATIAL_GRID_CONTENTS_TYPE_CLIENTS)
|
||||
|
||||
/// Clears the clients channel of this mob
|
||||
/mob/proc/clear_important_client_contents()
|
||||
var/turf/our_turf = get_turf(src)
|
||||
SSspatial_grid.remove_grid_membership(src, our_turf, SPATIAL_GRID_CONTENTS_TYPE_CLIENTS)
|
||||
|
||||
for(var/atom/movable/movable_loc as anything in get_nested_locs(src) + src)
|
||||
LAZYINITLIST(movable_loc.important_recursive_contents)
|
||||
var/list/recursive_contents = movable_loc.important_recursive_contents // blue hedgehog velocity
|
||||
LAZYINITLIST(recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS])
|
||||
recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS] -= src
|
||||
if(!length(recursive_contents[RECURSIVE_CONTENTS_CLIENT_MOBS]))
|
||||
SSspatial_grid.remove_grid_awareness(movable_loc, SPATIAL_GRID_CONTENTS_TYPE_CLIENTS)
|
||||
ASSOC_UNSETEMPTY(recursive_contents, RECURSIVE_CONTENTS_CLIENT_MOBS)
|
||||
UNSETEMPTY(movable_loc.important_recursive_contents)
|
||||
|
||||
Reference in New Issue
Block a user