81 lines
2.1 KiB
C++
81 lines
2.1 KiB
C++
#pragma once
|
|
|
|
#include "Config.h"
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
// Forward declarations
|
|
class RenderManager;
|
|
class InputManager;
|
|
class StateManager;
|
|
class AssetManager;
|
|
class Game;
|
|
class ScoreManager;
|
|
class Starfield;
|
|
class Starfield3D;
|
|
class FontAtlas;
|
|
class LineEffect;
|
|
|
|
/**
|
|
* ApplicationManager - Central coordinator for the entire application lifecycle
|
|
*
|
|
* Responsibilities:
|
|
* - Initialize and shutdown all subsystems
|
|
* - Coordinate the main application loop
|
|
* - Manage high-level application state
|
|
* - Provide clean separation between main() and application logic
|
|
*/
|
|
class ApplicationManager {
|
|
public:
|
|
ApplicationManager();
|
|
~ApplicationManager();
|
|
|
|
// Core lifecycle methods
|
|
bool initialize(int argc, char* argv[]);
|
|
void run();
|
|
void shutdown();
|
|
|
|
// Application state
|
|
bool isRunning() const { return m_running; }
|
|
void requestShutdown() { m_running = false; }
|
|
|
|
// Access to managers (for now, will be replaced with dependency injection later)
|
|
RenderManager* getRenderManager() const { return m_renderManager.get(); }
|
|
InputManager* getInputManager() const { return m_inputManager.get(); }
|
|
AssetManager* getAssetManager() const { return m_assetManager.get(); }
|
|
StateManager* getStateManager() const { return m_stateManager.get(); }
|
|
|
|
private:
|
|
// Initialization methods
|
|
bool initializeSDL();
|
|
bool initializeManagers();
|
|
bool initializeGame();
|
|
|
|
// Main loop methods
|
|
void processEvents();
|
|
void update(float deltaTime);
|
|
void render();
|
|
|
|
// Cleanup methods
|
|
void cleanupManagers();
|
|
void cleanupSDL();
|
|
|
|
// Core managers
|
|
std::unique_ptr<RenderManager> m_renderManager;
|
|
std::unique_ptr<InputManager> m_inputManager;
|
|
std::unique_ptr<AssetManager> m_assetManager;
|
|
std::unique_ptr<StateManager> m_stateManager;
|
|
|
|
// Application state
|
|
bool m_running = false;
|
|
bool m_initialized = false;
|
|
|
|
// Timing
|
|
uint64_t m_lastFrameTime = 0;
|
|
|
|
// Configuration
|
|
int m_windowWidth = Config::Window::DEFAULT_WIDTH;
|
|
int m_windowHeight = Config::Window::DEFAULT_HEIGHT;
|
|
std::string m_windowTitle = Config::Window::DEFAULT_TITLE;
|
|
};
|