refactor: update shoreline calculation and improve type imports in PackedGraph

This commit is contained in:
Marc Emmanuel 2026-01-25 19:35:48 +01:00
parent 3ed3d0dbd8
commit 85a9f4b948
3 changed files with 11 additions and 7 deletions

View file

@ -1,4 +1,4 @@
import { clipPoly, connectVertices, createTypedArray, distanceSquared, isLand, isWater, rn, TYPED_ARRAY_MAX_VALUES,unique } from "../utils"; import { clipPoly, connectVertices, createTypedArray, distanceSquared, isLand, isWater, rn, TYPED_ARRAY_MAX_VALUES, unique } from "../utils";
import Alea from "alea"; import Alea from "alea";
import { polygonArea } from "d3"; import { polygonArea } from "d3";
@ -194,7 +194,12 @@ class FeatureModule {
if (type === "lake") { if (type === "lake") {
if (area > 0) feature.vertices = (feature.vertices as number[]).reverse(); if (area > 0) feature.vertices = (feature.vertices as number[]).reverse();
feature.shoreline = unique((feature.vertices as number[]).map(vertex => vertices.c[vertex].filter((index: number) => isLand(index, pack))).flat() || []); feature.shoreline = unique(
(feature.vertices as number[])
.flatMap(
vertexIndex => vertices.c[vertexIndex].filter((index) => isLand(index, pack))
)
);
feature.height = Lakes.getHeight(feature as PackedGraphFeature); feature.height = Lakes.getHeight(feature as PackedGraphFeature);
} }
@ -228,7 +233,6 @@ class FeatureModule {
while (queue.length) { while (queue.length) {
const cellId = queue.pop() as number; const cellId = queue.pop() as number;
if (borderCells[cellId]) border = true; if (borderCells[cellId]) border = true;
if (!border && borderCells[cellId]) border = true;
for (const neighborId of neighbors[cellId]) { for (const neighborId of neighbors[cellId]) {
const isNeibLand = isLand(neighborId, pack); const isNeibLand = isLand(neighborId, pack);

View file

@ -1,5 +1,5 @@
import { PackedGraphFeature } from "../modules/features"; import type { PackedGraphFeature } from "../modules/features";
import { River } from "../modules/river-generator"; import type { River } from "../modules/river-generator";
type TypedArray = Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Float32Array | Float64Array; type TypedArray = Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Float32Array | Float64Array;
@ -25,7 +25,7 @@ export interface PackedGraph {
}; };
vertices: { vertices: {
i: number[]; // vertex indices i: number[]; // vertex indices
c: number[][]; // neighboring cells c: [number, number, number][]; // neighboring cells
v: number[][]; // neighboring vertices v: number[][]; // neighboring vertices
x: number[]; // x coordinates x: number[]; // x coordinates
y: number[]; // y coordinates y: number[]; // y coordinates

View file

@ -44,7 +44,7 @@ declare global {
} }
interface Array<T> { interface Array<T> {
flat(depth?: number): T; flat(depth?: number): T[];
at(index: number): T | undefined; at(index: number): T | undefined;
} }