Posodobitev trave (samo divja) in animacija rasti iz tal

This commit is contained in:
2026-01-31 09:22:18 +01:00
parent 67bfceaf0e
commit d7196eaa82

View File

@@ -8,17 +8,16 @@ export default class GrassSceneClean extends Phaser.Scene {
// --- ASSETS --- // --- ASSETS ---
// 1. Podlaga (Foundation) // 1. Podlaga (Foundation)
// this.load.image('ground_base', 'DEMO_FAZA1/Ground/tla_trava_tekstura.png'); // Removed by user this.load.image('ground_base', 'DEMO_FAZA1/Ground/ground_dirt_patch.png');
// 2. Vodni kanali (Water) - NEW CLEAN ASSET V7 (Aggressive Clean) // 2. Vodni kanali (Water) - NEW CLEAN ASSET V7 (Aggressive Clean)
this.load.image('stream_final_v7', 'DEMO_FAZA1/Environment/stream_final_v7.png'); this.load.image('stream_final_v7', 'DEMO_FAZA1/Environment/stream_final_v7.png');
// Removed extensions for now // Removed extensions for now
// 3. Foliage // 3. Foliage
this.load.image('grass_dense', 'DEMO_FAZA1/Vegetation/grass_cluster_dense.png'); // "Divja trava" - samo visoka trava
this.load.image('grass_tall', 'DEMO_FAZA1/Vegetation/visoka_trava.png'); this.load.image('grass_wild', 'DEMO_FAZA1/Vegetation/visoka_trava.png');
this.load.image('grass_v2', 'DEMO_FAZA1/Vegetation/visoka_trava_v2.png'); this.load.image('grass_wild_v2', 'DEMO_FAZA1/Vegetation/visoka_trava_v2.png');
this.load.image('grass_sop', 'DEMO_FAZA1/Vegetation/trava_sop.png');
// 4. Items & Charts // 4. Items & Charts
this.load.image('hay', 'DEMO_FAZA1/Items/hay_drop_0.png'); this.load.image('hay', 'DEMO_FAZA1/Items/hay_drop_0.png');
@@ -109,8 +108,13 @@ export default class GrassSceneClean extends Phaser.Scene {
// OPTIMIZATION: Instead of one massive 32000x32000 tileSprite which crashes WebGL, // OPTIMIZATION: Instead of one massive 32000x32000 tileSprite which crashes WebGL,
// we use a smaller one that follows the camera (Infinite Scroll technique). // we use a smaller one that follows the camera (Infinite Scroll technique).
// Removed ground_base tileSprite since texture is missing. // Size it to cover the screen even when zoomed out (0.5x zoom -> need 2x size)
// Using Background Color instead. const BG_W = this.scale.width * 2.5;
const BG_H = this.scale.height * 2.5;
this.ground = this.add.tileSprite(this.scale.width / 2, this.scale.height / 2, BG_W, BG_H, 'ground_base');
this.ground.setScrollFactor(0); // Sticks to camera
this.ground.setDepth(-100);
// Note: We need to update tilePosition in update() loop to match camera scroll! // Note: We need to update tilePosition in update() loop to match camera scroll!
@@ -177,43 +181,41 @@ export default class GrassSceneClean extends Phaser.Scene {
let x = (WORLD_W / 2) + (Math.random() * SPREAD * 2 - SPREAD); let x = (WORLD_W / 2) + (Math.random() * SPREAD * 2 - SPREAD);
let y = (WORLD_H / 2) + (Math.random() * SPREAD * 2 - SPREAD); let y = (WORLD_H / 2) + (Math.random() * SPREAD * 2 - SPREAD);
// Randomizacija z novimi tipi trave // Randomizacija - samo divja trava
let rand = Math.random(); let key = Math.random() > 0.5 ? 'grass_wild' : 'grass_wild_v2';
let key;
if (rand < 0.4) key = 'grass_dense';
else if (rand < 0.7) key = 'grass_tall';
else if (rand < 0.9) key = 'grass_v2';
else key = 'grass_sop';
// Ustvari travo in jo dodaj v grupo // Ustvari travo in jo dodaj v grupo
let grass = this.grassGroup.create(x, y, key); let grass = this.grassGroup.create(x, y, key);
// POMEMBNO: Origin spodaj na sredini, da raste iz tal!
grass.setOrigin(0.5, 1.0);
let targetScale = 0.5 + Math.random() * 0.5; let targetScale = 0.5 + Math.random() * 0.5;
grass.setScale(0); // Start at 0 for growth animation
// Začetno stanje: skrita v zemlji
grass.setScale(0);
grass.setAngle(Math.random() * 20 - 10); grass.setAngle(Math.random() * 20 - 10);
grass.setAlpha(0.8 + Math.random() * 0.2); grass.setAlpha(0.8 + Math.random() * 0.2);
grass.setDepth(y); // Y-sort
// Growth Tween // Growth Tween - "Dviganje iz zemlje"
this.tweens.add({ this.tweens.add({
targets: grass, targets: grass,
scaleX: targetScale, scaleX: targetScale,
scaleY: targetScale, scaleY: targetScale,
duration: 500 + Math.random() * 500, duration: 800 + Math.random() * 800, // Malo počasneje
delay: Math.random() * 1000, delay: Math.random() * 1500,
ease: 'Back.out' ease: 'Back.out', // Efekt "pop" ven
onComplete: () => {
// Ko zraste, lahko dodamo npr. wind effect (opcijsko)
}
}); });
// Physics body (circle for better feel) // Physics body (circle for better feel)
if (grass.body) { if (grass.body) {
grass.body.setCircle(grass.width / 4); grass.body.setCircle(grass.width / 4);
grass.body.setOffset(grass.width / 4, grass.height / 4); grass.body.setOffset(grass.width / 4, grass.height / 2); // Adjusted for bottom origin
}
if (key === 'grass_tall') {
grass.setOrigin(0.5, 0.9);
grass.setDepth(y);
} else {
grass.setDepth(y - 50);
} }
} }