244 lines
6.3 KiB
Markdown
244 lines
6.3 KiB
Markdown
# 🏗️ 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
|