// ---------------------------------------------------------------- // From Game Programming in C++ by Sanjay Madhav // Copyright (C) 2017 Sanjay Madhav. All rights reserved. // // Released under the BSD License // See LICENSE in root directory for full details. // ---------------------------------------------------------------- #pragma once #include "SDL/SDL.h" #include #include #include #include "Math.h" class Game { public: Game(); bool Initialize(); void RunLoop(); void Shutdown(); void AddActor(class Actor* actor); void RemoveActor(class Actor* actor); void AddSprite(class SpriteComponent* sprite); void RemoveSprite(class SpriteComponent* sprite); class Texture* GetTexture(const std::string& fileName); // Game-specific (add/remove asteroid) void AddAsteroid(class Asteroid* ast); void RemoveAsteroid(class Asteroid* ast); std::vector& GetAsteroids() { return mAsteroids; } private: void ProcessInput(); void UpdateGame(); void GenerateOutput(); bool LoadShaders(); void CreateSpriteVerts(); void LoadData(); void UnloadData(); // Map of textures loaded std::unordered_map mTextures; // All the actors in the game std::vector mActors; // Any pending actors std::vector mPendingActors; // All the sprite components drawn std::vector mSprites; // Sprite shader class Shader* mSpriteShader; // Sprite vertex array class VertexArray* mSpriteVerts; SDL_Window* mWindow; SDL_GLContext mContext; Uint32 mTicksCount; bool mIsRunning; // Track if we're updating actors right now bool mUpdatingActors; // Game-specific class Ship* mShip; std::vector mAsteroids; };