GDF 26.1a
Game Development Framework - https://gdf.acits.nl
Laden...
Zoeken...
Niets gevonden
GDF.PathFinder Class Referentie

Zoekt routes om obstakels heen, over een raster van punten (nodes) op de vloer. Meer...

Klassen

class  _Avoid

Public Members

 PathFinder (Vector2 aa, Vector2 bb, Vector2 offset, float yMin, float yMax, float spaceBetweenNodes)
 Een PathFinder voor het gebied van aa tot bb (x en z), met om de spaceBetweenNodes een node.
void CreateMapAsync ()
void CreateMap ()
void RecreateMapPartAsync (Vector2 topleft, Vector2 bottomright)
void RecreateMapPart (Vector2 topleft, Vector2 bottomright)
 Kijk in een deel van de kaart opnieuw wat vrij is (bijvoorbeeld als er een muur is gebouwd of weggehaald).
int CreateRouteAsync (Vector2 start, Vector2 destination, List< Vector2 > pointsToAvoidAdditionally=null)
Enums.PathFinderStatus GetRouteStatus (int id)
List< Vector2 > GetCreatedRoute (int id)
void Destroy ()
List< Vector2 > CreateRoute (Vector2 start, Vector2 destination, List< Vector2 > avoidPositionsOnce=null)
 Een route van start naar destination: de posities van de nodes die je langs moet (de eerste is de node het dichtst bij start).

Public Attributen

int AutoRefreshMapMsOffset = 0
int TimeoutMs = 1000
_Avoid Avoid = new _Avoid()
int AutoRefreshMapMs = -1
bool SmoothRoute = false
 Trek de route recht: alleen de punten waar je echt moet afbuigen blijven over (de rechte lijnen ertussen zijn vrij).

Protected Members

virtual bool PositionFree (Vector2 pos)
 Is de node op deze positie vrij?
Vector2 NodePosition (Vector2 position)
 De positie van de node waarin deze positie valt (buiten de kaart: de dichtstbijzijnde node aan de rand).
bool NodeBlocked (Vector2 position)
 Is de node waarin deze positie valt niet begaanbaar? (false zolang er nog geen kaart is).
List< Vector2 > NodePositionsInRectangle (Vector2 topleft, Vector2 bottomright)
 De posities van alle nodes binnen een rechthoek (randen inbegrepen), bijvoorbeeld voor avoidPositionsOnce.

Properties

bool MapCreated [get]
bool MapCreationInProgress [get]
bool MapExists [get]

Gedetailleerde Beschrijving

Zoekt routes om obstakels heen, over een raster van punten (nodes) op de vloer.

Maak eerst de kaart met CreateMap() of CreateMapAsync(), en vraag daarna een route op met CreateRoute() (meteen) of CreateRouteAsync() (op de achtergrond).

Sinds september 2026 (GDF 26.0c) rekent de PathFinder met A* (zelfde mogelijkheden en methodes, alleen veel sneller):

  • de kaart is een rij van ja/nee-waarden (vrij of niet), en een node is gewoon een nummer;
  • de nodes die nog bekeken moeten worden, staan in een 'heap': de beste pakken gaat meteen, zonder te sorteren;
  • niets hoeft per route leeggemaakt te worden: elke node onthoudt bij welke zoektocht zijn waarden horen;
  • van tevoren is bekend welke nodes elkaar kunnen bereiken, dus een onbereikbaar doel kost geen zoekwerk;
  • elke draad heeft een eigen zoekgeheugen: CreateRoute en CreateRouteAsync mogen tegelijk bezig zijn.

Een eigen versie maken kan door van PathFinder te erven: overschrijf PositionFree() om zelf te bepalen welke plekken vrij zijn, en gebruik NodePosition(), NodeBlocked() en NodePositionsInRectangle() (zie GDF_CaptainCoop, PathFinderCoop).

Constructor & Destructor Documentatie

◆ PathFinder()

GDF.PathFinder.PathFinder ( Vector2 aa,
Vector2 bb,
Vector2 offset,
float yMin,
float yMax,
float spaceBetweenNodes )

Een PathFinder voor het gebied van aa tot bb (x en z), met om de spaceBetweenNodes een node.

offset verschuift alle nodes; yMin en yMax bepalen tussen welke hoogtes er naar obstakels wordt gekeken.

Documentatie van functie members

◆ CreateMap()

void GDF.PathFinder.CreateMap ( )

◆ CreateMapAsync()

void GDF.PathFinder.CreateMapAsync ( )

◆ CreateRoute()

List< Vector2 > GDF.PathFinder.CreateRoute ( Vector2 start,
Vector2 destination,
List< Vector2 > avoidPositionsOnce = null )

Een route van start naar destination: de posities van de nodes die je langs moet (de eerste is de node het dichtst bij start).

Geeft null als er geen route is, of als er bij destination geen vrije node ligt. avoidPositionsOnce: posities van nodes die je alleen voor deze route wilt vermijden.

◆ CreateRouteAsync()

int GDF.PathFinder.CreateRouteAsync ( Vector2 start,
Vector2 destination,
List< Vector2 > pointsToAvoidAdditionally = null )

◆ Destroy()

void GDF.PathFinder.Destroy ( )

◆ GetCreatedRoute()

List< Vector2 > GDF.PathFinder.GetCreatedRoute ( int id)

◆ GetRouteStatus()

Enums.PathFinderStatus GDF.PathFinder.GetRouteStatus ( int id)

◆ NodeBlocked()

bool GDF.PathFinder.NodeBlocked ( Vector2 position)
protected

Is de node waarin deze positie valt niet begaanbaar? (false zolang er nog geen kaart is).

◆ NodePosition()

Vector2 GDF.PathFinder.NodePosition ( Vector2 position)
protected

De positie van de node waarin deze positie valt (buiten de kaart: de dichtstbijzijnde node aan de rand).

◆ NodePositionsInRectangle()

List< Vector2 > GDF.PathFinder.NodePositionsInRectangle ( Vector2 topleft,
Vector2 bottomright )
protected

De posities van alle nodes binnen een rechthoek (randen inbegrepen), bijvoorbeeld voor avoidPositionsOnce.

◆ PositionFree()

virtual bool GDF.PathFinder.PositionFree ( Vector2 pos)
protectedvirtual

Is de node op deze positie vrij?

Wordt voor elke node gevraagd bij CreateMap() en RecreateMapPart(). Standaard wordt gekeken naar Avoid; een klasse die van PathFinder erft, kan dit overschrijven. (Let op: CreateMapAsync() en RecreateMapPartAsync() vragen dit op een andere draad.)

◆ RecreateMapPart()

void GDF.PathFinder.RecreateMapPart ( Vector2 topleft,
Vector2 bottomright )

Kijk in een deel van de kaart opnieuw wat vrij is (bijvoorbeeld als er een muur is gebouwd of weggehaald).

◆ RecreateMapPartAsync()

void GDF.PathFinder.RecreateMapPartAsync ( Vector2 topleft,
Vector2 bottomright )

Documentatie van data members

◆ AutoRefreshMapMs

int GDF.PathFinder.AutoRefreshMapMs = -1

◆ AutoRefreshMapMsOffset

int GDF.PathFinder.AutoRefreshMapMsOffset = 0

◆ Avoid

_Avoid GDF.PathFinder.Avoid = new _Avoid()

◆ SmoothRoute

bool GDF.PathFinder.SmoothRoute = false

Trek de route recht: alleen de punten waar je echt moet afbuigen blijven over (de rechte lijnen ertussen zijn vrij).

Standaard uit: dan loopt de route, net als vroeger, van node naar node.

◆ TimeoutMs

int GDF.PathFinder.TimeoutMs = 1000

Property Documentatie

◆ MapCreated

bool GDF.PathFinder.MapCreated
get

◆ MapCreationInProgress

bool GDF.PathFinder.MapCreationInProgress
get

◆ MapExists

bool GDF.PathFinder.MapExists
get

De documentatie voor deze klasse is gegenereerd op basis van het volgende bestand: