mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2024-10-29 22:45:34 +01:00
port to EnTT v3.10.0
This commit is contained in:
parent
e0f503728d
commit
4dd5a69dee
@ -85,8 +85,8 @@ private:
|
|||||||
|
|
||||||
bool entityHasComponent(Registry& registry, EntityType& entity, ComponentTypeID type_id)
|
bool entityHasComponent(Registry& registry, EntityType& entity, ComponentTypeID type_id)
|
||||||
{
|
{
|
||||||
ComponentTypeID type[] = { type_id };
|
const auto storage_it = registry.storage(type_id);
|
||||||
return registry.runtime_view(std::cbegin(type), std::cend(type)).contains(entity);
|
return storage_it != registry.storage().end() && storage_it->second.contains(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -243,7 +243,16 @@ public:
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
auto view = registry.runtime_view(comp_list.begin(), comp_list.end());
|
entt::basic_runtime_view<entt::basic_sparse_set<EntityType>> view{};
|
||||||
|
for (const auto type : comp_list) {
|
||||||
|
auto storage_it = registry.storage(type);
|
||||||
|
if (storage_it != registry.storage().end()) {
|
||||||
|
view.iterate(registry.storage(type)->second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: add support for exclude
|
||||||
|
|
||||||
ImGui::Text("%lu Entities Matching:", view.size_hint());
|
ImGui::Text("%lu Entities Matching:", view.size_hint());
|
||||||
|
|
||||||
if (ImGui::BeginChild("entity list")) {
|
if (ImGui::BeginChild("entity list")) {
|
||||||
@ -297,7 +306,8 @@ public:
|
|||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
// Copyright (c) 2020 Erik Scholz, Gnik Droy
|
// Copyright (c) 2019-2022 Erik Scholz
|
||||||
|
// Copyright (c) 2020 Gnik Droy
|
||||||
|
|
||||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
// of this software and associated documentation files (the "Software"), to deal
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
@ -16,20 +16,20 @@ void Camera3D(MM::Scene& scene) {
|
|||||||
|
|
||||||
ImGui::Indent();
|
ImGui::Indent();
|
||||||
|
|
||||||
auto* camera = scene.try_ctx<MM::OpenGL::Camera3D>();
|
if (!scene.ctx().contains<MM::OpenGL::Camera3D>()) {
|
||||||
if (!camera) {
|
|
||||||
ImGui::TextUnformatted("NO CAMERA!");
|
ImGui::TextUnformatted("NO CAMERA!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
auto& camera = scene.ctx().at<MM::OpenGL::Camera3D>();
|
||||||
|
|
||||||
static bool follow_entity = false;
|
static bool follow_entity = false;
|
||||||
static MM::Entity tracking = entt::null;
|
static MM::Entity tracking = entt::null;
|
||||||
|
|
||||||
ImGui::InputFloat("screenRatio", &camera->screenRatio);
|
ImGui::InputFloat("screenRatio", &camera.screenRatio);
|
||||||
ImGui::InputFloat("nearPlane", &camera->nearPlane);
|
ImGui::InputFloat("nearPlane", &camera.nearPlane);
|
||||||
ImGui::InputFloat("farPlane", &camera->farPlane);
|
ImGui::InputFloat("farPlane", &camera.farPlane);
|
||||||
|
|
||||||
if (camera->ortho) {
|
if (camera.ortho) {
|
||||||
ImGui::TextUnformatted("orthographic mode");
|
ImGui::TextUnformatted("orthographic mode");
|
||||||
ImGui::Checkbox("follow entity", &follow_entity);
|
ImGui::Checkbox("follow entity", &follow_entity);
|
||||||
|
|
||||||
@ -39,39 +39,39 @@ void Camera3D(MM::Scene& scene) {
|
|||||||
MM::ImGuiWidgets::Entity(tracking, scene);
|
MM::ImGuiWidgets::Entity(tracking, scene);
|
||||||
if (scene.valid(tracking)) {
|
if (scene.valid(tracking)) {
|
||||||
if (scene.all_of<MM::Components::Position2D>(tracking)) {
|
if (scene.all_of<MM::Components::Position2D>(tracking)) {
|
||||||
camera->translation = {scene.get<MM::Components::Position2D>(tracking).pos, 0.f};
|
camera.translation = {scene.get<MM::Components::Position2D>(tracking).pos, 0.f};
|
||||||
} else if (scene.all_of<MM::Components::Position3D>(tracking)) { // "3d" fallback
|
} else if (scene.all_of<MM::Components::Position3D>(tracking)) { // "3d" fallback
|
||||||
camera->translation = scene.get<MM::Components::Position3D>(tracking).pos;
|
camera.translation = scene.get<MM::Components::Position3D>(tracking).pos;
|
||||||
} else {
|
} else {
|
||||||
ImGui::TextUnformatted("error: Entity has neither Position2D nor Position3D");
|
ImGui::TextUnformatted("error: Entity has neither Position2D nor Position3D");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ImGui::DragFloat2("translation", &camera->translation.x, 0.1f);
|
ImGui::DragFloat2("translation", &camera.translation.x, 0.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ImGui::DragFloat("h_vp_size", &camera->horizontalViewPortSize, 0.1f);
|
ImGui::DragFloat("h_vp_size", &camera.horizontalViewPortSize, 0.1f);
|
||||||
|
|
||||||
// TODO: aspect ratio
|
// TODO: aspect ratio
|
||||||
|
|
||||||
// TODO: check for change
|
// TODO: check for change
|
||||||
camera->setOrthographic();
|
camera.setOrthographic();
|
||||||
} else { // perspective
|
} else { // perspective
|
||||||
ImGui::TextUnformatted("perspective mode");
|
ImGui::TextUnformatted("perspective mode");
|
||||||
|
|
||||||
ImGui::DragFloat3("translation", &camera->translation.x, 0.1f);
|
ImGui::DragFloat3("translation", &camera.translation.x, 0.1f);
|
||||||
ImGui::SliderFloat("fov", &camera->fov, 0.1f, glm::pi<float>());
|
ImGui::SliderFloat("fov", &camera.fov, 0.1f, glm::pi<float>());
|
||||||
|
|
||||||
ImGui::SliderFloat("yaw", &camera->yaw, 0.0f, 2*glm::pi<float>());
|
ImGui::SliderFloat("yaw", &camera.yaw, 0.0f, 2*glm::pi<float>());
|
||||||
ImGui::SliderFloat("pitch", &camera->pitch, -glm::pi<float>()/2, glm::pi<float>()/2);
|
ImGui::SliderFloat("pitch", &camera.pitch, -glm::pi<float>()/2, glm::pi<float>()/2);
|
||||||
|
|
||||||
ImGui::InputFloat3("up", &camera->up.x);
|
ImGui::InputFloat3("up", &camera.up.x);
|
||||||
|
|
||||||
camera->setPerspective();
|
camera.setPerspective();
|
||||||
}
|
}
|
||||||
|
|
||||||
camera->updateView();
|
camera.updateView();
|
||||||
|
|
||||||
ImGui::Unindent();
|
ImGui::Unindent();
|
||||||
}
|
}
|
||||||
|
@ -71,14 +71,13 @@ namespace MM::Services {
|
|||||||
};
|
};
|
||||||
|
|
||||||
menu_bar.menu_tree["Scene"]["TimeCtx"] = [this](Engine& e) {
|
menu_bar.menu_tree["Scene"]["TimeCtx"] = [this](Engine& e) {
|
||||||
MM::Components::TimeDelta* td_ptr = nullptr;
|
bool have_ctx = false;
|
||||||
|
|
||||||
if (auto* ssi_ptr = e.tryService<MM::Services::SceneServiceInterface>()) {
|
if (auto* ssi_ptr = e.tryService<MM::Services::SceneServiceInterface>()) {
|
||||||
auto& scene = ssi_ptr->getScene();
|
have_ctx = ssi_ptr->getScene().ctx().contains<MM::Components::TimeDelta>();
|
||||||
td_ptr = scene.try_ctx<MM::Components::TimeDelta>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::MenuItem("TimeDelta Context", NULL, &_show_time_delta_ctx, td_ptr);
|
ImGui::MenuItem("TimeDelta Context", NULL, &_show_time_delta_ctx, have_ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
// add task
|
// add task
|
||||||
@ -157,10 +156,13 @@ namespace MM::Services {
|
|||||||
|
|
||||||
if (_show_time_delta_ctx) {
|
if (_show_time_delta_ctx) {
|
||||||
if (ImGui::Begin("Scene TimeDelta Context", &_show_time_delta_ctx)) {
|
if (ImGui::Begin("Scene TimeDelta Context", &_show_time_delta_ctx)) {
|
||||||
auto* td_ptr = scene.try_ctx<MM::Components::TimeDelta>();
|
if (scene.ctx().contains<MM::Components::TimeDelta>()) {
|
||||||
ImGui::Value("tickDelta", td_ptr->tickDelta);
|
auto& td = scene.ctx().at<MM::Components::TimeDelta>();
|
||||||
ImGui::SliderFloat("deltaFactor", &td_ptr->deltaFactor, 0.f, 10.f, "%.5f", ImGuiSliderFlags_Logarithmic);
|
ImGui::Value("tickDelta", td.tickDelta);
|
||||||
|
ImGui::SliderFloat("deltaFactor", &td.deltaFactor, 0.f, 10.f, "%.5f", ImGuiSliderFlags_Logarithmic);
|
||||||
|
} else {
|
||||||
|
ImGui::TextUnformatted("No TimeDelta");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
@ -27,9 +27,6 @@
|
|||||||
namespace MM::OpenGL::RenderTasks {
|
namespace MM::OpenGL::RenderTasks {
|
||||||
|
|
||||||
BatchedSpriteSheet::BatchedSpriteSheet(Engine& engine) {
|
BatchedSpriteSheet::BatchedSpriteSheet(Engine& engine) {
|
||||||
default_cam.setOrthographic();
|
|
||||||
default_cam.updateView();
|
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
-0.5f, 0.5f,
|
-0.5f, 0.5f,
|
||||||
-0.5f, -0.5f,
|
-0.5f, -0.5f,
|
||||||
@ -70,6 +67,10 @@ void BatchedSpriteSheet::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
|
|
||||||
auto& scene = ssi->getScene();
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
struct sp_data {
|
struct sp_data {
|
||||||
SpriteSheet sp;
|
SpriteSheet sp;
|
||||||
struct instance_data {
|
struct instance_data {
|
||||||
@ -116,12 +117,9 @@ void BatchedSpriteSheet::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
auto* cam = scene.try_ctx<Camera3D>();
|
auto& cam = scene.ctx().at<Camera3D>();
|
||||||
if (!cam) {
|
|
||||||
cam = &default_cam;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto vp = cam->getViewProjection();
|
auto vp = cam.getViewProjection();
|
||||||
_shader->setUniformMat4f("_VP", vp);
|
_shader->setUniformMat4f("_VP", vp);
|
||||||
|
|
||||||
for (auto& sp_ent : batch_map) {
|
for (auto& sp_ent : batch_map) {
|
||||||
|
@ -37,8 +37,6 @@ namespace MM::OpenGL::RenderTasks {
|
|||||||
public:
|
public:
|
||||||
glm::vec4 default_color {1.f, 1.f, 1.f, 1.f};
|
glm::vec4 default_color {1.f, 1.f, 1.f, 1.f};
|
||||||
|
|
||||||
OpenGL::Camera3D default_cam;
|
|
||||||
|
|
||||||
BatchedSpriteSheet(Engine& engine);
|
BatchedSpriteSheet(Engine& engine);
|
||||||
~BatchedSpriteSheet(void);
|
~BatchedSpriteSheet(void);
|
||||||
|
|
||||||
|
@ -47,7 +47,6 @@ FastSky::FastSky(MM::Engine& engine) {
|
|||||||
|
|
||||||
_vertexBuffer->unbind(GL_ARRAY_BUFFER);
|
_vertexBuffer->unbind(GL_ARRAY_BUFFER);
|
||||||
_vao->unbind();
|
_vao->unbind();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FastSky::~FastSky(void) {
|
FastSky::~FastSky(void) {
|
||||||
@ -56,6 +55,17 @@ FastSky::~FastSky(void) {
|
|||||||
void FastSky::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
void FastSky::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
||||||
ZoneScopedN("MM::OpenGL::RenderTasks::FastSky::render");
|
ZoneScopedN("MM::OpenGL::RenderTasks::FastSky::render");
|
||||||
|
|
||||||
|
auto* ssi = engine.tryService<MM::Services::SceneServiceInterface>();
|
||||||
|
if (ssi == nullptr) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
rs.targets[target_fbo]->bind(MM::OpenGL::FrameBufferObject::W);
|
rs.targets[target_fbo]->bind(MM::OpenGL::FrameBufferObject::W);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
@ -67,9 +77,8 @@ void FastSky::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
|||||||
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
|
||||||
{
|
{
|
||||||
auto& cam = scene.ctx<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().at<MM::OpenGL::Camera3D>();
|
||||||
MM::OpenGL::Camera3D tmp_cam = cam;
|
MM::OpenGL::Camera3D tmp_cam = cam;
|
||||||
// create cam with y up, bc shader says so
|
// create cam with y up, bc shader says so
|
||||||
tmp_cam.up = {0, 1, 0};
|
tmp_cam.up = {0, 1, 0};
|
||||||
@ -80,9 +89,13 @@ void FastSky::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto* ctx_ptr = scene.try_ctx<FastSkyContext>();
|
//auto* ctx_ptr = scene.try_ctx<FastSkyContext>();
|
||||||
if (!ctx_ptr) {
|
//if (!ctx_ptr) {
|
||||||
ctx_ptr = &_default_context;
|
//ctx_ptr = &_default_context;
|
||||||
|
//}
|
||||||
|
auto* ctx_ptr = &_default_context;
|
||||||
|
if (scene.ctx().contains<FastSkyContext>()) {
|
||||||
|
ctx_ptr = &scene.ctx().at<FastSkyContext>();
|
||||||
}
|
}
|
||||||
|
|
||||||
_shader->setUniform1f("time", ctx_ptr->time);
|
_shader->setUniform1f("time", ctx_ptr->time);
|
||||||
|
@ -22,9 +22,6 @@
|
|||||||
namespace MM::OpenGL::RenderTasks {
|
namespace MM::OpenGL::RenderTasks {
|
||||||
|
|
||||||
SimpleRect::SimpleRect(Engine& engine) {
|
SimpleRect::SimpleRect(Engine& engine) {
|
||||||
default_cam.setOrthographic();
|
|
||||||
default_cam.updateView();
|
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
-0.5f, 0.5f,
|
-0.5f, 0.5f,
|
||||||
-0.5f, -0.5f,
|
-0.5f, -0.5f,
|
||||||
@ -63,6 +60,10 @@ void SimpleRect::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
|
|
||||||
auto& scene = ssi->getScene();
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
rs.targets[target_fbo]->bind(FrameBufferObject::RW);
|
rs.targets[target_fbo]->bind(FrameBufferObject::RW);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
@ -71,12 +72,8 @@ void SimpleRect::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
_shader->bind();
|
_shader->bind();
|
||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
Camera3D* cam = scene.try_ctx<Camera3D>();
|
Camera3D& cam = scene.ctx().at<Camera3D>();
|
||||||
if (!cam) {
|
auto vp = cam.getViewProjection();
|
||||||
cam = &default_cam;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto vp = cam->getViewProjection();
|
|
||||||
|
|
||||||
scene.view<const Components::Transform4x4>().each([this, &scene, &vp](entt::entity e, const auto& t) {
|
scene.view<const Components::Transform4x4>().each([this, &scene, &vp](entt::entity e, const auto& t) {
|
||||||
_shader->setUniformMat4f("_WVP", vp * t.trans);
|
_shader->setUniformMat4f("_WVP", vp * t.trans);
|
||||||
|
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
#include <mm/opengl/camera_3d.hpp>
|
#include <mm/opengl/camera_3d.hpp>
|
||||||
|
|
||||||
//#include <glm/fwd.hpp>
|
|
||||||
#include <glm/vec4.hpp>
|
#include <glm/vec4.hpp>
|
||||||
|
|
||||||
// fwd
|
// fwd
|
||||||
@ -26,8 +25,6 @@ namespace MM::OpenGL::RenderTasks {
|
|||||||
public:
|
public:
|
||||||
glm::vec4 default_color {1,1,1,1};
|
glm::vec4 default_color {1,1,1,1};
|
||||||
|
|
||||||
Camera3D default_cam;
|
|
||||||
|
|
||||||
SimpleRect(Engine& engine);
|
SimpleRect(Engine& engine);
|
||||||
~SimpleRect(void);
|
~SimpleRect(void);
|
||||||
|
|
||||||
|
@ -28,9 +28,6 @@
|
|||||||
namespace MM::OpenGL::RenderTasks {
|
namespace MM::OpenGL::RenderTasks {
|
||||||
|
|
||||||
SimpleSprite::SimpleSprite(Engine& engine) {
|
SimpleSprite::SimpleSprite(Engine& engine) {
|
||||||
default_cam.setOrthographic();
|
|
||||||
default_cam.updateView();
|
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
-0.5f, 0.5f,
|
-0.5f, 0.5f,
|
||||||
-0.5f, -0.5f,
|
-0.5f, -0.5f,
|
||||||
@ -69,6 +66,10 @@ void SimpleSprite::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
|
|
||||||
auto& scene = ssi->getScene();
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
rs.targets[target_fbo]->bind(FrameBufferObject::W);
|
rs.targets[target_fbo]->bind(FrameBufferObject::W);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
@ -79,12 +80,8 @@ void SimpleSprite::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
|
|
||||||
auto* cam = scene.try_ctx<Camera3D>();
|
Camera3D& cam = scene.ctx().at<Camera3D>();
|
||||||
if (!cam) {
|
auto vp = cam.getViewProjection();
|
||||||
cam = &default_cam;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto vp = cam->getViewProjection();
|
|
||||||
|
|
||||||
scene.view<const Components::Transform4x4, Components::OpenGL::Texture>().each([this, &scene, &vp](entt::entity e, const auto& t, auto& tex) {
|
scene.view<const Components::Transform4x4, Components::OpenGL::Texture>().each([this, &scene, &vp](entt::entity e, const auto& t, auto& tex) {
|
||||||
assert(tex.tex); // debug
|
assert(tex.tex); // debug
|
||||||
|
@ -26,8 +26,6 @@ namespace MM::OpenGL::RenderTasks {
|
|||||||
public:
|
public:
|
||||||
glm::vec4 default_color {1,1,1,1};
|
glm::vec4 default_color {1,1,1,1};
|
||||||
|
|
||||||
Camera3D default_cam;
|
|
||||||
|
|
||||||
SimpleSprite(Engine& engine);
|
SimpleSprite(Engine& engine);
|
||||||
~SimpleSprite(void);
|
~SimpleSprite(void);
|
||||||
|
|
||||||
|
@ -30,9 +30,6 @@
|
|||||||
namespace MM::OpenGL::RenderTasks {
|
namespace MM::OpenGL::RenderTasks {
|
||||||
|
|
||||||
SimpleSpriteSheet::SimpleSpriteSheet(Engine& engine) {
|
SimpleSpriteSheet::SimpleSpriteSheet(Engine& engine) {
|
||||||
default_cam.setOrthographic();
|
|
||||||
default_cam.updateView();
|
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
-0.5f, 0.5f,
|
-0.5f, 0.5f,
|
||||||
-0.5f, -0.5f,
|
-0.5f, -0.5f,
|
||||||
@ -56,11 +53,6 @@ SimpleSpriteSheet::SimpleSpriteSheet(Engine& engine) {
|
|||||||
setupShaderFiles();
|
setupShaderFiles();
|
||||||
_shader = Shader::createF(engine, vertexPath, fragmentPath);
|
_shader = Shader::createF(engine, vertexPath, fragmentPath);
|
||||||
assert(_shader != nullptr);
|
assert(_shader != nullptr);
|
||||||
|
|
||||||
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
|
||||||
if (!scene.try_ctx<Camera3D>()) {
|
|
||||||
LOG_SSSR("warn: scene has no Camera!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SimpleSpriteSheet::~SimpleSpriteSheet(void) {
|
SimpleSpriteSheet::~SimpleSpriteSheet(void) {
|
||||||
@ -76,6 +68,10 @@ void SimpleSpriteSheet::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
|
|
||||||
auto& scene = ssi->getScene();
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
rs.targets[target_fbo]->bind(FrameBufferObject::W);
|
rs.targets[target_fbo]->bind(FrameBufferObject::W);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
@ -85,12 +81,8 @@ void SimpleSpriteSheet::render(Services::OpenGLRenderer& rs, Engine& engine) {
|
|||||||
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
auto* cam = scene.try_ctx<Camera3D>();
|
Camera3D& cam = scene.ctx().at<Camera3D>();
|
||||||
if (!cam) {
|
auto vp = cam.getViewProjection();
|
||||||
cam = &default_cam;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto vp = cam->getViewProjection();
|
|
||||||
|
|
||||||
scene.view<const Components::Transform4x4, SpriteSheetRenderable>().each([this, &scene, &vp](entt::entity e, const auto& t, auto& spr) {
|
scene.view<const Components::Transform4x4, SpriteSheetRenderable>().each([this, &scene, &vp](entt::entity e, const auto& t, auto& spr) {
|
||||||
assert(spr.sp.tex); // debug
|
assert(spr.sp.tex); // debug
|
||||||
|
@ -26,8 +26,6 @@ namespace MM::OpenGL::RenderTasks {
|
|||||||
public:
|
public:
|
||||||
glm::vec4 default_color {1.f, 1.f, 1.f, 1.f};
|
glm::vec4 default_color {1.f, 1.f, 1.f, 1.f};
|
||||||
|
|
||||||
Camera3D default_cam;
|
|
||||||
|
|
||||||
SimpleSpriteSheet(Engine& engine);
|
SimpleSpriteSheet(Engine& engine);
|
||||||
~SimpleSpriteSheet(void);
|
~SimpleSpriteSheet(void);
|
||||||
|
|
||||||
|
@ -75,6 +75,17 @@ Tilemap::~Tilemap(void) {
|
|||||||
void Tilemap::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
void Tilemap::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
||||||
ZoneScopedN("MM::OpenGL::Renderers::TilemapRenderer::render");
|
ZoneScopedN("MM::OpenGL::Renderers::TilemapRenderer::render");
|
||||||
|
|
||||||
|
auto* ssi = engine.tryService<MM::Services::SceneServiceInterface>();
|
||||||
|
if (ssi == nullptr) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& scene = ssi->getScene();
|
||||||
|
|
||||||
|
if (!scene.ctx().contains<Camera3D>()) {
|
||||||
|
return; // nothing to draw
|
||||||
|
}
|
||||||
|
|
||||||
rs.targets[target_fbo]->bind(MM::OpenGL::FrameBufferObject::W);
|
rs.targets[target_fbo]->bind(MM::OpenGL::FrameBufferObject::W);
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
@ -85,17 +96,13 @@ void Tilemap::render(MM::Services::OpenGLRenderer& rs, MM::Engine& engine) {
|
|||||||
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
_vertexBuffer->bind(GL_ARRAY_BUFFER);
|
||||||
_vao->bind();
|
_vao->bind();
|
||||||
|
|
||||||
|
MM::OpenGL::Camera3D& cam = scene.ctx().at<MM::OpenGL::Camera3D>();
|
||||||
auto& scene = engine.tryService<Services::SceneServiceInterface>()->getScene();
|
|
||||||
|
|
||||||
MM::OpenGL::Camera3D& cam = scene.ctx<MM::OpenGL::Camera3D>();
|
|
||||||
auto vp = cam.getViewProjection();
|
auto vp = cam.getViewProjection();
|
||||||
|
|
||||||
_shader->setUniform3f("_ambient_color", ambient_color);
|
_shader->setUniform3f("_ambient_color", ambient_color);
|
||||||
|
|
||||||
scene.view<MM::Components::Transform4x4, OpenGL::TilemapRenderable>()
|
scene.view<MM::Components::Transform4x4, OpenGL::TilemapRenderable>()
|
||||||
.each([&](auto, MM::Components::Transform4x4& t, OpenGL::TilemapRenderable& tilemap) {
|
.each([&](auto, MM::Components::Transform4x4& t, OpenGL::TilemapRenderable& tilemap) {
|
||||||
//_shader->setUniformMat4f("_WVP", vp * t.getTransform4(tilemap.z + 500.f));
|
|
||||||
_shader->setUniformMat4f("_WVP", vp * t.trans);
|
_shader->setUniformMat4f("_WVP", vp * t.trans);
|
||||||
|
|
||||||
// for each sprite layer
|
// for each sprite layer
|
||||||
|
@ -68,7 +68,7 @@ TEST(batched_spritesheet_render_task, it) {
|
|||||||
auto& rs = engine.addService<MM::Services::OpenGLRenderer>();
|
auto& rs = engine.addService<MM::Services::OpenGLRenderer>();
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::OpenGLRenderer>());
|
ASSERT_TRUE(engine.enableService<MM::Services::OpenGLRenderer>());
|
||||||
|
|
||||||
auto& cam = scene.set<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
cam.horizontalViewPortSize = 5;
|
cam.horizontalViewPortSize = 5;
|
||||||
cam.setOrthographic();
|
cam.setOrthographic();
|
||||||
cam.updateView();
|
cam.updateView();
|
||||||
@ -87,8 +87,8 @@ TEST(batched_spritesheet_render_task, it) {
|
|||||||
|
|
||||||
|
|
||||||
// setup systems
|
// setup systems
|
||||||
scene.set<float>(0.f); // accu
|
scene.ctx().emplace<float>(0.f); // accu
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<&update_spritesheet_animation>("update_spritesheet_animation");
|
org.emplace<&update_spritesheet_animation>("update_spritesheet_animation");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -129,9 +129,12 @@ TEST(blur_render_task, it) {
|
|||||||
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
||||||
|
|
||||||
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
|
cam.setOrthographic();
|
||||||
|
cam.updateView();
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -42,18 +42,18 @@ TEST(fast_sky_render_task, it) {
|
|||||||
rs.addRenderTask<MM::OpenGL::RenderTasks::FastSky>(engine);
|
rs.addRenderTask<MM::OpenGL::RenderTasks::FastSky>(engine);
|
||||||
|
|
||||||
// setup systems
|
// setup systems
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<&MM::Systems::fast_sky_sun>("fast_sky_sun");
|
org.emplace<&MM::Systems::fast_sky_sun>("fast_sky_sun");
|
||||||
|
|
||||||
// HACK: instead you would switch to this scene
|
// HACK: instead you would switch to this scene
|
||||||
engine.getService<MM::Services::OrganizerSceneService>().updateOrganizerVertices(scene);
|
engine.getService<MM::Services::OrganizerSceneService>().updateOrganizerVertices(scene);
|
||||||
|
|
||||||
|
|
||||||
auto& cam = scene.set<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
cam.setPerspective();
|
cam.setPerspective();
|
||||||
cam.updateView();
|
cam.updateView();
|
||||||
|
|
||||||
scene.set<MM::OpenGL::RenderTasks::FastSkyContext>();
|
scene.ctx().emplace<MM::OpenGL::RenderTasks::FastSkyContext>();
|
||||||
|
|
||||||
engine.run();
|
engine.run();
|
||||||
}
|
}
|
||||||
|
@ -119,46 +119,6 @@ static void setup_fbos(MM::Engine& engine) {
|
|||||||
|
|
||||||
const float render_scale = 1.f;
|
const float render_scale = 1.f;
|
||||||
|
|
||||||
#if 0
|
|
||||||
rs.targets["clear_opaque"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("albedo"_hs), GL_COLOR_ATTACHMENT0)
|
|
||||||
.attachTexture(rm_t.get("opaque_depth"_hs), GL_DEPTH_ATTACHMENT)
|
|
||||||
.setResize(true)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["clear_opaque"]);
|
|
||||||
|
|
||||||
rs.targets["clear_opaque_normal"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("normal"_hs), GL_COLOR_ATTACHMENT0)
|
|
||||||
.setResize(true)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["clear_opaque"]);
|
|
||||||
|
|
||||||
rs.targets["opaque"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("albedo"_hs), GL_COLOR_ATTACHMENT0)
|
|
||||||
.attachTexture(rm_t.get("normal"_hs), GL_COLOR_ATTACHMENT1)
|
|
||||||
.attachTexture(rm_t.get("opaque_depth"_hs), GL_DEPTH_ATTACHMENT)
|
|
||||||
.setResize(true)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["opaque"]);
|
|
||||||
|
|
||||||
rs.targets["tmp_read"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("normal"_hs), GL_COLOR_ATTACHMENT0)
|
|
||||||
.setResize(false)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["tmp_read"]);
|
|
||||||
|
|
||||||
rs.targets["depth_read"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("opaque_depth"_hs), GL_DEPTH_ATTACHMENT)
|
|
||||||
.setResize(false)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["depth_read"]);
|
|
||||||
|
|
||||||
rs.targets["deferred_shading"] = MM::OpenGL::FBOBuilder::start()
|
|
||||||
.attachTexture(rm_t.get("hdr_color"_hs), GL_COLOR_ATTACHMENT0)
|
|
||||||
.setResize(true)
|
|
||||||
.finish();
|
|
||||||
assert(rs.targets["deferred_shading"]);
|
|
||||||
#endif
|
|
||||||
rs.targets["game_view"] = MM::OpenGL::FBOBuilder::start()
|
rs.targets["game_view"] = MM::OpenGL::FBOBuilder::start()
|
||||||
.attachTexture(rm_t.get("hdr_color"_hs), GL_COLOR_ATTACHMENT0)
|
.attachTexture(rm_t.get("hdr_color"_hs), GL_COLOR_ATTACHMENT0)
|
||||||
.attachTexture(rm_t.get("depth"_hs), GL_DEPTH_ATTACHMENT)
|
.attachTexture(rm_t.get("depth"_hs), GL_DEPTH_ATTACHMENT)
|
||||||
@ -230,9 +190,12 @@ TEST(hdr_bloom_pipeline, it) {
|
|||||||
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
||||||
|
|
||||||
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
|
cam.setOrthographic();
|
||||||
|
cam.updateView();
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -62,8 +62,12 @@ TEST(simple_rect_render_task, it) {
|
|||||||
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
||||||
|
|
||||||
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
|
cam.setOrthographic();
|
||||||
|
cam.updateView();
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -65,9 +65,12 @@ TEST(simple_sprite_render_task, it) {
|
|||||||
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
scene.on_update<MM::Components::Rotation2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>(); // in this example only rotation is touched
|
||||||
|
|
||||||
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
|
cam.setOrthographic();
|
||||||
|
cam.updateView();
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
org.emplace<MM::Systems::simple_rotational_velocity_patching>("simple_rotational_velocity_patching");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -64,7 +64,7 @@ TEST(simple_spritesheet_render_task, it) {
|
|||||||
auto& rs = engine.addService<MM::Services::OpenGLRenderer>();
|
auto& rs = engine.addService<MM::Services::OpenGLRenderer>();
|
||||||
ASSERT_TRUE(engine.enableService<MM::Services::OpenGLRenderer>());
|
ASSERT_TRUE(engine.enableService<MM::Services::OpenGLRenderer>());
|
||||||
|
|
||||||
auto& cam = scene.set<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
cam.horizontalViewPortSize = 5;
|
cam.horizontalViewPortSize = 5;
|
||||||
cam.setOrthographic();
|
cam.setOrthographic();
|
||||||
cam.updateView();
|
cam.updateView();
|
||||||
@ -82,8 +82,8 @@ TEST(simple_spritesheet_render_task, it) {
|
|||||||
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Scale2D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
|
|
||||||
// setup systems
|
// setup systems
|
||||||
scene.set<float>(0.f); // accu
|
scene.ctx().emplace<float>(0.f); // accu
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<&update_spritesheet_animation>("update_spritesheet_animation");
|
org.emplace<&update_spritesheet_animation>("update_spritesheet_animation");
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
|
@ -39,7 +39,7 @@ TEST(tilemap_render_task_test, it) {
|
|||||||
ASSERT_TRUE(provide_ret);
|
ASSERT_TRUE(provide_ret);
|
||||||
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
auto& scene = engine.tryService<MM::Services::SceneServiceInterface>()->getScene();
|
||||||
|
|
||||||
auto& cam = scene.set<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
cam.translation = {2.f, -2.f, 0.f};
|
cam.translation = {2.f, -2.f, 0.f};
|
||||||
cam.horizontalViewPortSize = 20.f;
|
cam.horizontalViewPortSize = 20.f;
|
||||||
cam.setOrthographic();
|
cam.setOrthographic();
|
||||||
@ -63,7 +63,7 @@ TEST(tilemap_render_task_test, it) {
|
|||||||
scene.on_update<MM::Components::Position2D_ZOffset>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Position2D_ZOffset>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
scene.on_update<MM::Components::Position3D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
scene.on_update<MM::Components::Position3D>().connect<&entt::registry::emplace_or_replace<MM::Components::DirtyTransformTag>>();
|
||||||
|
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
org.emplace<MM::Systems::position3d_from_2d>("position3d_from_2d");
|
||||||
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
org.emplace<MM::Systems::transform3d_translate>("transform3d_translate");
|
||||||
org.emplace<MM::Systems::transform_clear_dirty>("transform_clear_dirty");
|
org.emplace<MM::Systems::transform_clear_dirty>("transform_clear_dirty");
|
||||||
|
@ -52,7 +52,7 @@ bool OrganizerSceneService::enable(Engine& engine, std::vector<UpdateStrategies:
|
|||||||
// default scene
|
// default scene
|
||||||
if (!_scene) {
|
if (!_scene) {
|
||||||
_scene = std::make_unique<Scene>();
|
_scene = std::make_unique<Scene>();
|
||||||
_scene->set<MM::Engine&>(engine);
|
_scene->ctx().emplace<MM::Engine&>(engine);
|
||||||
updateOrganizerVertices(*_scene);
|
updateOrganizerVertices(*_scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,14 +74,14 @@ void OrganizerSceneService::sceneFixedUpdate(Engine&) {
|
|||||||
|
|
||||||
size_t continuous_counter = 0;
|
size_t continuous_counter = 0;
|
||||||
|
|
||||||
auto& time_ctx = _scene->ctx_or_set<MM::Components::TimeDelta>(f_delta, initial_delta_factor);
|
auto& time_ctx = _scene->ctx().emplace<MM::Components::TimeDelta>(f_delta, initial_delta_factor);
|
||||||
time_ctx.tickDelta = f_delta * time_ctx.deltaFactor;
|
time_ctx.tickDelta = f_delta * time_ctx.deltaFactor;
|
||||||
|
|
||||||
while (_accumulator >= f_delta){
|
while (_accumulator >= f_delta){
|
||||||
_accumulator -= f_delta;
|
_accumulator -= f_delta;
|
||||||
continuous_counter++;
|
continuous_counter++;
|
||||||
|
|
||||||
for (auto&& v : _scene->ctx<std::vector<entt::organizer::vertex>>()) {
|
for (auto&& v : _scene->ctx().at<std::vector<entt::organizer::vertex>>()) {
|
||||||
v.callback()(v.data(), *_scene);
|
v.callback()(v.data(), *_scene);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,8 +97,8 @@ void OrganizerSceneService::changeSceneFixedUpdate(Engine& engine) {
|
|||||||
if (_next_scene) {
|
if (_next_scene) {
|
||||||
LOG_OSS("changing scene...");
|
LOG_OSS("changing scene...");
|
||||||
_scene = std::move(_next_scene);
|
_scene = std::move(_next_scene);
|
||||||
if (!_scene->try_ctx<MM::Engine>()) {
|
if (!_scene->ctx().contains<MM::Engine>()) {
|
||||||
_scene->set<MM::Engine&>(engine); // make engine accessible from scene
|
_scene->ctx().emplace<MM::Engine&>(engine); // make engine accessible from scene
|
||||||
}
|
}
|
||||||
updateOrganizerVertices(*_scene);
|
updateOrganizerVertices(*_scene);
|
||||||
}
|
}
|
||||||
@ -119,14 +119,14 @@ void OrganizerSceneService::changeSceneNow(std::unique_ptr<Scene>&& new_scene) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void OrganizerSceneService::updateOrganizerVertices(Scene& scene) {
|
void OrganizerSceneService::updateOrganizerVertices(Scene& scene) {
|
||||||
scene.ctx_or_set<std::vector<entt::organizer::vertex>>() =
|
scene.ctx().emplace<std::vector<entt::organizer::vertex>>() =
|
||||||
scene.ctx_or_set<entt::organizer>().graph();
|
scene.ctx().emplace<entt::organizer>().graph();
|
||||||
|
|
||||||
if (!scene.try_ctx<MM::Components::TimeDelta>()) {
|
if (!scene.ctx().contains<MM::Components::TimeDelta>()) {
|
||||||
scene.set<MM::Components::TimeDelta>();
|
scene.ctx().emplace<MM::Components::TimeDelta>();
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDLOG_DEBUG("graph:\n{}", scene.ctx<std::vector<entt::organizer::vertex>>());
|
SPDLOG_DEBUG("graph:\n{}", scene.ctx().at<std::vector<entt::organizer::vertex>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
void OrganizerSceneService::resetTime(void) {
|
void OrganizerSceneService::resetTime(void) {
|
||||||
|
@ -120,11 +120,11 @@ void create_mm_logo(MM::Engine& engine, MM::Services::ScreenDirector::Screen& sc
|
|||||||
auto new_scene = std::make_unique<MM::Scene>();
|
auto new_scene = std::make_unique<MM::Scene>();
|
||||||
auto& scene = *new_scene;
|
auto& scene = *new_scene;
|
||||||
|
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
|
|
||||||
scene.set<MM::Engine&>(_engine); // alias
|
scene.ctx().emplace<MM::Engine&>(_engine); // alias
|
||||||
|
|
||||||
scene.set<Components::screen_timer>(0.f, screen_duration, next_screen);
|
scene.ctx().emplace<Components::screen_timer>(0.f, screen_duration, next_screen);
|
||||||
|
|
||||||
org.emplace<Systems::screen_timer_system>("screen_timer_system");
|
org.emplace<Systems::screen_timer_system>("screen_timer_system");
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ void create_mm_logo(MM::Engine& engine, MM::Services::ScreenDirector::Screen& sc
|
|||||||
org.emplace<MM::Systems::transform3d_scale2d>("transform3d_scale2d");
|
org.emplace<MM::Systems::transform3d_scale2d>("transform3d_scale2d");
|
||||||
//org.emplace<MM::Systems::transform_clear_dirty>("transform_clear_dirty");
|
//org.emplace<MM::Systems::transform_clear_dirty>("transform_clear_dirty");
|
||||||
|
|
||||||
auto& cam = scene.set<MM::OpenGL::Camera3D>();
|
auto& cam = scene.ctx().emplace<MM::OpenGL::Camera3D>();
|
||||||
cam.horizontalViewPortSize = 89.f;
|
cam.horizontalViewPortSize = 89.f;
|
||||||
cam.setOrthographic();
|
cam.setOrthographic();
|
||||||
cam.updateView();
|
cam.updateView();
|
||||||
|
@ -29,7 +29,7 @@ TEST(player_velocity, basic_run) {
|
|||||||
auto& scene = engine.getService<MM::Services::SceneServiceInterface>().getScene();
|
auto& scene = engine.getService<MM::Services::SceneServiceInterface>().getScene();
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<&MM::Systems::player_velocity2d>("player_velocity2d");
|
org.emplace<&MM::Systems::player_velocity2d>("player_velocity2d");
|
||||||
|
|
||||||
// HACK: instead you would switch to this scene
|
// HACK: instead you would switch to this scene
|
||||||
|
@ -11,13 +11,13 @@ TEST(simple_velocity_2d, basic_run) {
|
|||||||
MM::Scene scene;
|
MM::Scene scene;
|
||||||
|
|
||||||
// setup v system
|
// setup v system
|
||||||
auto& org = scene.set<entt::organizer>();
|
auto& org = scene.ctx().emplace<entt::organizer>();
|
||||||
org.emplace<&MM::Systems::simple_positional_velocity>("simple_positional_velocity");
|
org.emplace<&MM::Systems::simple_positional_velocity>("simple_positional_velocity");
|
||||||
org.emplace<&MM::Systems::simple_rotational_velocity>("simple_rotational_velocity");
|
org.emplace<&MM::Systems::simple_rotational_velocity>("simple_rotational_velocity");
|
||||||
auto graph = org.graph();
|
auto graph = org.graph();
|
||||||
|
|
||||||
// setup delta
|
// setup delta
|
||||||
auto& time_ctx = scene.ctx_or_set<MM::Components::TimeDelta>(1.f/60.f, 1.f);
|
auto& time_ctx = scene.ctx().emplace<MM::Components::TimeDelta>(1.f/60.f, 1.f);
|
||||||
time_ctx.tickDelta = 1.f/60.f * time_ctx.deltaFactor;
|
time_ctx.tickDelta = 1.f/60.f * time_ctx.deltaFactor;
|
||||||
|
|
||||||
// setup test entity
|
// setup test entity
|
||||||
|
Loading…
Reference in New Issue
Block a user