Fixed iteration finish code

This commit is contained in:
2024-12-17 14:50:37 +03:00
parent 6f2ab0105d
commit 2f8031fa8e
4 changed files with 21 additions and 22 deletions

View File

@@ -473,22 +473,14 @@ void grow_job_queue::iterate()
{ {
assert(grid_e.is_valid()); assert(grid_e.is_valid());
assert(this); assert(this);
/* once for each grid floor */
flecs::query<growth_regions> q = flecs::query<growth_regions> q =
grid_e.world().query_builder<growth_regions>().build(); grid_e.world().query_builder<growth_regions>().build();
#if 0
flecs::query<region_tree> qm =
grid_e.world().query_builder<region_tree>().build();
#endif
q.each([this](flecs::entity e, growth_regions &g) { q.each([this](flecs::entity e, growth_regions &g) {
flecs::log::warn("pre floor: %s", e.path().c_str()); flecs::log::warn("pre floor: %s", e.path().c_str());
}); });
#if 0
qm.each([this](flecs::entity em, region_tree &rt) {
rt.dump(em);
assert(rt.check(em));
});
#endif
q.each([this](flecs::entity e, growth_regions &g) { q.each([this](flecs::entity e, growth_regions &g) {
struct region_tree *rtree = e.get_mut<region_tree>();
flecs::log::warn("floor: %s", e.path().c_str()); flecs::log::warn("floor: %s", e.path().c_str());
flecs::log::warn("job count: %d", g.job_list.size()); flecs::log::warn("job count: %d", g.job_list.size());
while (!g.job_list.empty()) { while (!g.job_list.empty()) {
@@ -544,17 +536,17 @@ void grow_job_queue::iterate()
flecs::log::dbg( flecs::log::dbg(
"processed jobs (created region initial positions): %d", "processed jobs (created region initial positions): %d",
g.job_list.size()); g.job_list.size());
assert(rtree->check(e));
rtree->shrink_rooms(e);
rtree->place(e);
e.modified<region_tree>();
g.job_list.clear(); g.job_list.clear();
flecs::query<region_tree> qm =
grid_e.world().query_builder<region_tree>().build();
qm.each([this](flecs::entity em, region_tree &rt) {
assert(rt.check(em));
});
qm.each([this](flecs::entity em, region_tree &rt) {
rt.shrink_rooms(em);
});
qm.each([this](flecs::entity em, region_tree &rt) {
rt.place(em);
});
}); });
} }
void grow_job_queue::finalize()
{
flecs::query<growth_regions> q =
grid_e.world().query_builder<growth_regions>().build();
q.each([this](flecs::entity e, growth_regions &g) {});
}

View File

@@ -20,6 +20,7 @@ struct grow_job_queue {
const WorldEditor::components::buildings_layout_grid_size &size, const WorldEditor::components::buildings_layout_grid_size &size,
const String &module_name); const String &module_name);
void iterate(); void iterate();
void finalize();
void job_initial(struct grow_job *job); void job_initial(struct grow_job *job);
void job_common(struct grow_job *job); void job_common(struct grow_job *job);
void commit_common_queue(); void commit_common_queue();

View File

@@ -9,6 +9,7 @@
growth_module::growth_module(flecs::world &ecs) growth_module::growth_module(flecs::world &ecs)
{ {
grow_count = 0;
ecs.module<growth_module>(); ecs.module<growth_module>();
ecs.component<growth_regions>(); ecs.component<growth_regions>();
ecs.component<region_tree>(); ecs.component<region_tree>();
@@ -44,7 +45,9 @@ growth_module::growth_module(flecs::world &ecs)
.write<growth_regions>() .write<growth_regions>()
.kind(GraphSolve) .kind(GraphSolve)
.run([module_name, this, GraphFilter](flecs::iter &it) { .run([module_name, this, GraphFilter](flecs::iter &it) {
flecs::log::dbg("RunGrow");
flecs::world &&ecs_ = it.world(); flecs::world &&ecs_ = it.world();
assert(grow_count == 0);
it.world().defer_suspend(); it.world().defer_suspend();
flecs::log::dbg("Assembling skeleton done..."); flecs::log::dbg("Assembling skeleton done...");
flecs::entity GraphSolveZones = it.world().lookup( flecs::entity GraphSolveZones = it.world().lookup(
@@ -89,6 +92,7 @@ growth_module::growth_module(flecs::world &ecs)
grid_e, subregions, size, grid_e, subregions, size,
module_name); module_name);
job_queue.iterate(); job_queue.iterate();
job_queue.finalize();
}); });
commit_growth_queue(it.world()); commit_growth_queue(it.world());
mark_cells(it.world()); mark_cells(it.world());
@@ -97,6 +101,7 @@ growth_module::growth_module(flecs::world &ecs)
.lookup("::growth_module::GraphFilter") .lookup("::growth_module::GraphFilter")
.disable(); .disable();
it.world().defer_resume(); it.world().defer_resume();
grow_count++;
}); });
} }

View File

@@ -4,6 +4,7 @@
#include "base_data.h" #include "base_data.h"
struct growth_module { struct growth_module {
int grow_count;
void grow_cell(flecs::entity seed_e, int id); void grow_cell(flecs::entity seed_e, int id);
void commit_growth_queue(flecs::world &&world); void commit_growth_queue(flecs::world &&world);
void mark_cells(flecs::world &&ecs_); void mark_cells(flecs::world &&ecs_);