test
This commit is contained in:
243
docs/FENCE_PLACEMENT_GUIDE.md
Normal file
243
docs/FENCE_PLACEMENT_GUIDE.md
Normal 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
|
||||
Reference in New Issue
Block a user