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

      protected final PriorityQueue<Node> openList
    • closeList

      protected final ArrayList<Node> closeList
    • closeHashSet

      protected final HashSet<Vector3> closeHashSet
    • entity

      protected EntityIntelligent entity
    • level

      protected Level level
    • start

      protected Vector3 start
    • target

      protected Vector3 target
    • reachableTarget

      protected Vector3 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

  • Method Details

    • setStart

      public void setStart(Vector3 vector3)
      Description copied from interface: IRouteFinder
      设置寻路起点,将会导致寻路中断
      Parameters:
      vector3 - 寻路起点
    • setTarget

      public void setTarget(Vector3 vector3)
      Description copied from interface: IRouteFinder
      设置寻路终点,将会导致寻路中断
      Parameters:
      vector3 - 寻路终点
    • isSearching

      public boolean isSearching()
      Returns:
      boolean 是否正在寻路
    • search

      public boolean search()
      Description copied from interface: IRouteFinder
      尝试开始寻路
      Returns:
      是否成功找到路径
    • getBlockMoveCostAt

      protected int getBlockMoveCostAt(@NotNull Level level, Vector3 pos)
      获取指定位置的方块的移动Cost
      Parameters:
      level -
      pos -
      Returns:
      cost
    • putNeighborNodeIntoOpen

      protected void putNeighborNodeIntoOpen(@NotNull Node node)
      将一个节点周围的有效节点放入OpenList中
      Parameters:
      node - 节点
    • getOpenNode

      protected Node getOpenNode(Vector3 vector2)
    • existInOpenList

      protected boolean existInOpenList(Vector3 vector2)
    • getCloseNode

      protected Node getCloseNode(Vector3 vector2)
    • existInCloseList

      protected boolean existInCloseList(Vector3 vector2)
    • calH

      protected int calH(Vector3 start, Vector3 target)
      计算当前点到终点的代价H 默认使用对角线+直线距离
    • getHighestUnder

      protected Block getHighestUnder(Vector3 vector3, int limit)
      获取目标坐标最高有效点(沿Y轴往下检查)
    • evalPos

      protected boolean evalPos(Vector3 pos)
      指定位置是否可作为一个有效的节点
    • evalStandingBlock

      protected boolean evalStandingBlock(Block block)
      指定方块上面是否可作为一个有效的节点
    • getAvailableHorizontalOffset

      protected int getAvailableHorizontalOffset(Vector3 vector3)
      Parameters:
      vector3 -
      Returns:
      指定坐标可到达的最高点 (limit=4)
    • hasBarrier

      protected boolean hasBarrier(Node node1, Node node2)
    • hasBarrier

      protected boolean hasBarrier(Vector3 pos1, Vector3 pos2)
      指定两个Node之间是否有障碍物
    • hasBlocksAround

      protected boolean hasBlocksAround(ArrayList<Vector3> list)
    • FloydSmooth

      protected ArrayList<Node> FloydSmooth(ArrayList<Node> array)
      使用Floyd算法平滑A*路径
    • getPathRoute

      protected ArrayList<Node> getPathRoute(@Nullable Node end)
      将Node链转换成List样式的路径信息
      Parameters:
      end - 列表尾节点
    • getNearestNodeFromCloseList

      protected Node getNearestNodeFromCloseList(Vector3 vector3)
      获取接近指定坐标的最近的Node
    • isPositionOverlap

      protected boolean isPositionOverlap(Vector3 vector2, Vector3 vector2_)
      坐标是否重叠了
      此方法只会比较坐标的floorX、floorY、floorZ
    • getOpenList

      public PriorityQueue<Node> getOpenList()
    • getCloseList

      public ArrayList<Node> getCloseList()
    • getCloseHashSet

      public HashSet<Vector3> getCloseHashSet()
    • getEntity

      public EntityIntelligent getEntity()
    • getLevel

      public Level getLevel()
    • getStart

      public Vector3 getStart()
      Returns:
      寻路起点
    • getTarget

      public Vector3 getTarget()
      Returns:
      寻路终点
    • getReachableTarget

      public Vector3 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

      public void setEntity(EntityIntelligent entity)
    • setLevel

      public void setLevel(Level level)
    • setReachableTarget

      public void setReachableTarget(Vector3 reachableTarget)
    • 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)