Minor - ECS use in stats - V12.5.0

This commit is contained in:
CatChow0 2025-06-24 17:15:58 +02:00
parent 7755150ae8
commit 9d0d2d1dfd
5 changed files with 104 additions and 33 deletions

View File

@ -10,7 +10,7 @@ Collapsed=0
[Window][Khaotic Engine] [Window][Khaotic Engine]
Pos=1267,19 Pos=1267,19
Size=317,842 Size=317,609
Collapsed=0 Collapsed=0
DockId=0x00000005,0 DockId=0x00000005,0
@ -28,7 +28,7 @@ DockId=0x0000000B,0
[Window][Terrain] [Window][Terrain]
Pos=0,19 Pos=0,19
Size=266,842 Size=266,609
Collapsed=0 Collapsed=0
DockId=0x00000007,0 DockId=0x00000007,0

View File

@ -106,11 +106,11 @@ public:
void add_cube(); void add_cube();
void delete_entity_by_id(int entity_id); void delete_entity_by_id(int entity_id);
void delete_kobject(int index);
void add_kobject(std::wstring& filepath); void add_kobject(std::wstring& filepath);
void set_path(WCHAR* path) { path_ = path; }; void set_path(WCHAR* path) { path_ = path; };
void set_w_folder(const std::filesystem::path& w_folder) { w_folder_ = w_folder; }; void set_w_folder(const std::filesystem::path& w_folder) { w_folder_ = w_folder; };
std::filesystem::path get_w_folder() const { return w_folder_; }; std::filesystem::path get_w_folder() const { return w_folder_; };
int get_terrain_entity_count();
int get_object_id() const { return object_id_; }; int get_object_id() const { return object_id_; };
void set_object_id(int object_id) { object_id_ = object_id; }; void set_object_id(int object_id) { object_id_ = object_id; };

View File

@ -2071,3 +2071,19 @@ void application_class::update_stats_after_modification()
} }
} }
int application_class::get_terrain_entity_count()
{
std::lock_guard<std::mutex> lock(objects_mutex_);
int terrainCount = 0;
// Get all entities with the Terrain type
auto entities_with_terrain = entity_manager_->GetEntitiesWithComponent<ecs::IdentityComponent>();
for (auto& entity : entities_with_terrain) {
auto identity = entity->GetComponent<ecs::IdentityComponent>();
if (identity && identity->GetType() == ecs::ObjectType::Terrain) {
terrainCount++;
}
}
return terrainCount;
}

View File

@ -386,7 +386,7 @@ void imguiManager::WidgetAddObject()
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("Number of cubes: %d", 1); //TODO: Replace with actual count of cubes ImGui::Text("Number of cubes: %d", app_->get_entity_manager()->GetEntityCount());
} }
} }
@ -702,7 +702,7 @@ void imguiManager::WidgetTerrainWindow()
{ {
ImGui::Begin("Terrain", &showTerrainWindow); ImGui::Begin("Terrain", &showTerrainWindow);
ImGui::Text("Number of terrain cubes: %d", 1); // TODO: Replace with actual count of terrain cubes ImGui::Text("Number of terrain cubes: %d", app_->get_terrain_entity_count());
ImGui::Separator(); ImGui::Separator();

View File

@ -36,16 +36,16 @@ bool stats::initialize(application_class* app)
void stats::update_geometric_stats() void stats::update_geometric_stats()
{ {
// TODO // Utiliser le système ECS pour accéder aux entités avec des composants de rendu
// object_vec_ = app_->get_kobjects(); if (app_ && app_->get_entity_manager())
// cubes_vec_ = app_->get_cubes(); {
// terrain_chunk_vec_ = app_->get_terrain_cubes();
*total_vertex_count_ = get_total_vertex_count(); *total_vertex_count_ = get_total_vertex_count();
*total_triangle_count_ = get_total_triangle_count(); *total_triangle_count_ = get_total_triangle_count();
update_visible_count(); update_visible_count();
Logger::Get().Log("Statistics updated: " + std::to_string(*total_vertex_count_) + " vertices, " + std::to_string(*total_triangle_count_) + " triangles", __FILE__, __LINE__, Logger::LogLevel::Debug);
}
} }
void stats::update_visible_count() void stats::update_visible_count()
@ -66,88 +66,143 @@ void stats::update_display_stats()
int stats::get_total_vertex_count() const int stats::get_total_vertex_count() const
{ {
int totalVertices = 0; int totalVertices = 0;
// Utiliser le système ECS pour accéder aux entités avec des composants de rendu
if (app_ && app_->get_entity_manager())
{
auto entities = app_->get_entity_manager()->GetEntitiesWithComponent<ecs::RenderComponent>();
for (const auto& entity : entities)
{
auto renderComponent = entity->GetComponent<ecs::RenderComponent>();
if (renderComponent && renderComponent->GetModel())
{
totalVertices += renderComponent->GetModel()->GetVertexCount();
}
}
}
// Ajouter également les éventuels objets restants de l'ancien système
for (const auto& obj : object_vec_) for (const auto& obj : object_vec_)
{ {
if (obj) if (obj && obj->get_model())
{ {
totalVertices += obj->get_model()->GetVertexCount(); totalVertices += obj->get_model()->GetVertexCount();
} }
} }
// Ajoutez le nombre de sommets pour les cubes
for (const auto& cube : cubes_vec_) for (const auto& cube : cubes_vec_)
{ {
if (cube) if (cube && cube->get_model())
{ {
totalVertices += cube->get_model()->GetVertexCount(); totalVertices += cube->get_model()->GetVertexCount();
} }
} }
// Ajoutez le nombre de sommets pour le terrain
for (const auto& chunk : terrain_chunk_vec_) for (const auto& chunk : terrain_chunk_vec_)
{ {
if (chunk) if (chunk && chunk->get_model())
{ {
totalVertices += chunk->get_model()->GetVertexCount(); totalVertices += chunk->get_model()->GetVertexCount();
} }
} }
return totalVertices; return totalVertices;
} }
int stats::get_total_triangle_count() const int stats::get_total_triangle_count() const
{ {
int totalTriangles = 0; int totalTriangles = 0;
for (const auto& obj : object_vec_)
// Utiliser le système ECS pour accéder aux entités avec des composants de rendu
if (app_ && app_->get_entity_manager())
{ {
if (obj) auto entities = app_->get_entity_manager()->GetEntitiesWithComponent<ecs::RenderComponent>();
for (const auto& entity : entities)
{
auto renderComponent = entity->GetComponent<ecs::RenderComponent>();
if (renderComponent && renderComponent->GetModel())
{ {
// Dans une topologie de liste de triangles, chaque triangle utilise 3 indices // Dans une topologie de liste de triangles, chaque triangle utilise 3 indices
totalTriangles += renderComponent->GetModel()->GetIndexCount() / 3;
}
}
}
// Ajouter également les éventuels objets restants de l'ancien système
for (const auto& obj : object_vec_)
{
if (obj && obj->get_model())
{
totalTriangles += obj->get_model()->GetIndexCount() / 3; totalTriangles += obj->get_model()->GetIndexCount() / 3;
} }
} }
// Ajoutez le nombre de triangles pour les cubes
for (const auto& cube : cubes_vec_) for (const auto& cube : cubes_vec_)
{ {
if (cube) if (cube && cube->get_model())
{ {
totalTriangles += cube->get_model()->GetIndexCount() / 3; totalTriangles += cube->get_model()->GetIndexCount() / 3;
} }
} }
// Ajoutez le nombre de triangles pour le terrain
for (const auto& chunk : terrain_chunk_vec_) for (const auto& chunk : terrain_chunk_vec_)
{ {
if (chunk) if (chunk && chunk->get_model())
{ {
totalTriangles += chunk->get_model()->GetIndexCount() / 3; totalTriangles += chunk->get_model()->GetIndexCount() / 3;
} }
} }
return totalTriangles; return totalTriangles;
} }
int stats::get_visible_triangle_count() const int stats::get_visible_triangle_count() const
{ {
int visibleTriangles = 0; int visibleTriangles = 0;
// Utiliser le système ECS pour accéder aux entités avec des composants de rendu
if (app_ && app_->get_entity_manager())
{
auto entities = app_->get_entity_manager()->GetEntitiesWithComponent<ecs::RenderComponent>();
for (const auto& entity : entities)
{
auto renderComponent = entity->GetComponent<ecs::RenderComponent>();
if (renderComponent && renderComponent->GetModel() && renderComponent->IsVisible())
{
// Dans une topologie de liste de triangles, chaque triangle utilise 3 indices
visibleTriangles += renderComponent->GetModel()->GetIndexCount() / 3;
}
}
}
// Ajouter également les éventuels objets restants de l'ancien système
for (const auto& obj : object_vec_) for (const auto& obj : object_vec_)
{ {
if (obj && obj->IsVisible()) if (obj && obj->get_model() && obj->IsVisible())
{ {
visibleTriangles += obj->get_model()->GetIndexCount() / 3; visibleTriangles += obj->get_model()->GetIndexCount() / 3;
} }
} }
// Ajoutez le nombre de triangles visibles pour les cubes
for (const auto& cube : cubes_vec_) for (const auto& cube : cubes_vec_)
{ {
if (cube && cube->IsVisible()) if (cube && cube->get_model() && cube->IsVisible())
{ {
visibleTriangles += cube->get_model()->GetIndexCount() / 3; visibleTriangles += cube->get_model()->GetIndexCount() / 3;
} }
} }
// Ajoutez le nombre de triangles visibles pour le terrain
for (const auto& chunk : terrain_chunk_vec_) for (const auto& chunk : terrain_chunk_vec_)
{ {
if (chunk && chunk->IsVisible()) if (chunk && chunk->get_model() && chunk->IsVisible())
{ {
visibleTriangles += chunk->get_model()->GetIndexCount() / 3; visibleTriangles += chunk->get_model()->GetIndexCount() / 3;
} }
} }
return visibleTriangles; return visibleTriangles;
} }