Change tilemap to dimension and simple generation

This commit is contained in:
2026-03-06 15:46:42 -03:00
parent 0f3f8de735
commit e5d2a3e7e2
20 changed files with 137 additions and 186 deletions
+47
View File
@@ -0,0 +1,47 @@
import { Alea, create_noise_2d } from "@paulaboks/rng";
import { Dimension } from "./components/dimension.ts";
export function generate(dimension: Dimension, width: number, height: number, seed = "seed") {
const height_noise = create_noise_2d(new Alea(seed + "_height"));
const tree_noise = create_noise_2d(new Alea(seed + "_trees"));
const scale = 0.05;
for (let y = 0; y < height; y++) {
for (let x = 0; x < width; x++) {
// multi-octave terrain
const nx = x * scale;
const ny = y * scale;
let h = height_noise(nx, ny) * 1 + height_noise(nx * 2, ny * 2) * 0.5 + height_noise(nx * 4, ny * 4) * 0.25;
h /= 1.75; // normalize
let id = "bworld:grass";
if (h < -0.25) {
id = "bworld:water";
} else if (h < -0.15) {
id = "bworld:sand";
} else {
id = "bworld:grass";
}
dimension.tiles.push({ x, y, id });
// tree placement
if (id === "bworld:grass") {
const t = tree_noise(x * 0.12, y * 0.12);
if (t > 0.65) {
dimension.tiles.push({
x,
y,
id: "bworld:tree",
});
}
}
}
}
}