Package cn.nukkit.entity.ai.route
Class SimpleFlatAStarRouteFinder
java.lang.Object
cn.nukkit.entity.ai.route.SimpleRouteFinder
cn.nukkit.entity.ai.route.SimpleFlatAStarRouteFinder
- All Implemented Interfaces:
IRouteFinder
- Direct Known Subclasses:
SimpleSpaceAStarRouteFinder
@PowerNukkitXOnly
@Since("1.6.0.0-PNX")
public class SimpleFlatAStarRouteFinder
extends SimpleRouteFinder
标准A*寻路实现,性能不佳
-
Field Summary
Modifier and TypeFieldDescriptionprotected int
protected static final int
protected boolean
protected EntityIntelligent
protected boolean
protected boolean
protected Level
protected int
protected static final int
protected final PriorityQueue<Node>
protected boolean
protected Vector3
protected boolean
protected Vector3
protected Vector3
Fields inherited from class cn.nukkit.entity.ai.route.SimpleRouteFinder
currentIndex, evalPos, nodes
-
Constructor Summary
ConstructorDescriptionSimpleFlatAStarRouteFinder
(IPosEvaluator blockEvaluator, EntityIntelligent entity) -
Method Summary
Modifier and TypeMethodDescriptionprotected int
计算当前点到终点的代价H 默认使用对角线+直线距离protected boolean
指定位置是否可作为一个有效的节点protected boolean
evalStandingBlock
(Block block) 指定方块上面是否可作为一个有效的节点protected boolean
existInCloseList
(Vector3 vector2) protected boolean
existInOpenList
(Vector3 vector2) FloydSmooth
(ArrayList<Node> array) 使用Floyd算法平滑A*路径protected int
getAvailableHorizontalOffset
(Vector3 vector3) protected int
getBlockMoveCostAt
(Level level, Vector3 pos) 获取指定位置的方块的移动Costprotected Node
getCloseNode
(Vector3 vector2) int
protected Block
getHighestUnder
(Vector3 vector3, int limit) 获取目标坐标最高有效点(沿Y轴往下检查)getLevel()
int
protected Node
getNearestNodeFromCloseList
(Vector3 vector3) 获取接近指定坐标的最近的Nodeprotected Node
getOpenNode
(Vector3 vector2) getPathRoute
(Node end) 将Node链转换成List样式的路径信息 getStart()
protected boolean
hasBarrier
(Node node1, Node node2) protected boolean
hasBarrier
(Vector3 pos1, Vector3 pos2) 指定两个Node之间是否有障碍物protected boolean
hasBlocksAround
(ArrayList<Vector3> list) boolean
boolean
boolean
protected boolean
isPositionOverlap
(Vector3 vector2, Vector3 vector2_) 坐标是否重叠了
此方法只会比较坐标的floorX、floorY、floorZboolean
在调用此方法前,你应该首先尝试寻路,否则此方法始将终返回true
boolean
protected void
putNeighborNodeIntoOpen
(Node node) 将一个节点周围的有效节点放入OpenList中boolean
search()
尝试开始寻路void
setCurrentSearchDepth
(int currentSearchDepth) void
setEnableFloydSmooth
(boolean enableFloydSmooth) void
setEntity
(EntityIntelligent entity) void
setFinished
(boolean finished) void
setInterrupt
(boolean interrupt) void
void
setMaxSearchDepth
(int maxSearchDepth) void
setReachable
(boolean reachable) void
setReachableTarget
(Vector3 reachableTarget) void
setSearching
(boolean searching) void
设置寻路起点,将会导致寻路中断void
设置寻路终点,将会导致寻路中断Methods inherited from class cn.nukkit.entity.ai.route.SimpleRouteFinder
addNode, addNode, getCurrentIndex, getCurrentNode, getEvalPos, getNode, getNodeIndex, getNodes, getRoute, hasCurrentNode, hasNext, next, resetNodes, setNodeIndex
-
Field Details
-
DIRECT_MOVE_COST
protected static final int DIRECT_MOVE_COST- See Also:
-
OBLIQUE_MOVE_COST
protected static final int OBLIQUE_MOVE_COST- See Also:
-
openList
-
closeList
-
closeHashSet
-
entity
-
level
-
start
-
target
-
reachableTarget
-
finished
protected boolean finished -
searching
protected boolean searching -
interrupt
protected boolean interrupt -
reachable
protected boolean reachable -
enableFloydSmooth
protected boolean enableFloydSmooth -
currentSearchDepth
protected int currentSearchDepth -
maxSearchDepth
protected int maxSearchDepth
-
-
Constructor Details
-
SimpleFlatAStarRouteFinder
-
-
Method Details
-
setStart
Description copied from interface:IRouteFinder
设置寻路起点,将会导致寻路中断- Parameters:
vector3
- 寻路起点
-
setTarget
Description copied from interface:IRouteFinder
设置寻路终点,将会导致寻路中断- Parameters:
vector3
- 寻路终点
-
isSearching
public boolean isSearching()- Returns:
- boolean 是否正在寻路
-
search
public boolean search()Description copied from interface:IRouteFinder
尝试开始寻路- Returns:
- 是否成功找到路径
-
getBlockMoveCostAt
获取指定位置的方块的移动Cost- Parameters:
level
-pos
-- Returns:
- cost
-
putNeighborNodeIntoOpen
将一个节点周围的有效节点放入OpenList中- Parameters:
node
- 节点
-
getOpenNode
-
existInOpenList
-
getCloseNode
-
existInCloseList
-
calH
计算当前点到终点的代价H 默认使用对角线+直线距离 -
getHighestUnder
获取目标坐标最高有效点(沿Y轴往下检查) -
evalPos
指定位置是否可作为一个有效的节点 -
evalStandingBlock
指定方块上面是否可作为一个有效的节点 -
getAvailableHorizontalOffset
- Parameters:
vector3
-- Returns:
- 指定坐标可到达的最高点 (limit=4)
-
hasBarrier
-
hasBarrier
指定两个Node之间是否有障碍物 -
hasBlocksAround
-
FloydSmooth
使用Floyd算法平滑A*路径 -
getPathRoute
将Node链转换成List样式的路径信息 - Parameters:
end
- 列表尾节点
-
getNearestNodeFromCloseList
获取接近指定坐标的最近的Node -
isPositionOverlap
坐标是否重叠了
此方法只会比较坐标的floorX、floorY、floorZ -
getOpenList
-
getCloseList
-
getCloseHashSet
-
getEntity
-
getLevel
-
getStart
- Returns:
- 寻路起点
-
getTarget
- Returns:
- 寻路终点
-
getReachableTarget
- Returns:
- 可到达的终点
-
isFinished
public boolean isFinished()- Returns:
- boolean 是否完成寻路(找到有效路径)
-
isInterrupt
public boolean isInterrupt()- Returns:
- boolean 寻路是否被中断了
-
isReachable
public boolean isReachable()Description copied from interface:IRouteFinder
在调用此方法前,你应该首先尝试寻路,否则此方法始将终返回true
- Returns:
- 终点是否可到达
-
isEnableFloydSmooth
public boolean isEnableFloydSmooth() -
getCurrentSearchDepth
public int getCurrentSearchDepth() -
getMaxSearchDepth
public int getMaxSearchDepth() -
setEntity
-
setLevel
-
setReachableTarget
-
setFinished
public void setFinished(boolean finished) -
setSearching
public void setSearching(boolean searching) -
setInterrupt
public void setInterrupt(boolean interrupt) -
setReachable
public void setReachable(boolean reachable) -
setEnableFloydSmooth
public void setEnableFloydSmooth(boolean enableFloydSmooth) -
setCurrentSearchDepth
public void setCurrentSearchDepth(int currentSearchDepth) -
setMaxSearchDepth
public void setMaxSearchDepth(int maxSearchDepth)
-