popravek zombijo
This commit is contained in:
@@ -1,71 +1,42 @@
|
||||
# Plan Optimizacij za NovaFarma
|
||||
# 🛠️ Plan Optimizacij in Čiščenja - NovaFarma
|
||||
|
||||
Cilj: Izboljšati delovanje igre na počasnejših računalnikih (low-end devices) in zagotoviti stabilnih 60 FPS.
|
||||
Datoteka namenjena tehničnim izboljšavam kode, refaktoringu in performančnim popravkom.
|
||||
|
||||
## 1. Rendering (Grafika)
|
||||
## 🟢 1. Opravljene Optimizacije (Completed)
|
||||
Stvari, ki so bile uspešno implementirane in izboljšale delovanje.
|
||||
|
||||
### A. Prehod na Phaser Tilemap ali Blitter (Visoka prioriteta)
|
||||
Trenutno `TerrainSystem` uporablja individualne `Phaser.GameObjects.Sprite` za vsako ploščico (tile) na tleh. Pri mapi 100x100 to pomeni 10.000 spritov, kar je veliko breme za CPU/GPU, tudi s cullingom.
|
||||
* **Rešitev:** Uporabiti `Phaser.Tilemaps` za izometrični pogled ali `Phaser.GameObjects.Blitter`. Blitter je izjemno hiter za renderiranje velikega števila enakih tekstur.
|
||||
* **Pričakovan prihranek:** Ogromen (CPU overhead za game objekte).
|
||||
s
|
||||
### B. Optimizacija Depth Sorting (Srednja prioriteta)
|
||||
Trenutno se globina (z-index) računa in nastavlja za vsak `Sprite` (igralec, NPC, tiles, decorations) pogosto vsak frame.
|
||||
* **Rešitev:**
|
||||
* Statične objekte (drevesa, kamni, tile) sortiraj samo enkrat ob generiranju ali ko pridejo v kader.
|
||||
* Dinamične objekte (igralec, NPC) sortiraj vsak frame, ampak samo glede na sosednje objekte.
|
||||
* Uporabi "Display Layers" (Containerje) za ločevanje tal in objektov, da se tla nikoli ne sortirajo proti igralcu (tla so vedno spodaj).
|
||||
- [x] **Distance Culling (Teren & Dekoracije)**
|
||||
- Sistem skriva ploščice (tiles) in drevesa, ki so daleč od igralca, da varčuje s CPU/GPU.
|
||||
- [x] **Pooling Sistem**
|
||||
- `TerrainSystem` uporablja bazen spritov (`decPool`, `tilePool`) za ponovno uporabo objektov namesto nenehnega uničevanja in ustvarjanja.
|
||||
- [x] **NPC Logic Throttling & Culling**
|
||||
- NPC-ji daleč od igralca se ne posodabljajo in so skriti.
|
||||
- AI se ne izvaja vsak frame (uporaba timerjev za premik).
|
||||
- [x] **Code Refactoring & Bug Fixes**
|
||||
- [x] `InteractionSystem.js`: Centralizirana logika za klike in tipkovnico (E tipka). Odstranjeni odvečni listenerji.
|
||||
- [x] `Player.js`: Urejena logika gibanja in napada (Spacebar).
|
||||
- [x] `NPC.js`: Dodan Health Bar, Taming logika in Loot Drop.
|
||||
- [x] `TextureGenerator`: Urejen draw items (Bone, Axe, Pickaxe).
|
||||
|
||||
### C. Zmanjšanje Draw Calls (Weather System)
|
||||
Sistem vremena trenutno uporablja `Graphics` objekt, kjer riše vsako kapljo posebej s `strokePath` v JS zanki.
|
||||
* **Rešitev:**
|
||||
* Uporaba **Shaderjev (GLSL)** za dež in meglo. To prestavi delo na GPU in je praktično "zastonj" za CPU.
|
||||
* Alternativa: Uporaba `Phaser.GameObjects.Particles` za dež.
|
||||
## 🟡 2. Odprte Tehnične Naloge (To-Do)
|
||||
Stvari, ki bi jih bilo dobro urediti za boljšo stabilnost.
|
||||
|
||||
## 2. Logika in Procesiranje
|
||||
- [ ] **Global Error Handling**
|
||||
- Ujeti napake, ki se zgodijo med igranjem (npr. manjkajoča metoda), in preprečiti sesutje igre (kot se je zgodilo z `handleDecorationClick`).
|
||||
- [ ] **Centraliziran Loot Manager**
|
||||
- Trenutno `InteractionSystem` upravlja z lootom. Bolje bi bilo imeti ločen `LootSystem` ali `ItemDropManager`, ki skrbi za fiziko dropov, pobiranje in despawn.
|
||||
- [ ] **Z-Sorting (Depth) Optimizacija**
|
||||
- Globina se še vedno nastavlja pogosto. Lahko bi optimizirali tako, da se statični objekti sortirajo samo enkrat.
|
||||
|
||||
### A. Izboljšan Culling (Visoka prioriteta)
|
||||
Trenutno `updateCulling` teče vsak frame (ali pogosto). Zanka gre čez vse tile (10.000) in preverja distance.
|
||||
* **Rešitev:**
|
||||
* **Spatial Hashing / Grid Partitioning:** Razdeli svet na "Chunke" (npr. 10x10 tileov). Renderiraj samo chunke, ki se dotikajo kamere.
|
||||
* Posodobi culling samo, ko se kamera premakne za določeno razdaljo (npr. 50px), ne vsak frame.
|
||||
## 🔴 3. Performančne Nadgradnje (High-End)
|
||||
Če bo igra postala počasna pri velikem svetu (256x256).
|
||||
|
||||
### B. Throttling AI in Posodobitev (Srednja prioriteta)
|
||||
NPC-ji se posodabljajo vsak frame (60-krat na sekundo).
|
||||
* **Rešitev:**
|
||||
* Posodabljaj logiko NPC-jev (iskanje poti, odločanje) samo vsakih 10-20 framov ali 100ms.
|
||||
* Animacije se še vedno vrtijo gladko, ampak "možgani" delajo počasneje.
|
||||
* Oddaljeni NPC-ji (izven ekrana) se sploh ne posodabljajo ali pa zelo redko.
|
||||
- [ ] **Phaser Blitter / Tilemap**
|
||||
- Trenutno je svet sestavljen iz tisočev spritov. Prehod na `Phaser.Blitter` ali `Tilemap` bi drastično zmanjšal porabo RAM-a in CPU-ja.
|
||||
- [ ] **Spatial Hashing za Kolizijo**
|
||||
- Namesto preverjanja razdalje do vsakega NPC-ja uporabiti prostorsko mrežo (Spatial Grid) za hitrejše iskanje sosedov.
|
||||
- [ ] **Web Workers za AI**
|
||||
- Prestavi pathfinding (iskanje poti) na ločen thread (Worker), da ne blokira glavne igre.
|
||||
|
||||
### C. Fizika
|
||||
Če uporabljamo Arcade Physics za vse kolizije, je lahko počasno.
|
||||
* **Rešitev:** Za statične objekte (drevesa, zidovi) uporabljaj preprosto preverjanje mreže (`grid[x][y].isSolid`), namesto da vsako drevo ustvari fizikalno telo.
|
||||
|
||||
## 3. Upravljanje Spomina (Memory)
|
||||
|
||||
### A. Object Pooling (Že delno implementirano)
|
||||
Zagotoviti, da se za VSE pogoste objekte uporablja pool:
|
||||
* Projektili (če bodo).
|
||||
* Partikli.
|
||||
* UI elementi (floating text damage).
|
||||
* Inventory icons.
|
||||
|
||||
### B. Texture Management
|
||||
* Zagotoviti, da so vse teksture v **Sprite Atlasu** (Texture Atlas) za zmanjšanje "Texture Swaps" na GPU.
|
||||
* Unloadati asete, ki niso v uporabi (npr. med prehodi scen, čeprav za to igro verjetno ni kritično).
|
||||
|
||||
## 4. Settings (Nastavitve za uporabnika)
|
||||
|
||||
Dodati meni "Settings", kjer lahko uporabnik izbere:
|
||||
* **View Distance:** Koliko tile-ov daleč se renderira.
|
||||
* **Weather Effects:** On/Off/Simple (brez delcev).
|
||||
* **Shadows:** On/Off.
|
||||
* **Particles:** High/Low.
|
||||
|
||||
## Akcijski Plan (Koraki)
|
||||
|
||||
1. **Korak 1 (Takoj):** [DONE] Implementiraj "Throttling" za `updateCulling`.
|
||||
2. **Korak 2:** [DONE] Prepiši `WeatherSystem` za uporabo Phaser Particles.
|
||||
3. **Korak 3:** [DONE] Implementiraj "Throttling" in Distance Culling za NPC AI.
|
||||
4. **Korak 4:** [DONE] Implementacija `Phaser.Blitter` za teren (Faza 4 fix).
|
||||
5. **Korak 5:** [DONE] Povezava Settings z Weather in Terrain sistemi.
|
||||
---
|
||||
*Status: Koda je trenutno stabilna in očiščena (7.12.2025).*
|
||||
|
||||
Reference in New Issue
Block a user