mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-28 00:03:52 +01:00
206bb29d52
I've audited the entire destroy path between datum and human, this time paying attention to byond's built-in vars to make sure that the built-in refs are correctly being cleared. I've also gone and corrected some null-access mistakes, which are most prominently caused by as anything casts not being null checked, since as anything allows null entries in a list to be read. By far the worst offender I've found was the lack of clearing of the atom.underlays var, which contains a list of refs. And when searching for uses of this var across the repo, I've discovered it's associated with an overwhelming majority of the remaining objects still in the hard del trackers.
Datum Component System (DCS)
Concept
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 it's arguments with a SendSignal() call. Now every component that want's to can also know about this happening.
See this thread for an introduction to the system as a whole.