Class AbstractPathfinder<S extends de.bsommerfeld.pathetic.engine.pathfinder.SearchState>
java.lang.Object
de.bsommerfeld.pathetic.engine.pathfinder.AbstractPathfinder<S>
- All Implemented Interfaces:
Pathfinder
- Direct Known Subclasses:
AStarPathfinder
public abstract class AbstractPathfinder<S extends de.bsommerfeld.pathetic.engine.pathfinder.SearchState>
extends Object
implements Pathfinder
Provides a skeletal implementation of the
Pathfinder interface, defining common behavior
for pathfinding algorithms.
This pathfinder operates by iteratively processing nodes from an open set (priority queue) until the target is reached or other termination conditions are met. The main loop runs uninterrupted at full speed; each iteration expands exactly one node, and there is no timed scheduling or per-iteration delay of any kind. It supports asynchronous execution and customizable hooks for observing the pathfinding steps.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final List<CostProcessor>protected static final Set<PathPosition>protected final ExecutorServiceprotected final booleanprotected final NavigationPointProviderprotected final INeighborStrategyprotected final PathfinderConfigurationprotected final List<ValidationProcessor> -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedAbstractPathfinder(PathfinderConfiguration pathfinderConfiguration) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract ScreateSearchState(PathPosition start, int expectedNodes) Creates the per-search state holding this algorithm's open and closed sets.protected NodecreateStartNode(PathPosition startPos, PathPosition targetPos) Creates the initialNodefor the start position.findPath(PathPosition start, PathPosition target, EnvironmentContext environmentContext) Tries to find a path between the specified start and target positions within the provided environment context.protected abstract voidprocessSuccessors(PathPosition requestStart, PathPosition requestTarget, Node currentNode, S state, SearchContext searchContext) Abstract method representing the core logic of processing successor nodes for a givencurrentNode.protected PathreconstructPath(PathPosition start, PathPosition target, Node endNode) Reconstructs the path by tracing back from the given end node to the start node.voidRegisters aPathfinderHookthat will be called on every step of subsequent pathfinding operations.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface de.bsommerfeld.pathetic.api.pathing.Pathfinder
findPath
-
Field Details
-
EMPTY_PATH_POSITIONS
-
pathfinderConfiguration
-
validationProcessors
-
costProcessors
-
neighborStrategy
-
executorService
-
hasCustomProcessors
protected final boolean hasCustomProcessors
-
-
Constructor Details
-
AbstractPathfinder
-
-
Method Details
-
findPath
public PathfindingSearch findPath(PathPosition start, PathPosition target, EnvironmentContext environmentContext) Description copied from interface:PathfinderTries to find a path between the specified start and target positions within the provided environment context.- Specified by:
findPathin interfacePathfinder- Parameters:
start- The starting position for pathfinding.target- The target position for pathfinding.environmentContext- The environment context that provides additional information for the pathfinding operation. This parameter can be null if no specific context is required.- Returns:
- A
PathfindingSearchinstance that can be used to configure and retrieve the result of the pathfinding operation.
-
registerPathfindingHook
Description copied from interface:PathfinderRegisters aPathfinderHookthat will be called on every step of subsequent pathfinding operations.Each search snapshots the currently registered hooks at the moment it starts. Hooks registered after that snapshot apply only to future searches, never to a search that is already running.
- Specified by:
registerPathfindingHookin interfacePathfinder- Parameters:
hook- The hook to register.
-
createStartNode
Creates the initialNodefor the start position.- Parameters:
startPos- The effective start position.targetPos- The effective target position.- Returns:
- The created start node.
-
reconstructPath
Reconstructs the path by tracing back from the given end node to the start node.- Parameters:
endNode- The node from which to trace back.- Returns:
- The reconstructed
Path.
-
createSearchState
Creates the per-search state holding this algorithm's open and closed sets. Called once at the start of every request; the returned instance lives as a stack local and is passed back intoprocessSuccessors(de.bsommerfeld.pathetic.api.wrapper.PathPosition, de.bsommerfeld.pathetic.api.wrapper.PathPosition, de.bsommerfeld.pathetic.engine.Node, S, de.bsommerfeld.pathetic.api.pathing.processing.context.SearchContext), so it never needs to be stored on the pathfinder.- Parameters:
start- The effective (floored) start position of the request; implementations that key their per-search state relative to the search origin derive that origin from it.expectedNodes- Estimated number of nodes the search will touch; implementations should size their per-search structures from it so small requests pay small setup costs.- Returns:
- a fresh, empty search state for this request.
-
processSuccessors
protected abstract void processSuccessors(PathPosition requestStart, PathPosition requestTarget, Node currentNode, S state, SearchContext searchContext) Abstract method representing the core logic of processing successor nodes for a givencurrentNode. Implementations (like A*) should:- Generate potential successor positions.
- Create
Nodeobjects for these successors. - Validate these nodes (e.g., traversability, bounds, visited status). This is where processors will hook in.
- Calculate their G and H costs. G-costs will be influenced by cost processors.
- Add valid successor nodes with their F-costs to the open set held by
state.
- Parameters:
requestStart- The original startPathPositionof the pathfinding request.requestTarget- The original targetPathPositionof the pathfinding request.currentNode- The currentNodebeing expanded.state- The per-search state holding the open and closed sets.
-