1#include "ModelComponent.h"
2#include "imgui/imgui/imgui.h"
3#include "core/ecs/components/TransformComponent.h"
4#include "core/os/FileDialogue.h"
5#include "core/renderer/Texture.h"
6#include "editor/assets/Assets.h"
7#include "core/ecs/ECS.h"
11Vivid::ModelComponent::ModelComponent()
13 m_Meshes.reserve(MAX_MESHES);
16void Vivid::ModelComponent::Draw(
Camera* camera)
18 auto component = ECS::GetComponent(ComponentType::TransformComponent, m_OwnerEntityID);
21 std::cerr <<
"Entity does not have a TransformComponent\n";
25 int componentID = component->GetComponentID();
26 auto transformComponent =
dynamic_cast<TransformComponent*
>(component.get());
27 glm::mat4 transform = transformComponent->GetTransform();
29 for (
auto& mesh : m_Meshes)
31 mesh->Update(transform);
36void Vivid::ModelComponent::AddMesh(
Vivid::Mesh* mesh)
38 m_Meshes.push_back(mesh);
41void Vivid::ModelComponent::RemoveMesh(
Vivid::Mesh* mesh)
43 m_Meshes.erase(std::remove(m_Meshes.begin(), m_Meshes.end(), mesh), m_Meshes.end());
46void Vivid::ModelComponent::ImGuiRender()
48 static ImGuiTableColumnFlags columns_base_flags = ImGuiTableColumnFlags_None;
50 if (ImGui::BeginTable(
"table_advanced", 4, 0, ImVec2(0, 0), 0))
52 ImGui::TableSetupColumn(
"ID", columns_base_flags, 0.0f, 0);
53 ImGui::TableSetupColumn(
"Action-Remove", columns_base_flags | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, 1);
54 ImGui::TableSetupColumn(
"Action-Edit", columns_base_flags | ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, 2);
56 ImGui::PushButtonRepeat(
true);
57 ImGuiListClipper clipper;
58 clipper.Begin(m_Meshes.size());
59 int row_minimum_height = (int)10;
60 while (clipper.Step())
62 for (
int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
64 if (row_n >= m_Meshes.size())
66 Mesh* item = m_Meshes[row_n];
70 ImGui::PushID(item->GetID());
71 ImGui::TableNextRow(ImGuiTableRowFlags_None, row_minimum_height);
73 ImGui::TableSetColumnIndex(0);
74 ImGui::Text(
"Mesh %d", item->GetID());
76 if (ImGui::TableSetColumnIndex(1))
78 if (ImGui::ImageButton((ImTextureID)VividGui::Assets::GetInstance()->GetTexMinus()->GetRendererID(), ImVec2(10, 10),
79 ImVec2(0.25, 0.25), ImVec2(0.75, 0.75), 2))
81 RemoveMesh(m_Meshes[row_n]);
85 if (ImGui::TableSetColumnIndex(2))
87 if (ImGui::ImageButton((ImTextureID)VividGui::Assets::GetInstance()->GetTexEdit()->GetRendererID(), ImVec2(10, 10),
88 ImVec2(0.25, 0.25), ImVec2(0.75, 0.75), 2))
90 m_Meshes[row_n]->EditMesh();
96 ImGui::PopButtonRepeat();
99 if (ImGui::ImageButton((ImTextureID)VividGui::Assets::GetInstance()->GetTexPlus()->GetRendererID(), ImVec2(10, 10),
100 ImVec2(0.25, 0.25), ImVec2(0.75, 0.75), 2))
102 std::string file = FileDialogue::OpenFile({}, {});
105 Mesh* mesh =
new Mesh(file);
110 for (
auto&& mesh : m_Meshes)
A class that represents the camera.