#ifndef HYDRAENGINE #define HYDRAENGINE #include "HydraObject.h" #include "../windowmanager/HydraRenderSettings.h" #include class HydraTaskScheduler; class HydraGameProxy; class HydraWindowManager; class HydraInputManager; class HydraRenderer; class HydraECS; class HydraActorManager; class HydraCamera; class HydraBufferManager; class HydraVertexBufferManager; class HydraMeshManager; class HydraMeshSystem; class HydraRenderSystem; class HydraTransformSystem; class HydraMaterialSystem; class HydraPipeline; class HydraTextureBufferManager; class HydraMaterialBufferManager; class HydraLightBufferManager; class HydraLightSystem; class HydraShadowSourceSystem; class CLASS_DEFINE HydraEngine : public HydraObject { public: static HydraEngine *GetInstance() { static HydraEngine instance; return &instance; } HydraTaskScheduler* const TaskScheduler(); void InitialiseGame(HydraGameProxy* game); void Start(); bool KeyPressed(HYDRA_KEY_CODES key); glm::vec2 MouseChange(); void Exit(); HydraWindowManager* const WindowManager(); HydraRenderSettings RenderSettings(); HydraInputManager* const InputManager(); HydraRenderer* const Renderer(); HydraECS* const ECS(); HydraActorManager* const ActorManager(); HydraCamera* const Camera(); HydraBufferManager* const BufferManager(); HydraVertexBufferManager* const VertexBufferManager(); HydraMeshManager* const MeshManager(); HydraPipeline* const Pipeline(); HydraTextureBufferManager* const TextureBufferManager(); HydraMaterialBufferManager* const MaterialBufferManager(); HydraLightBufferManager* const LightBufferManager(); void PossessPlayer(HydraID actor_id); HydraID GetPossessedPlayer(); float GetDeltaT(); uint32_t GetLightCount(); private: void _CreateManagers(); void _InitialiseManagers(); void _InitialiseSystems(); void _UpdateSystems(); void _GameLoop(); void _Shutdown(); class HydraGameProxy* m_game = nullptr; HydraTaskScheduler* m_task_scheduler = nullptr; HydraWindowManager* m_window_manager = nullptr; HydraInputManager* m_input_manager = nullptr; HydraRenderer* m_renderer = nullptr; HydraECS* m_ecs = nullptr; HydraActorManager* m_actor_manager = nullptr; HydraCamera* m_camera = nullptr; HydraBufferManager* m_buffer_manager = nullptr; HydraVertexBufferManager* m_vertex_buffer_manager = nullptr; HydraMeshManager* m_mesh_manager = nullptr; HydraRenderSettings m_render_settings; HydraPipeline* m_pipeline = nullptr; HydraPipeline* m_deferred_pipeline = nullptr; HydraPipeline* m_shadow_pipeline = nullptr; HydraTextureBufferManager* m_texture_buffer_manager = nullptr; HydraMaterialBufferManager* m_material_buffer_manager = nullptr; HydraLightBufferManager* m_light_buffer_manager = nullptr; std::shared_ptr m_mesh_system; std::shared_ptr m_transform_system; std::shared_ptr m_render_system; std::shared_ptr m_material_system; std::shared_ptr m_light_system; std::shared_ptr m_shadow_system; bool m_running = true; float m_delta_t = 0.0f; float m_fixed_delta_t = 0.0f; HydraID m_possessed_actor_id = INVALID_HYDRA_ID; }; #endif /* HYDRAENGINE */