#pragma once #include "vulkan_engine/asset/loader.h" #include "graphics.h" #include "physics.h" #include "utils/thread_pool.h" namespace veng { class Engine { public: Engine(gsl::not_null vulkan_graphics, utils::ThreadPool* thread_pool) : vulkan_graphics(vulkan_graphics), thread_pool_(thread_pool) {} void init(); void LoadModelAsset(std::string path, std::string name); const Model* GetStaticModel(std::string name); Model* SpawnModel(std::string asset_name, std::string name); Model* SpawnLifedModel(std::string asset_name, std::string name, std::float_t lifespan); Model* GetSpawnedObject(std::string name); void Update(); std::function BeginPlay = [](Engine& engine) {}; std::function Tick = [](Engine& engine, std::float_t delta_time) {}; glm::mat4 view = glm::lookAt(glm::vec3(0.f, 0.f, -5.f), glm::vec3(0.f, 0.f, 0.f), glm::vec3(0.f, -1.f, 0.f)); glm::mat4 projection = glm::perspective(glm::radians(103.f), 800.f / 600.f, 0.1f, 1000.f); gsl::not_null vulkan_graphics; private: Loader asset_loader_; Physics physics_controller_; utils::ThreadPool* thread_pool_; glm::ivec2 window_size_ = {0, 0}; std::double_t last_frame_time_ = 0.0; std::unordered_map model_assets_; std::unordered_map dynamic_immortal_models_; std::unordered_map> dynamic_models_; }; } // namespace veng