#pragma once #include #include #include #include #include #include #include "EventManager.h" #include "Manager.h" #include "SDL3/SDL_events.h" #include "SDL3/SDL_init.h" #include "Vector2D.h" #include "Entity.h" #include "InputManager.h" #include "RenderManager.h" #include "ConfigLoader.h" typedef std::function gamefunction; class AssetManager; class CollisionHandler; class TextureManager; class SoundManager; class Map; class Game; class GameInternal { public: GameInternal(); ~GameInternal(); SDL_AppResult init(); SDL_AppResult handleEvent(SDL_Event* event); void update(Uint64 frameTime); void render(); void clean(); bool isRunning() const; void setRunning(bool running); // TODO: should be private/not accesible for game dev void stopGame(); /* static */ SDL_Renderer* renderer = nullptr; /* static */ SDL_Event event; /* static */ CollisionHandler* collisionHandler; /* static */ AssetManager* assets; /* static */ TextureManager* textureManager; /* static */ SoundManager* soundManager; /* static */ InputManager* inputManager; Manager manager; RenderManager renderManager; EventManager eventManager; Map* map; // game specific, might not be needed for all types of games ConfigLoader* config; std::vector& tiles; std::vector& players; std::vector& projectiles; std::vector& hearts; std::vector& powerups; // end moved globals void refreshPlayers(); private: Game* gameInstance; int counter = 0; bool running = true; SDL_Window* window; Uint64 lastFrameTime = 0; };