By using the Event Bus, we can trigger behaviors while keeping core components decoupled. It's straightforward for us to add or remove objects as subscribers or publishers. We also defined a specific list of global events that represent every stage of a race. Therefore, we can now start sequencing and triggering behaviors of core components, from the start to the end of a race, and anything in between.
In the next section, we will review some alternative solutions to the Event Bus, with each solution offering a different approach that might be a better solution depending on context.