## About The Pull Request
This is an atomized revival of #82419, with this part containing the
simplest of its features:
- Fixes AO pref refreshing the wrong plane, thus not updating until you
swap bodies
- Removes supermatter's copypasted warp effect
- Culls distortion effects when they're not in use because its a chonky
filter
- Hides the escape menu when its, well, hidden
- Fixes hide_highest_offset not working upon parent's creation (we're so
good at our jobs hell yeah)
- Replaces runechat's AO dropshadow with an outline, because its barely
visible due to low opacity.
## Why It's Good For The Game
Our rendering performance is shit and we need to improve it, and the
first step in this task is optimizing planecube's simplest parts. The
next step is conditional culling, better non-multiz handling and
parallax rework/removal, but all of those need to be atomized as to
prevent the PR from sharing the fate of the original.
## Changelog
🆑
fix: Ambient Occlusion pref should now update immediately upon being
changed, instead of having to swap bodies or waiting for server restart
to get it updated.
code: Slightly improved rendering code/performance just a tiny bit.
/🆑
Loosely adapted from /vg/. This is an entity component system for adding behaviours to datums when inheritance doesn't quite cut it. By using signals and events instead of direct inheritance, you can inject behaviours without hacky overloads. It requires a different method of thinking, but is not hard to use correctly. If a behaviour can have application across more than one thing. Make it generic, make it a component. Atom/mob/obj event? Give it a signal, and forward its arguments with a SendSignal() call. Now every component that want's to can also know about this happening.