* [NO GBP] Final precision rounding for reagent volumes (#79571)
## About The Pull Request
- Fixes#79566
This applies mostly to plumbing reaction chambers but to implement that
fix some rounding operations had to be carried over to `holder.dm`(which
will benefit everything in general)
I'm pulling out all the stops here. Rather than checking "are we close
enough" plumbing reaction chambers will now check if we and i quote
"absolutely insanely precisely there". This means volumes like 49.9999
should become 50 period.
Note this is a high probability & not a definite fix. i.e. now
theoretically 100% of the time you should not get this problem but if it
still happens then as of now i have no solution and have to go back to
the drawing board on this one but i am very confident this should be the
end of all plumbing related problems i.e. at least problems with volumes
not getting rounded to whole numbers
## Changelog
🆑
fix: plumbing factories should not rarely/randomly brick at volumes like
0.9999(when in fact it should have been 1)
/🆑
* [NO GBP] Final precision rounding for reagent volumes
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
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.