Moves camera update handling to background subsystem, (maybe) fixing lag (#92208)

## About The Pull Request

When a camera update is triggered, it is instead added to a queue on a
background subsystem

An AI entering a camera chunk which is queued to update will force the
update immediately (bypassing the queue)

While the root problem of this is, ultimately, not addressed...

<img width="554" height="58"
alt="467828777-eff3f0e5-49d6-4997-b4d7-05eff6432155"
src="https://github.com/user-attachments/assets/c2d6a5f5-d958-463e-959f-116bd0dab475"
/>

...the change will ultimately prevent update spam from consuming all of
the server's resources - instead allocating updates to the backburner in
times of high server stress (or on multi-z maps)

## Changelog

🆑 Melbert
refactor: Refactored the way camera updates are handled to hopefully
reduce some lag. Report any oddities
/🆑
This commit is contained in:
MrMelbert
2025-11-08 01:43:48 +01:00
committed by GitHub
parent ad7887064e
commit 5146cfd403
42 changed files with 472 additions and 426 deletions
@@ -189,7 +189,7 @@
/obj/item/circuit_component/remotecam/proc/update_camera_location(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
SIGNAL_HANDLER
if(current_camera_state && current_cameranet_state)
GLOB.cameranet.updatePortableCamera(shell_camera, 0.5 SECONDS)
SScameras.update_portable_camera(shell_camera, 0.5 SECONDS)
/**
* Add camera from global cameranet
@@ -197,8 +197,8 @@
/obj/item/circuit_component/remotecam/proc/cameranet_add()
if(current_cameranet_state)
return
GLOB.cameranet.cameras += shell_camera
GLOB.cameranet.addCamera(shell_camera)
SScameras.cameras += shell_camera
SScameras.add_camera_to_chunk(shell_camera)
current_cameranet_state = TRUE
/**
@@ -207,8 +207,8 @@
/obj/item/circuit_component/remotecam/proc/cameranet_remove()
if(!current_cameranet_state)
return
GLOB.cameranet.removeCamera(shell_camera)
GLOB.cameranet.cameras -= shell_camera
SScameras.remove_camera_from_chunk(shell_camera)
SScameras.cameras -= shell_camera
current_cameranet_state = FALSE
/**