farma updejt
This commit is contained in:
46
OPEN_WORLD_PLAN.md
Normal file
46
OPEN_WORLD_PLAN.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# 🌍 Open World Strategy Plan
|
||||
*Roadmap za prehod iz statične mape v neskončen odprt svet (za razliko od Stardew Valley con).*
|
||||
|
||||
## 1. Konceptualna Razlika
|
||||
- **Stardew Valley:** Ima ločene "sobe" (Farm, Town, Beach). Ko greš čez rob, se naloži nova mapa (Loading Screen).
|
||||
- **NovaFarma (Cilj):** **Seamless Open World**. Brez nalaganja. Igralec hodi v katerokoli smer in svet se generira sproti.
|
||||
|
||||
## 2. Tehnični Izziv: Chunk System (Koščki Sveta)
|
||||
Ker računalnik ne more hraniti neskončne mape v spominu, moramo svet razdeliti na **Chunke** (npr. 16x16 ploščic).
|
||||
|
||||
### 📐 Arhitektura
|
||||
1. **Chunk Manager (`WorldSystem.js`):**
|
||||
- Spremlja pozicijo igralca (npr. Chunk X: 5, Y: 10).
|
||||
- **Active Window:** Naloži samo 9 chunkov okoli igralca (Center + 8 sosedov).
|
||||
- **Generation:** Če chunk še ne obstaja, ga generira s Perlin Noise funkcijo (deterministično - isti seed = isti svet).
|
||||
- **Unloading:** Chunke, ki so daleč stran, odstrani iz spomina (vendar shrani spremembe!).
|
||||
|
||||
2. **Perzistenca (Shranjevanje):**
|
||||
- Težava: Če posekam drevo v Chunku (100, 100) in grem stran, ter se vrnem, mora biti drevo še vedno podrto.
|
||||
- Rešitev: `Delta Compression`. Ne shranjujemo celega chunka, ampak samo **razlike** (npr. `{ "100,100": { removedDecor: true } }`).
|
||||
|
||||
## 3. Generacija Sveta (Biomi)
|
||||
Za razliko od trenutne 100x100 mape, mora Open World imeti strukturo na velikem nivoju.
|
||||
|
||||
### 🌡️ Biome Map (Noise Layer 2)
|
||||
Uporabimo drugi Perlin Noise z zelo nizko frekvenco (velik zoom) za določanje biomov/temperature.
|
||||
- **Noise < 0.3:** ❄️ Snow Biome (Zalejeno, Jelke)
|
||||
- **Noise 0.3 - 0.7:** 🌲 Temperate (Trava, Hrast - trenutni stil)
|
||||
- **Noise > 0.7:** 🌵 Desert (Pesek, Kaktusi)
|
||||
|
||||
## 4. Implementacijskih Koraki
|
||||
|
||||
### Faza 1: Refactor TerrainSystem na Chunke
|
||||
- Namesto `this.tiles[100][100]`, uporabimo `this.chunks = Map<string, ChunkData>`.
|
||||
- `getTile(x, y)` mora preračunati: `chunkX = floor(x/16)`, `localX = x % 16`.
|
||||
|
||||
### Faza 2: Dynamic Loading
|
||||
- V `update()` zanki preverjamo ali je igralec prečkal mejo chunka.
|
||||
- Če da → sproži nalaganje novih sosedov.
|
||||
|
||||
### Faza 3: "Infinite" Koordinatni Sistem
|
||||
- Ker JS nima težav z velikimi števili do 9 kintilijonov, `Floating Origin` verjetno še ni nujen, dokler ne gremo ekstremno daleč.
|
||||
|
||||
---
|
||||
**Zaključek:**
|
||||
To je velik tehnični preskok. Trenutna `100x100` mapa je "en velik chunk". Prvi korak je razbitje te logike na manjše enote.
|
||||
Reference in New Issue
Block a user