6.3 KiB
🏗️ 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:
// 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 koordinatastartY(number): Začetna Y koordinataendX(number): Končna X koordinataendY(number): Končna Y koordinatafenceType(string): Tip ograje (privzeto:'fence_horizontal')consumeResources(boolean): Ali naj porabi vire (privzeto:false)
Primer:
// 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 Xy(number): Levi zgornji Ywidth(number): Širina pravokotnikaheight(number): Višina pravokotnikafenceType(string): Tip ograje (privzeto:'fence_horizontal')consumeResources(boolean): Ali naj porabi vire (privzeto:false)
Primer:
// 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
// V GameScene.js create() metodi:
this.buildSystem.placeSingleFence(50, 30);
Primer 2: Kratka vodoravna linija
for (let i = 0; i < 5; i++) {
this.buildSystem.placeSingleFence(50 + i, 30, 'fence_horizontal');
}
Primer 3: Navpična linija
for (let i = 0; i < 5; i++) {
this.buildSystem.placeSingleFence(50, 30 + i, 'fence_vertical');
}
Primer 4: Ogradi celotno farmo
this.buildSystem.placeFenceRectangle(0, 0, 100, 100, 'fence_horizontal');
Primer 5: Ustvari majhen vrt (10x10)
this.buildSystem.placeFenceRectangle(45, 45, 10, 10, 'fence_post');
Primer 6: Diagonalna linija
this.buildSystem.placeFenceLine(20, 20, 30, 30, 'fence_corner');
🔧 Integracija v GameScene.js
Metoda 1: Direktno v create()
// 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
// 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
- Odpri konzolo (F12 v brskalniku ali Electron)
- Zaženi ukaz:
// 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