rendom
This commit is contained in:
@@ -305,14 +305,73 @@ class TerrainSystem {
|
||||
}
|
||||
}
|
||||
|
||||
// DECORATIONS REMOVED BY REQUEST
|
||||
// Drevesa, kamni, rože in ruševine so odstranjeni.
|
||||
// DECORATIONS - Enhanced World Details
|
||||
console.log('🌸 Adding enhanced decorations...');
|
||||
|
||||
// Ostalo je samo generiranje ploščic (tiles) in fixnih con (farm, city floor).
|
||||
// Natural Path Stones (along roads and random areas)
|
||||
let pathStoneCount = 0;
|
||||
for (let i = 0; i < 50; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
this.addDecoration(pos.x, pos.y, 'path_stone');
|
||||
pathStoneCount++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ Teren generiran (CLEAN): ${treeCount} dreves, ${rockCount} kamnov.`);
|
||||
// Small decorative rocks
|
||||
let smallRockCount = 0;
|
||||
for (let i = 0; i < 80; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
const rockType = Math.random() > 0.5 ? 'small_rock_1' : 'small_rock_2';
|
||||
this.addDecoration(pos.x, pos.y, rockType);
|
||||
smallRockCount++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ Teren generiran: ${treeCount} dreves, ${rockCount} kamnov.`);
|
||||
// Flower clusters
|
||||
flowerCount = 0;
|
||||
for (let i = 0; i < 100; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
const flowers = ['flower_red', 'flower_yellow', 'flower_blue'];
|
||||
const flowerType = flowers[Math.floor(Math.random() * flowers.length)];
|
||||
this.addDecoration(pos.x, pos.y, flowerType);
|
||||
flowerCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Mushrooms (spooky atmosphere)
|
||||
let mushroomCount = 0;
|
||||
for (let i = 0; i < 60; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
const mushroomType = Math.random() > 0.5 ? 'mushroom_red' : 'mushroom_brown';
|
||||
this.addDecoration(pos.x, pos.y, mushroomType);
|
||||
mushroomCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallen Logs (forest debris)
|
||||
let logCount = 0;
|
||||
for (let i = 0; i < 25; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
this.addDecoration(pos.x, pos.y, 'fallen_log');
|
||||
logCount++;
|
||||
}
|
||||
}
|
||||
|
||||
// Puddles (will appear during rain)
|
||||
this.puddlePositions = [];
|
||||
for (let i = 0; i < 40; i++) {
|
||||
const pos = validPositions[Math.floor(Math.random() * validPositions.length)];
|
||||
if (pos && !this.decorationsMap.has(`${pos.x},${pos.y}`)) {
|
||||
this.puddlePositions.push({ x: pos.x, y: pos.y });
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`✅ Decorations: ${pathStoneCount} paths, ${smallRockCount} rocks, ${flowerCount} flowers, ${mushroomCount} mushrooms, ${logCount} logs.`);
|
||||
}
|
||||
|
||||
damageDecoration(x, y, amount) {
|
||||
@@ -534,7 +593,16 @@ class TerrainSystem {
|
||||
|
||||
// Determine if decoration is SOLID (blocking movement)
|
||||
const typeLower = type.toLowerCase();
|
||||
const isSolid = typeLower.includes('tree') ||
|
||||
|
||||
// Small decorations are NOT solid (can walk through)
|
||||
const isSmallDecor = typeLower.includes('flower') ||
|
||||
typeLower.includes('small_rock') ||
|
||||
typeLower.includes('path_stone') ||
|
||||
typeLower.includes('mushroom') ||
|
||||
typeLower.includes('puddle');
|
||||
|
||||
const isSolid = !isSmallDecor && (
|
||||
typeLower.includes('tree') ||
|
||||
typeLower.includes('sapling') ||
|
||||
typeLower.includes('rock') ||
|
||||
typeLower.includes('stone') ||
|
||||
@@ -548,7 +616,9 @@ class TerrainSystem {
|
||||
typeLower.includes('arena') ||
|
||||
typeLower.includes('house') ||
|
||||
typeLower.includes('gravestone') ||
|
||||
typeLower.includes('bush');
|
||||
typeLower.includes('bush') ||
|
||||
typeLower.includes('fallen_log')
|
||||
);
|
||||
|
||||
const decorData = {
|
||||
gridX: gridX,
|
||||
@@ -655,7 +725,22 @@ class TerrainSystem {
|
||||
neededTileKeys.add(key);
|
||||
if (!this.visibleTiles.has(key)) {
|
||||
const sprite = this.tilePool.get();
|
||||
sprite.setTexture(tile.type);
|
||||
|
||||
// Use water texture with animation support
|
||||
if (tile.type === 'water') {
|
||||
// Check if water frames exist
|
||||
if (this.scene.textures.exists('water_frame_0')) {
|
||||
sprite.setTexture('water_frame_0');
|
||||
// Mark sprite for animation
|
||||
sprite.isWater = true;
|
||||
sprite.waterFrame = 0;
|
||||
} else {
|
||||
sprite.setTexture('water');
|
||||
}
|
||||
} else {
|
||||
sprite.setTexture(tile.type);
|
||||
}
|
||||
|
||||
const screenPos = this.iso.toScreen(x, y);
|
||||
sprite.setPosition(Math.round(screenPos.x + this.offsetX), Math.round(screenPos.y + this.offsetY));
|
||||
sprite.setDepth(this.iso.getDepth(x, y, this.iso.LAYER_FLOOR)); // Tiles = Floor
|
||||
@@ -751,6 +836,20 @@ class TerrainSystem {
|
||||
}
|
||||
|
||||
update(delta) {
|
||||
// Water animation (250ms per frame = 4 FPS)
|
||||
this.waterAnimTimer = (this.waterAnimTimer || 0) + delta;
|
||||
if (this.waterAnimTimer > 250) {
|
||||
this.waterAnimTimer = 0;
|
||||
this.waterCurrentFrame = ((this.waterCurrentFrame || 0) + 1) % 4;
|
||||
|
||||
// Update all water tiles
|
||||
for (const [key, sprite] of this.visibleTiles) {
|
||||
if (sprite.isWater) {
|
||||
sprite.setTexture(`water_frame_${this.waterCurrentFrame}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.growthTimer = (this.growthTimer || 0) + delta;
|
||||
if (this.growthTimer < 5000) return;
|
||||
this.growthTimer = 0;
|
||||
|
||||
Reference in New Issue
Block a user