mirror of
https://github.com/Azgaar/Fantasy-Map-Generator.git
synced 2025-12-18 10:01:23 +01:00
more porting work
This commit is contained in:
parent
37391c8e8b
commit
7f31969f50
38 changed files with 3673 additions and 463 deletions
52
procedural/docs/findGridCell.md
Normal file
52
procedural/docs/findGridCell.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
Looking more carefully at the code flow:
|
||||
|
||||
1. findGridCell vs Voronoi Cell Indices
|
||||
|
||||
The key insight is that findGridCell in graphUtils.js:100-105 is used for coordinate-to-grid mapping, but the
|
||||
actual iteration in heightmap-generator.js happens over different indices.
|
||||
|
||||
2. Actual Iteration Patterns
|
||||
|
||||
In heightmap-generator.js, the problematic iterations are:
|
||||
|
||||
- Line 165: for (const c of grid.cells.c[q]) - but q comes from queue.shift() where queue starts with [start]
|
||||
- Line 209: grid.cells.c[q].forEach(...) - same pattern
|
||||
- Line 268: grid.cells.c[cur].forEach(...) - cur is tracked through valid cell traversal
|
||||
- Line 516: grid.cells.c[i].forEach(...) - i is the map index over heights
|
||||
|
||||
3. The Critical Constraint
|
||||
|
||||
Looking at voronoi.js:22-27, cells.c[p] is only populated when:
|
||||
if (p < this.pointsN && !this.cells.c[p]) {
|
||||
// populate cells.c[p]
|
||||
}
|
||||
|
||||
4. Why No Errors Occur
|
||||
|
||||
The code works because:
|
||||
|
||||
1. heights array length matches valid cells: In the original ../modules/heightmap-generator.js:11, heights is created with length:
|
||||
points.length, which equals pointsN
|
||||
```javascript
|
||||
const setGraph = graph => {
|
||||
const {cellsDesired, cells, points} = graph;
|
||||
heights = cells.h ? Uint8Array.from(cells.h) : createTypedArray({maxValue: 100, length: points.length});
|
||||
blobPower = getBlobPower(cellsDesired);
|
||||
linePower = getLinePower(cellsDesired);
|
||||
grid = graph;
|
||||
};
|
||||
```
|
||||
1. Queue propagation stays within bounds: When iterating grid.cells.c[q], the q values come from:
|
||||
- Initial valid starting points from findGridCell
|
||||
- Subsequent values from grid.cells.c[previous_q] which only contains valid adjacent cell indices
|
||||
2. Voronoi adjacency constraint: The cells.c[p] arrays only contain indices of valid neighboring cells (<
|
||||
pointsN), so the iteration naturally stays within the populated sparse array bounds
|
||||
3. Map iteration bounds: In line 468's heights.map((h, i) => ...), i ranges from 0 to heights.length-1, which
|
||||
equals pointsN-1, so grid.cells.c[i] is always within the populated range.
|
||||
|
||||
The sparse array works because the algorithm's traversal patterns are naturally constrained to only access
|
||||
indices that were populated during Voronoi construction.
|
||||
|
||||
## TASKS
|
||||
|
||||
1. analyze ../modules heightmap-generator.js and src/engine/modules/heightmap-generator.js to determine why the logic has deviated. Produce docs/HEIGHTMAP_ASSESSMENT.md with findings and recommendations
|
||||
Loading…
Add table
Add a link
Reference in a new issue