#pragma once #include "OpenGlExtensions.h" #include "Renderer.h" #include "Environment.h" #include "TextureManager.h" #include "SparkEmitter.h" #include "PlanetObject.h" #include "UiManager.h" #include "Projectile.h" namespace ZL { struct BoxCoords { Vector3f pos; Matrix3f m; }; class Game { public: Game(); ~Game(); void setup(); void update(); void render(); bool shouldExit() const { return Environment::exitGameLoop; } private: void processTickCount(); void drawScene(); void drawCubemap(float skyPercent); void drawShip(); void drawBoxes(); void drawUI(); void fireProjectiles(); SDL_Window* window; SDL_GLContext glContext; Renderer renderer; size_t newTickCount; size_t lastTickCount; std::shared_ptr rockTexture; std::vector boxCoordsArr; std::vector boxRenderArr; //std::shared_ptr buttonTexture; //VertexRenderStruct button; //std::shared_ptr musicVolumeBarTexture; //VertexRenderStruct musicVolumeBar; //std::shared_ptr musicVolumeBarButtonTexture; //VertexRenderStruct musicVolumeBarButton; //bool isDraggingVolume = false; float musicVolume = 0.0f; float volumeBarMinX = 1190.0f; float volumeBarMaxX = 1200.0f; float volumeBarMinY = 100.0f; float volumeBarMaxY = 600.0f; //float musicVolumeBarButtonButtonCenterX = 1195.0f; //float musicVolumeBarButtonButtonRadius = 25.0f; //void UpdateVolumeFromMouse(int mouseX, int mouseY); //void UpdateVolumeKnob(); static const size_t CONST_TIMER_INTERVAL = 10; static const size_t CONST_MAX_TIME_INTERVAL = 1000; std::shared_ptr sparkTexture; std::shared_ptr spaceshipTexture; std::shared_ptr cubemapTexture; VertexDataStruct spaceshipBase; VertexRenderStruct spaceship; VertexRenderStruct cubemap; std::shared_ptr boxTexture; VertexDataStruct boxBase; SparkEmitter sparkEmitter; SparkEmitter projectileEmitter; PlanetObject planetObject; UiManager uiManager; std::vector> projectiles; std::shared_ptr projectileTexture; float projectileCooldownMs = 500.0f; uint64_t lastProjectileFireTime = 0; int maxProjectiles = 32; std::vector shipLocalEmissionPoints; }; } // namespace ZL