// ---------------------------------------------------------------- // 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); SDL_Texture* GetTexture(const std::string& fileName); class Grid* GetGrid() { return mGrid; } std::vector& GetEnemies() { return mEnemies; } class Enemy* GetNearestEnemy(const Vector2& pos); private: void ProcessInput(); void UpdateGame(); void GenerateOutput(); 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; SDL_Window* mWindow; SDL_Renderer* mRenderer; Uint32 mTicksCount; bool mIsRunning; // Track if we're updating actors right now bool mUpdatingActors; // Game-specific std::vector mEnemies; class Grid* mGrid; float mNextEnemy; };