Line data Source code
1 : #include "scene_panel.hpp"
2 :
3 : #include <imgui.h>
4 :
5 : #include <wren/scene/components/transform.hpp>
6 :
7 0 : void render_scene_panel(const std::shared_ptr<wren::scene::Scene>& scene,
8 : std::optional<flecs::entity>& selected_entity) {
9 0 : ImGui::Begin("Scene");
10 :
11 0 : ImGui::Text("Entity count: %d",
12 0 : scene->world().count<wren::scene::components::Transform>());
13 :
14 0 : auto q = scene->world()
15 0 : .query_builder<const wren::scene::components::Transform>()
16 0 : .build();
17 0 : q.each([&selected_entity](flecs::entity entity,
18 : const wren::scene::components::Transform&) {
19 0 : const auto name = entity.name().size() == 0 ? "(unamed)" : entity.name();
20 :
21 0 : auto entity_node_flags =
22 : ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_Leaf;
23 :
24 0 : if (selected_entity.has_value() && entity == selected_entity) {
25 0 : entity_node_flags |= ImGuiTreeNodeFlags_Selected;
26 0 : }
27 :
28 0 : if (ImGui::TreeNodeEx(name, entity_node_flags)) {
29 : // Set the selected entity
30 0 : if (ImGui::IsItemClicked() && !ImGui::IsItemToggledOpen())
31 0 : selected_entity = entity;
32 :
33 0 : ImGui::TreePop();
34 0 : }
35 0 : });
36 :
37 0 : ImGui::End();
38 0 : }
|