mirror of
https://github.com/MadeOfJelly/MushMachine.git
synced 2025-06-18 18:56:36 +02:00
port to EnTT v3.10.0
This commit is contained in:
@ -85,8 +85,8 @@ private:
|
||||
|
||||
bool entityHasComponent(Registry& registry, EntityType& entity, ComponentTypeID type_id)
|
||||
{
|
||||
ComponentTypeID type[] = { type_id };
|
||||
return registry.runtime_view(std::cbegin(type), std::cend(type)).contains(entity);
|
||||
const auto storage_it = registry.storage(type_id);
|
||||
return storage_it != registry.storage().end() && storage_it->second.contains(entity);
|
||||
}
|
||||
|
||||
public:
|
||||
@ -243,7 +243,16 @@ public:
|
||||
}
|
||||
});
|
||||
} 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());
|
||||
|
||||
if (ImGui::BeginChild("entity list")) {
|
||||
@ -297,7 +306,8 @@ public:
|
||||
|
||||
// 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
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
|
@ -16,20 +16,20 @@ void Camera3D(MM::Scene& scene) {
|
||||
|
||||
ImGui::Indent();
|
||||
|
||||
auto* camera = scene.try_ctx<MM::OpenGL::Camera3D>();
|
||||
if (!camera) {
|
||||
if (!scene.ctx().contains<MM::OpenGL::Camera3D>()) {
|
||||
ImGui::TextUnformatted("NO CAMERA!");
|
||||
return;
|
||||
}
|
||||
auto& camera = scene.ctx().at<MM::OpenGL::Camera3D>();
|
||||
|
||||
static bool follow_entity = false;
|
||||
static MM::Entity tracking = entt::null;
|
||||
|
||||
ImGui::InputFloat("screenRatio", &camera->screenRatio);
|
||||
ImGui::InputFloat("nearPlane", &camera->nearPlane);
|
||||
ImGui::InputFloat("farPlane", &camera->farPlane);
|
||||
ImGui::InputFloat("screenRatio", &camera.screenRatio);
|
||||
ImGui::InputFloat("nearPlane", &camera.nearPlane);
|
||||
ImGui::InputFloat("farPlane", &camera.farPlane);
|
||||
|
||||
if (camera->ortho) {
|
||||
if (camera.ortho) {
|
||||
ImGui::TextUnformatted("orthographic mode");
|
||||
ImGui::Checkbox("follow entity", &follow_entity);
|
||||
|
||||
@ -39,39 +39,39 @@ void Camera3D(MM::Scene& scene) {
|
||||
MM::ImGuiWidgets::Entity(tracking, scene);
|
||||
if (scene.valid(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
|
||||
camera->translation = scene.get<MM::Components::Position3D>(tracking).pos;
|
||||
camera.translation = scene.get<MM::Components::Position3D>(tracking).pos;
|
||||
} else {
|
||||
ImGui::TextUnformatted("error: Entity has neither Position2D nor Position3D");
|
||||
}
|
||||
}
|
||||
} 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: check for change
|
||||
camera->setOrthographic();
|
||||
camera.setOrthographic();
|
||||
} else { // perspective
|
||||
ImGui::TextUnformatted("perspective mode");
|
||||
|
||||
ImGui::DragFloat3("translation", &camera->translation.x, 0.1f);
|
||||
ImGui::SliderFloat("fov", &camera->fov, 0.1f, glm::pi<float>());
|
||||
ImGui::DragFloat3("translation", &camera.translation.x, 0.1f);
|
||||
ImGui::SliderFloat("fov", &camera.fov, 0.1f, 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("yaw", &camera.yaw, 0.0f, 2*glm::pi<float>());
|
||||
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();
|
||||
}
|
||||
|
@ -71,14 +71,13 @@ namespace MM::Services {
|
||||
};
|
||||
|
||||
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>()) {
|
||||
auto& scene = ssi_ptr->getScene();
|
||||
td_ptr = scene.try_ctx<MM::Components::TimeDelta>();
|
||||
have_ctx = ssi_ptr->getScene().ctx().contains<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
|
||||
@ -157,10 +156,13 @@ namespace MM::Services {
|
||||
|
||||
if (_show_time_delta_ctx) {
|
||||
if (ImGui::Begin("Scene TimeDelta Context", &_show_time_delta_ctx)) {
|
||||
auto* td_ptr = scene.try_ctx<MM::Components::TimeDelta>();
|
||||
ImGui::Value("tickDelta", td_ptr->tickDelta);
|
||||
ImGui::SliderFloat("deltaFactor", &td_ptr->deltaFactor, 0.f, 10.f, "%.5f", ImGuiSliderFlags_Logarithmic);
|
||||
|
||||
if (scene.ctx().contains<MM::Components::TimeDelta>()) {
|
||||
auto& td = scene.ctx().at<MM::Components::TimeDelta>();
|
||||
ImGui::Value("tickDelta", td.tickDelta);
|
||||
ImGui::SliderFloat("deltaFactor", &td.deltaFactor, 0.f, 10.f, "%.5f", ImGuiSliderFlags_Logarithmic);
|
||||
} else {
|
||||
ImGui::TextUnformatted("No TimeDelta");
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
Reference in New Issue
Block a user