mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-28 01:51:46 +00:00
## About The Pull Request
As the title says.
`init_order` is no more, subsystems ordering now depends on their
declared dependencies.
Subsystems can now declare which other subsystems need to init before
them using a list and the subsystem's typepath
I.e.
```dm
dependencies = list(
/datum/controller/subsystem/atoms,
/datum/controller/subsystem/mapping
)
```
The reverse can also be done, if a subsystem must initialize after your
own:
```dm
dependents = list(
/datum/controller/subsystem/atoms
)
```
Cyclical dependencies are not allowed and will throw an error on
initialization if one is found.
There's also a debug tool to visualize the dependency graph, although
it's a bit basic:

Subsystem load ordering can still be controlled using `init_stage`, some
subsystems use this in cases where they must initialize first or last
regardless of dependencies. An error will be thrown if a subsystem has
an `init_stage` before one of their dependencies.
## Why It's Good For The Game
Makes dealing with subsystem dependencies easier, and reduces the chance
of making a dependency error when needing to shift around subsystem
inits.
## Changelog
🆑
refactor: Refactored subsystem initialization
/🆑
22 lines
962 B
Plaintext
22 lines
962 B
Plaintext
/*!
|
|
This subsystem exists to serve as a holder for important info for the restaurant system for chef and bartender.
|
|
*/
|
|
|
|
SUBSYSTEM_DEF(restaurant)
|
|
name = "Restaurant"
|
|
wait = 20 SECONDS //Roll for new guests but don't do it too fast.
|
|
flags = SS_NO_FIRE
|
|
///All venues that exist, assoc list of type - reference
|
|
var/list/all_venues = list()
|
|
///All customer data datums that exist, assoc list of type - reference
|
|
var/list/all_customers = list()
|
|
///Caches appearances of food, assoc list where key is the type of food, and value is the appearance. Used so we don't have to keep creating new food. Gets filled whenever a new food that hasn't been ordered gets ordered for the first time.
|
|
var/list/food_appearance_cache = list()
|
|
|
|
/datum/controller/subsystem/restaurant/Initialize()
|
|
for(var/key in subtypesof(/datum/venue))
|
|
all_venues[key] = new key()
|
|
for(var/key in subtypesof(/datum/customer_data))
|
|
all_customers[key] = new key()
|
|
return SS_INIT_SUCCESS
|