feat: Implement minimum 5-pixel spacing for tree seed generation
This commit is contained in:
parent
170b8d0a85
commit
0b96238226
35
js/world.js
35
js/world.js
@ -177,7 +177,21 @@ function generateSpecialChunk(chunkData, chunkX, playerChunkX) {
|
||||
// Randomly spawn tree seeds on grass (reduced frequency)
|
||||
if (random() < 0.03) { // Reduced from 8% to 3% chance for a tree seed on grass
|
||||
const seedY = floorY - noiseHeight - 1; // Position above the grass
|
||||
if (seedY >= 0 && chunkData[(floorY - noiseHeight) * CHUNK_SIZE + x] === GRASS) {
|
||||
|
||||
// Check if there are any existing tree seeds within 5 pixels
|
||||
let hasSeedNearby = false;
|
||||
for (let checkY = Math.max(0, seedY - 5); checkY <= Math.min(CHUNK_SIZE - 1, seedY + 5); checkY++) {
|
||||
for (let checkX = Math.max(0, x - 5); checkX <= Math.min(CHUNK_SIZE - 1, x + 5); checkX++) {
|
||||
if (chunkData[checkY * CHUNK_SIZE + checkX] === TREE_SEED) {
|
||||
hasSeedNearby = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasSeedNearby) break;
|
||||
}
|
||||
|
||||
// Only place the seed if there are no other seeds nearby
|
||||
if (!hasSeedNearby && seedY >= 0 && chunkData[(floorY - noiseHeight) * CHUNK_SIZE + x] === GRASS) {
|
||||
chunkData[seedY * CHUNK_SIZE + x] = TREE_SEED;
|
||||
// Add metadata for the tree seed
|
||||
const seedMetadata = {
|
||||
@ -262,7 +276,9 @@ function generateSpecialChunk(chunkData, chunkX, playerChunkX) {
|
||||
}
|
||||
}
|
||||
|
||||
// Add additional tree seeds scattered throughout the terrain (with increased spacing and reduced chance)
|
||||
// Add additional tree seeds scattered throughout the terrain with minimum spacing
|
||||
const treePositions = []; // Track positions of placed tree seeds
|
||||
|
||||
for (let x = 0; x < CHUNK_SIZE; x += 15 + Math.floor(random() * 20)) { // Increased spacing from 5-15 to 15-35
|
||||
const height = heightMap[x];
|
||||
const surfaceY = floorY - height;
|
||||
@ -272,8 +288,21 @@ function generateSpecialChunk(chunkData, chunkX, playerChunkX) {
|
||||
// Reduced from 25% to 10% chance for a tree seed at each valid position
|
||||
if (random() < 0.1) {
|
||||
const seedY = surfaceY - 1; // Position above the grass
|
||||
if (seedY >= 0) {
|
||||
|
||||
// Check if this position is at least 5 pixels away from any existing tree seed
|
||||
let tooClose = false;
|
||||
for (const pos of treePositions) {
|
||||
const distance = Math.abs(x - pos.x) + Math.abs(seedY - pos.y); // Manhattan distance
|
||||
if (distance < 5) {
|
||||
tooClose = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Only place the seed if it's not too close to another seed
|
||||
if (!tooClose && seedY >= 0) {
|
||||
chunkData[seedY * CHUNK_SIZE + x] = TREE_SEED;
|
||||
treePositions.push({ x, y: seedY });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user