#pragma once #include "../util/OptionalRef.h" // TODO: remove these singletons: #include "EventManager.h" namespace crepe { class ComponentManager; class SceneManager; class SaveManager; class ResourceManager; class SDLContext; class LoopTimer; class ReplayManager; class SystemManager; /** * Struct to pass references to classes that would otherwise need to be singletons down to * other classes within the engine hierarchy. Made to prevent constant changes to subclasses to * pass specific references through dependency injection. All references on this struct * *should* be explicitly checked for availability as this struct does not guarantee anything. * * \note Dereferencing members of this struct should be deferred. If you are a user of this * class, keep a reference to this mediator instead of just picking references from it when you * receive an instance. * * \warning This class should never be directly accessible from the API */ struct Mediator { OptionalRef sdl_context; OptionalRef component_manager; OptionalRef scene_manager; OptionalRef save_manager; OptionalRef event_manager = EventManager::get_instance(); OptionalRef resource_manager; OptionalRef timer; OptionalRef replay_manager; OptionalRef system_manager; }; } // namespace crepe