Files
novafarma/docs/FENCE_PLACEMENT_GUIDE.md
2025-12-12 02:41:00 +01:00

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 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:

// 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:

// 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

  1. Odpri konzolo (F12 v brskalniku ali Electron)
  2. 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.jscreateFenceMaze()

Ustvari Spiralo

Glej src/examples/FencePlacementExample.jscreateFenceSpiral()


🐛 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