- NEW: Flat2DTerrainSystem.js (375 lines) - NEW: map2d_data.js procedural map (221 lines) - MODIFIED: GameScene async create, 2D terrain integration - MODIFIED: Player.js flat 2D positioning - MODIFIED: game.js disabled pixelArt for smooth rendering - FIXED: 15+ bugs (updateCulling, isometric conversions, grid lines) - ADDED: Phase 28 to TASKS.md - DOCS: DNEVNIK.md session summary Result: Working flat 2D game with Stardew Valley style! Time: 5.5 hours
6.6 KiB
6.6 KiB
🌊 2D WATER & PUDDLES - ENHANCEMENT PLAN
📋 CURRENT STATUS
✅ What's Already Implemented:
Water Animation:
- ✅ 4-frame water animation (
createWaterFrames()) - ✅ Animated waves and sparkles
- ✅ Frame cycling (250ms intervals)
- ✅ Gradient (dark blue → medium blue)
Puddles:
- ✅ Basic ellipse shape (weather system)
- ✅ Fade in/out
- ✅ Splash ripples (concentric circles)
- ✅ Auto cleanup after 30s
🎯 ENHANCEMENT IDEAS
1. Enhanced Water Animation
A. Flow Direction
// Add directional flow (left to right)
createFlowingWater() {
// Each frame shifts pattern slightly
// Creates illusion of water flowing
}
B. Reflection Effects
// Add shimmer/reflection overlay
createWaterReflection() {
// Semi-transparent white overlay
// Moves independently from water
// Creates depth illusion
}
C. Ripple Waves
// Add expanding circle ripples
createWaterRipples() {
// Periodic ripples from center
// Multiple overlapping waves
// Fades at edges
}
2. Better Puddles
A. Realistic Shape
// Instead of perfect ellipse
createRealisticPuddle() {
// Irregular organic shape
// Multiple smaller circles merged
// Natural-looking edges
}
B. Rain Impact Animation
// When raindrop hits puddle
onRainHit(puddleX, puddleY) {
// Small splash particle
// Ripple from impact point
// Temporary displacement wave
}
C. Reflection Layer
// Add sky/environment reflection
addPuddleReflection(puddle) {
// Light blue tint (sky)
// Subtle animation (clouds moving)
// Adds depth and realism
}
D. Evaporation
// Gradual shrinking over time
evaporatePuddle(puddle) {
// Scale reduces (puddle shrinks)
// Alpha fades
// Eventually disappears
}
🔧 IMPLEMENTATION PRIORITY
HIGH PRIORITY:
- ✅ Water animation (already done!)
- ⏳ Enhanced puddle shape (organic)
- ⏳ Rain impact on puddles
MEDIUM PRIORITY:
- ⏳ Water reflection overlay
- ⏳ Puddle reflections
- ⏳ Evaporation animation
LOW PRIORITY:
- ⏳ Directional water flow
- ⏳ Multiple ripple layers
- ⏳ Foam/bubble effects
💻 CODE SNIPPETS
Enhanced Puddle Creation:
createRealisticPuddle(x, y) {
const container = this.scene.add.container(x, y);
// Create organic shape (multiple circles)
const numCircles = Phaser.Math.Between(3, 6);
for (let i = 0; i < numCircles; i++) {
const offsetX = Phaser.Math.Between(-15, 15);
const offsetY = Phaser.Math.Between(-10, 10);
const radius = Phaser.Math.Between(10, 20);
const circle = this.scene.add.circle(
offsetX, offsetY, radius,
0x4488bb, 0.35
);
container.add(circle);
}
// Add reflection overlay (lighter blue)
const reflection = this.scene.add.ellipse(
0, -5, 30, 15,
0x88ccff, 0.2
);
container.add(reflection);
// Fade in
container.setAlpha(0);
this.scene.tweens.add({
targets: container,
alpha: 1,
duration: 2000
});
return container;
}
Rain Impact on Puddle:
addRainImpact(puddle) {
// Random splash position within puddle
const hitX = Phaser.Math.Between(-20, 20);
const hitY = Phaser.Math.Between(-15, 15);
// Create ripple
const ripple = this.scene.add.circle(
puddle.x + hitX,
puddle.y + hitY,
2, 0xffffff, 0.6
);
this.scene.tweens.add({
targets: ripple,
radius: 15,
alpha: 0,
duration: 600,
onComplete: () => ripple.destroy()
});
}
Water Reflection Overlay:
addWaterReflection(waterSprite) {
// Create shimmer overlay
const shimmer = this.scene.add.rectangle(
waterSprite.x,
waterSprite.y - 5,
48, 10,
0xffffff, 0.15
);
shimmer.setDepth(waterSprite.depth + 1);
// Animate shimmer movement
this.scene.tweens.add({
targets: shimmer,
x: waterSprite.x + 10,
alpha: { from: 0.15, to: 0.05 },
duration: 2000,
yoyo: true,
repeat: -1
});
}
🎮 USAGE
Current Water:
// Water already animates automatically!
// 4-frame cycle, 250ms per frame
// No user action needed
Enhanced Puddles (Proposed):
// In GameScene weather system
if (this.currentWeather === 'rain') {
// Spawn better puddle every 3s
this.puddleTimer = this.time.addEvent({
delay: 3000,
callback: () => {
const puddle = this.createRealisticPuddle(x, y);
// Add rain impact effects
this.time.addEvent({
delay: 1000,
callback: () => this.addRainImpact(puddle),
loop: true,
repeat: 10
});
},
loop: true
});
}
📊 PERFORMANCE NOTES
Current Performance:
- Water: ~50 water tiles visible (4 frames each) = Good ✅
- Puddles: Max 20 puddles = Good ✅
After Enhancements:
- Water Reflections: +50 shimmer overlays = Medium ⚠️
- Puddle Complexity: 5 circles each = Medium ⚠️
- Rain Impacts: Up to 100 ripples/sec = High ⚠️
Recommendation:
- Use object pooling for ripples
- Limit max puddles to 15
- Reduce ripple frequency if FPS drops
🎨 VISUAL COMPARISON
Current:
WATER:
[████] Frame 1
[▓▓▓▓] Frame 2 ← Animated!
[████] Frame 3
[▓▓▓▓] Frame 4
PUDDLES:
○○○ ← Simple ellipse
After Enhancement:
WATER:
[████✨] Frame 1 + Reflection
[▓▓▓▓✨] Frame 2 + Shimmer
[████✨] Frame 3 + Waves
[▓▓▓▓✨] Frame 4 + Flow
PUDDLES:
○ ○
○ ○ ○ ← Organic shape
○ ○ + Reflections
~~~ + Ripples
✅ NEXT STEPS
- Review current water - Check if enhancement needed
- Implement organic puddles - Better looking shapes
- Add rain impacts - Ripples when rain hits
- Test performance - Monitor FPS with many puddles
- Fine-tune - Adjust timings, sizes, opacity
📁 FILES TO MODIFY
src/systems/TerrainSystem.js- Water frames enhancementsrc/scenes/GameScene.js- Puddle system upgradesrc/ui/WeatherUI.js- Optional: puddle toggle
Status: 📋 Planning Phase
Current Water: ✅ Already Animated
Current Puddles: ✅ Basic Working
Next: User decision on enhancements