Files
Np_Term/Client/include/vulkan/engine.h
2025-05-26 02:07:44 +09:00

53 lines
1.4 KiB
C++

#pragma once
#include "asset/loader.h"
#include "physics.h"
#include "graphics.h"
namespace veng {
class Engine {
public:
Engine(gsl::not_null<Graphics*> vulkan_graphics)
: vulkan_graphics(vulkan_graphics) {}
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_;
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