# 🏗️ 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