diff --git a/src/modules/stream/ui/building_layout_graph.h b/src/modules/stream/ui/building_layout_graph.h index 1ca8997..8fc49b2 100644 --- a/src/modules/stream/ui/building_layout_graph.h +++ b/src/modules/stream/ui/building_layout_graph.h @@ -50,8 +50,6 @@ public: flecs::entity get_layout_grid_base(); flecs::entity get_layout_base(); - flecs::entity create_cell(flecs::entity floor_e, - flecs::entity region_e, int id); bool have_cell(flecs::entity floor_e, int id); void grow_cell(flecs::entity seed_e, int id); void queue_grow_cell(flecs::entity seed_e, int id); diff --git a/src/modules/stream/ui/graph_module.cpp b/src/modules/stream/ui/graph_module.cpp index aae752d..1d28810 100644 --- a/src/modules/stream/ui/graph_module.cpp +++ b/src/modules/stream/ui/graph_module.cpp @@ -177,33 +177,6 @@ flecs::entity BuildingLayoutGraph::graph_module::get_layout_base() } } -flecs::entity -BuildingLayoutGraph::graph_module::create_cell(flecs::entity floor_e, - flecs::entity region_e, int id) -{ - flecs::entity ret; - if (floor_e.get() - ->cells.has(id)) { - flecs::log::err("cell %d already exists", id); - return ret; - } - String pname("cell_" + itos(id)); - flecs::entity cell_e = floor_e.lookup(pname.ascii().ptr()); - assert(!cell_e.is_valid()); - cell_e = floor_e.world().entity(pname.ascii().ptr()).child_of(floor_e); - floor_e.get_mut() - ->cells.insert(id); - floor_e.get_mut() - ->size_left--; - floor_e.modified(); - if (cell_e.is_valid()) { - cell_e.set( - { String(region_e.name()), id }); - cell_e.add(region_e); - } - return cell_e; -} - bool BuildingLayoutGraph::graph_module::have_cell(flecs::entity floor_e, int id) { if (floor_e.get() @@ -313,6 +286,31 @@ void growth_regions::create_region(flecs::entity floor_e, flecs::entity seed_e, region_e.path().c_str()); } } +flecs::entity growth_regions::create_cell(flecs::entity floor_e, + flecs::entity region_e, int id) +{ + flecs::entity ret; + if (floor_e.get() + ->cells.has(id)) { + flecs::log::err("cell %d already exists", id); + return ret; + } + String pname("cell_" + itos(id)); + flecs::entity cell_e = floor_e.lookup(pname.ascii().ptr()); + assert(!cell_e.is_valid()); + cell_e = floor_e.world().entity(pname.ascii().ptr()).child_of(floor_e); + floor_e.get_mut() + ->cells.insert(id); + floor_e.get_mut() + ->size_left--; + floor_e.modified(); + if (cell_e.is_valid()) { + cell_e.set( + { String(region_e.name()), id }); + cell_e.add(region_e); + } + return cell_e; +} bool BuildingLayoutGraph::graph_module::check_region(flecs::entity floor_e, int index, const Rect2i &rect) const diff --git a/src/modules/stream/ui/graph_module.h b/src/modules/stream/ui/graph_module.h index d9eda53..b59018c 100644 --- a/src/modules/stream/ui/graph_module.h +++ b/src/modules/stream/ui/graph_module.h @@ -64,6 +64,8 @@ struct growth_regions { void create_region(flecs::entity floor_e, flecs::entity seed_e, flecs::entity region_e, const Vector2i &position, float area); + flecs::entity create_cell(flecs::entity floor_e, flecs::entity region_e, + int id); }; struct make_random { diff --git a/src/modules/stream/ui/graph_module_growth.cpp b/src/modules/stream/ui/graph_module_growth.cpp index dc86f44..a655d63 100644 --- a/src/modules/stream/ui/graph_module_growth.cpp +++ b/src/modules/stream/ui/graph_module_growth.cpp @@ -108,60 +108,35 @@ struct grid_misc { out: return result; } - struct region_desc { - flecs::entity region_e; - int cell_id; - Vector2i position; - float area; - template - void create_region(T *obj, flecs::entity grid_floor_e) - { - flecs::entity cell_e = obj->create_cell( - grid_floor_e, region_e, cell_id); - growth_regions *g = - grid_floor_e.get_mut(); - g->create_region(grid_floor_e, cell_e, region_e, - position, area); - flecs::log::warn("grid cell: %s", - cell_e.path().c_str()); - } - }; - Vector regions; - void setup_floor(flecs::entity grid_floor_e, int grid_size, - BuildingLayoutGraph::graph_module *obj) + void place_regions(flecs::entity grid_floor_e) { int i; - assert(grid_floor_e.is_valid()); + int grid_size = + grid_floor_e + .get() + ->grid_size; flecs::entity grid_e = grid_floor_e.parent(); assert(grid_e.is_valid()); - flecs::log::dbg("grid: %s", grid_e.path().c_str()); - flecs::log::warn("grid floor: %s", grid_floor_e.path().c_str()); - assert(check_duplicates()); - int region_count = 0; - regions.resize(positions.size()); + growth_regions *g = grid_floor_e.get_mut(); for (i = 0; i < (int)positions.size(); i++) { int cell_id = positions[i].second.x + grid_size * positions[i].second.y; flecs::entity region_e = grid_e.world().entity(positions[i].first); assert(region_e.is_valid()); - float area = get_entity_area(region_e); Rect2i check; check.position = positions[i].second; check.size = Vector2i(1, 1); - assert(obj->check_region(grid_floor_e, -1, check)); - regions.write[region_count++] = { region_e, cell_id, - positions[i].second, - area }; + assert(g->check_region(-1, check)); + flecs::entity cell_e = + g->create_cell(grid_floor_e, region_e, cell_id); + float area = get_entity_area(region_e); + g->create_region(grid_floor_e, cell_e, region_e, + positions[i].second, area); + flecs::log::warn("grid cell: %s", + cell_e.path().c_str()); } - regions.resize(region_count); - } - void place_regions(flecs::entity grid_floor_e, - BuildingLayoutGraph::graph_module *obj) - { - int i; - for (i = 0; i < regions.size(); i++) - regions.write[i].create_region(obj, grid_floor_e); } float get_entity_area(flecs::entity e) const { @@ -665,9 +640,7 @@ void BuildingLayoutGraph::graph_module::growth_module(flecs::world &ecs, base_floor_e); create_floor_components(grid_floor_e, base_floor_e, size); - grid.setup_floor(grid_floor_e, size.grid_size, - this); - grid.place_regions(grid_floor_e, this); + grid.place_regions(grid_floor_e); me = me->next(); }