#pragma once #include #include #include #include #include #include "Manager.h" #include "Vector2D.h" #include "Entity.h" typedef std::function gamefunction; class AssetManager; class CollisionHandler; class TextureManager; class SoundManager; class Map; namespace engine { extern gamefunction init; extern gamefunction update; extern GameInternal* game; // this is a temporary fix to remove artifacts of chicken_game from the engine while the API is not yet finalized } class GameInternal { public: GameInternal(); ~GameInternal(); void init(const char* title, int xpos, int ypos, int width, int height, bool fullscreen); void selectCharacters(const char* &playerSprite, const char* &enemySprite); void handleEvents(); void update(); void render(); void clean(); bool running() const; /* static */ SDL_Renderer* renderer = nullptr; /* static */ SDL_Event event; /* static */ CollisionHandler* collisionHandler; /* static */ AssetManager* assets; /* static */ TextureManager* textureManager; /* static */ SoundManager* soundManager; // moved globals Manager manager; Map* map; // game specific, might not be needed for all types of games Entity& player1; Entity& player2; Entity& wall; std::vector& tiles; std::vector& players; std::vector& projectiles; std::vector& hearts; std::vector& powerups; // end moved globals void refreshPlayers(); Entity::TeamLabel getWinner() const; void setWinner(Entity::TeamLabel winningTeam); private: int counter = 0; bool isRunning = false; SDL_Window* window; Entity::TeamLabel winner; };