This commit is contained in:
2025-12-12 02:41:00 +01:00
parent e15b429e75
commit 84b07bb433
13 changed files with 1917 additions and 76 deletions

View File

@@ -0,0 +1,243 @@
# 🏗️ VODNIK ZA POSTAVITEV OGRAJ
## Pregled
BuildSystem zdaj podpira **ročno postavitev ograj** na natančne koordinate brez potrebe po načinu gradnje (Build Mode) ali porabi virov.
---
## 📋 Razpoložljive Metode
### 1. `placeSingleFence(tileX, tileY, fenceType, consumeResources)`
Postavi eno samo ograjo na natančno koordinato.
**Parametri:**
- `tileX` (number): X koordinata ploščice (0-99)
- `tileY` (number): Y koordinata ploščice (0-99)
- `fenceType` (string): Tip ograje (privzeto: `'fence_horizontal'`)
- `consumeResources` (boolean): Ali naj porabi vire (privzeto: `false`)
**Vrne:** `boolean` - `true` če je bila ograja uspešno postavljena
**Primer:**
```javascript
// Postavi vodoravno ograjo na (50, 30) brez porabe virov
this.buildSystem.placeSingleFence(50, 30, 'fence_horizontal', false);
// Postavi steber na (60, 40) z porabo virov
this.buildSystem.placeSingleFence(60, 40, 'fence_post', true);
```
---
### 2. `placeFenceLine(startX, startY, endX, endY, fenceType, consumeResources)`
Postavi linijo ograj med dvema točkama (uporablja Bresenhamov algoritem).
**Parametri:**
- `startX` (number): Začetna X koordinata
- `startY` (number): Začetna Y koordinata
- `endX` (number): Končna X koordinata
- `endY` (number): Končna Y koordinata
- `fenceType` (string): Tip ograje (privzeto: `'fence_horizontal'`)
- `consumeResources` (boolean): Ali naj porabi vire (privzeto: `false`)
**Primer:**
```javascript
// Postavi diagonalno linijo ograj od (10, 10) do (20, 20)
this.buildSystem.placeFenceLine(10, 10, 20, 20, 'fence_post', false);
```
---
### 3. `placeFenceRectangle(x, y, width, height, fenceType, consumeResources)`
Postavi pravokotnik ograj (samo rob, ne polnilo).
**Parametri:**
- `x` (number): Levi zgornji X
- `y` (number): Levi zgornji Y
- `width` (number): Širina pravokotnika
- `height` (number): Višina pravokotnika
- `fenceType` (string): Tip ograje (privzeto: `'fence_horizontal'`)
- `consumeResources` (boolean): Ali naj porabi vire (privzeto: `false`)
**Primer:**
```javascript
// Postavi pravokotnik ograj 20x15 na poziciji (30, 40)
this.buildSystem.placeFenceRectangle(30, 40, 20, 15, 'fence_horizontal', false);
```
---
## 🎨 Razpoložljivi Tipi Ograj
| Tip Ograje | ID | Opis | Cena |
|------------|-----|------|------|
| Stara ograja | `'fence'` | Originalna izometrična ograja | 2 lesa |
| Steber | `'fence_post'` | Ograjen steber | 1 les |
| Vodoravna → | `'fence_horizontal'` | Vodoravna ograja | 2 lesa |
| Navpična ↓ | `'fence_vertical'` | Navpična ograja | 2 lesa |
| Vogal ⌞ | `'fence_corner'` | Vogalna ograja | 2 lesa |
---
## 💡 Primeri Uporabe
### Primer 1: Postavitev ene ograje
```javascript
// V GameScene.js create() metodi:
this.buildSystem.placeSingleFence(50, 30);
```
### Primer 2: Kratka vodoravna linija
```javascript
for (let i = 0; i < 5; i++) {
this.buildSystem.placeSingleFence(50 + i, 30, 'fence_horizontal');
}
```
### Primer 3: Navpična linija
```javascript
for (let i = 0; i < 5; i++) {
this.buildSystem.placeSingleFence(50, 30 + i, 'fence_vertical');
}
```
### Primer 4: Ogradi celotno farmo
```javascript
this.buildSystem.placeFenceRectangle(0, 0, 100, 100, 'fence_horizontal');
```
### Primer 5: Ustvari majhen vrt (10x10)
```javascript
this.buildSystem.placeFenceRectangle(45, 45, 10, 10, 'fence_post');
```
### Primer 6: Diagonalna linija
```javascript
this.buildSystem.placeFenceLine(20, 20, 30, 30, 'fence_corner');
```
---
## 🔧 Integracija v GameScene.js
### Metoda 1: Direktno v create()
```javascript
// src/scenes/GameScene.js
create() {
// ... ostala inicializacija ...
this.buildSystem = new BuildSystem(this);
// Postavi nekaj ograj
this.buildSystem.placeFenceRectangle(40, 40, 20, 20, 'fence_horizontal');
// ... ostala koda ...
}
```
### Metoda 2: Uporaba primerov iz datoteke
```javascript
// src/scenes/GameScene.js
import { setupFenceExamples, createFenceMaze } from '../examples/FencePlacementExample.js';
create() {
// ... ostala inicializacija ...
this.buildSystem = new BuildSystem(this);
// Uporabi primere
setupFenceExamples(this);
// Ali ustvari labirint
createFenceMaze(this, 20, 20, 30);
// ... ostala koda ...
}
```
---
## ⚠️ Pomembne Opombe
### 1. **Koordinate**
- Koordinate so v grid sistemu (0-99 za 100x100 mapo)
- X in Y morata biti znotraj meja mape
### 2. **Poraba Virov**
- Privzeto (`consumeResources = false`): Ograje se postavijo BREZ porabe virov
- Če nastavite `consumeResources = true`: Sistem bo preveril in porabil vire
### 3. **Preverjanje Kolizij**
- Sistem avtomatsko preveri, ali na lokaciji že obstaja zgradba
- Če obstaja, bo postavitev zavrnjena
### 4. **Konzolni Izpis**
- Vsaka uspešna postavitev izpiše sporočilo v konzolo
- Napake in opozorila so označena z ❌ in ⚠️
---
## 🎮 Testiranje v Igri
1. **Odpri konzolo** (F12 v brskalniku ali Electron)
2. **Zaženi ukaz:**
```javascript
// Postavi eno ograjo
this.scene.scenes[0].buildSystem.placeSingleFence(50, 50);
// Postavi pravokotnik
this.scene.scenes[0].buildSystem.placeFenceRectangle(30, 30, 15, 15);
```
---
## 📚 Napredni Primeri
### Ustvari Labirint
Glej `src/examples/FencePlacementExample.js` → `createFenceMaze()`
### Ustvari Spiralo
Glej `src/examples/FencePlacementExample.js` → `createFenceSpiral()`
---
## 🐛 Odpravljanje Napak
### Problem: "BuildSystem ni inicializiran"
**Rešitev:** Prepričaj se, da je `this.buildSystem = new BuildSystem(this);` klican v `create()` metodi PRED uporabo metod.
### Problem: "Neznan tip ograje"
**Rešitev:** Preveri, da uporabljaš enega od veljavnih tipov: `'fence'`, `'fence_post'`, `'fence_horizontal'`, `'fence_vertical'`, `'fence_corner'`
### Problem: "Poskus postavitve ograje izven robov mape"
**Rešitev:** Koordinate morajo biti med 0 in 99 (za 100x100 mapo)
### Problem: "Na lokaciji že obstaja zgradba"
**Rešitev:** Izberi drugo lokacijo ali odstrani obstoječo zgradbo
---
## 📝 Changelog
**v1.0** (12.12.2025)
- ✅ Dodana metoda `placeSingleFence()`
- ✅ Dodana metoda `placeFenceLine()`
- ✅ Dodana metoda `placeFenceRectangle()`
- ✅ Podpora za 5 različnih tipov ograj
- ✅ Opcijska poraba virov
- ✅ Avtomatsko preverjanje kolizij
- ✅ Primeri uporabe
---
**Pripravil:** Antigravity AI
**Datum:** 12. December 2025
**Verzija:** 1.0

70
docs/FENCE_QUICK_START.md Normal file
View File

@@ -0,0 +1,70 @@
# 🏗️ HITRI VODNIK - Postavitev Ograj
## Kako Uporabiti (3 Koraki)
### 1⃣ Odpri `src/scenes/GameScene.js`
### 2⃣ Najdi `create()` metodo in dodaj kodo za postavitev ograj
```javascript
create() {
// ... ostala koda ...
this.buildSystem = new BuildSystem(this);
// 🎯 DODAJ TUKAJ:
// Primer: Postavi eno ograjo
this.buildSystem.placeSingleFence(50, 30);
// Primer: Postavi linijo ograj (5 ograj vodoravno)
for (let i = 0; i < 5; i++) {
this.buildSystem.placeSingleFence(50 + i, 32, 'fence_horizontal');
}
// Primer: Postavi pravokotnik ograj (10x8)
this.buildSystem.placeFenceRectangle(40, 40, 10, 8, 'fence_horizontal');
// ... ostala koda ...
}
```
### 3⃣ Shrani in osveži igro (F5 ali ponovno zaženi)
---
## 📖 Celotna Dokumentacija
Za podrobno dokumentacijo glej: **[docs/FENCE_PLACEMENT_GUIDE.md](./FENCE_PLACEMENT_GUIDE.md)**
---
## 🎨 Tipi Ograj
- `'fence'` - Stara ograja
- `'fence_post'` - Steber
- `'fence_horizontal'` - Vodoravna →
- `'fence_vertical'` - Navpična ↓
- `'fence_corner'` - Vogal ⌞
---
## 💡 Hitre Metode
```javascript
// Ena ograja
this.buildSystem.placeSingleFence(x, y, 'fence_horizontal', false);
// Linija ograj
this.buildSystem.placeFenceLine(startX, startY, endX, endY, 'fence_post', false);
// Pravokotnik ograj
this.buildSystem.placeFenceRectangle(x, y, width, height, 'fence_horizontal', false);
```
**Zadnji parameter (`false`)** = Ne porabi virov (za testiranje)
**Spremeni v `true`** = Porabi vire (les)
---
**Pripravljeno za uporabo!**