Files
Bubberstation/code/datums/components
SyncIt21 ed8fc2c866 Optimization for plumbing reaction chamber & catalysts (#88722)
## About The Pull Request
Plumbing components waste extra ticks in requesting reagents if those
requested reagents are stored in a reaction chamber & they are catalysts
which cannot be sent out. That is because the reaction chamber lies &
tells the pipeline it can give them inside it's
`/datum/component/plumbing/reaction_chamber/can_give()` proc but won't
actually transfer them if it has no excess to spare.

This doesn't cause errors because those components will eventually get
their requested values from other supplies but it takes extra ticks to
do so

This ensures the reaction chamber won't volunteer itself as a supplier
if it can't give out those catalysts thus enabling the pipeline to
request more accurate values by excluding that reaction chamber from its
list suppliers

## Changelog
🆑
code: plumbing reaction chamber won't waste extra ticks for the pipeline
when sending out catalysts
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2024-12-27 22:50:49 +01:00
..
2024-10-09 02:03:50 +02:00
2024-08-15 01:28:21 +01:00
2024-12-27 11:25:12 +00:00
2024-12-14 00:13:12 +01:00
2024-08-21 17:07:02 +12:00
2024-07-15 16:28:41 +01:00
2024-10-09 02:03:50 +02:00
2024-10-07 13:34:36 +02:00

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 its arguments with a SendSignal() call. Now every component that want's to can also know about this happening.

HackMD page for an introduction to the system as a whole.

See/Define signals and their arguments in __DEFINES\components.dm