#ifndef LIGHTKEEPER_H #define LIGHTKEEPER_H #include #include #include #include #include "destrum/Graphics/Resources/Cubemap.h" #include "destrum/ObjectModel/GameObject.h" class LightKeeper final : public App { public: LightKeeper(); virtual ~LightKeeper(); void customInit() override; void customUpdate(float dt) override; void customDraw() override; void customCleanup() override; void customFixedUpdate(float dt) override; void onWindowResize(int newWidth, int newHeight) override; private: struct FallingStar { GameObject* object{}; float speed{}; }; void resetGame(); void respawnStar(FallingStar& star, float minimumHeight); void drawHud(); Camera camera{glm::vec3(0.f, 0.f, -5.f), glm::vec3(0, 1, 0)}; MeshID sphereMesh{NULL_MESH_ID}; MaterialID playerMaterial{NULL_MATERIAL_ID}; MaterialID starMaterial{NULL_MATERIAL_ID}; std::unique_ptr skyboxCubemap; GameObject* player{nullptr}; std::vector stars; std::mt19937 randomEngine{0xD35A1234u}; std::uniform_real_distribution spawnX{-5.5f, 5.5f}; std::uniform_real_distribution spawnHeight{0.0f, 2.0f}; std::uniform_real_distribution spawnSpeed{2.8f, 4.2f}; int score{0}; int misses{0}; bool gameOver{false}; }; #endif //LIGHTKEEPER_H