Files
Np_Term/Client/include/vulkan_engine/vulkan/engine.h

56 lines
1.6 KiB
C++

#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<Graphics*> 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<void(Engine&)> BeginPlay = [](Engine& engine) {};
std::function<void(Engine&, std::float_t delta_time)> 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<Graphics*> 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<std::string, veng::Model> model_assets_;
std::unordered_map<std::string, veng::Model> dynamic_immortal_models_;
std::unordered_map<std::string, std::pair<veng::Model, std::float_t>>
dynamic_models_;
};
} // namespace veng