matze/pathfinder

PocketMine-MP Pathfinder

dev-V3-PM5 2024-04-26 13:51 UTC

This package is auto-updated.

Last update: 2024-09-26 14:36:46 UTC


README

当前VIRION处于alpha阶段!

待办事项

  • 更多默认规则(欢迎帮助!)

功能

  • 异步路径搜索
  • 同步路径搜索
  • 路径平滑化
  • 易于使用的API

关于异步路径搜索

由于异步路径搜索具有巨大的性能优势,我总是推荐使用这种方法。但您必须考虑,在另一个线程上进行路径搜索可能会导致路径错误,因为路径搜索期间可能会发生阻塞更新。此外,异步路径搜索比在主线程上运行路径搜索要慢一些(取决于距离和需要计算路径的区块)。但另一方面,主线程甚至不会识别任何路径计算。如果您需要计算多条路径,还应该考虑添加队列,否则类似区块加载和包压缩的任务会花费更长的时间。

代码示例

在两点之间寻找路径

// Set some settings
$settings = \matze\pathfinder\setting\Settings::get()
    ->setPathSmoothing(false)
    ->setMaxTravelDistanceDown(2)
    ->setMaxTravelDistanceUp(1);

// Initialize pathfinder
$pathfinder = new \matze\pathfinder\Pathfinder([
    // Rules will be executed from PRIORITY_HIGHEST to PRIORITY_LOWEST
    new \matze\pathfinder\rule\default\EntitySizeRule(new \pocketmine\entity\EntitySizeInfo(2, 1), \matze\pathfinder\rule\Rule::PRIORITY_NORMAL),//Define rules and set priorities
], $settings);

// Find path synchron
$result = $pathfinder->findPath($from, $to, $world, $timeout);
if($result === null) {
    //Path not found
} else {
    //Path found
}

// Find path asynchron
$pathfinder->findPathAsync($from, $to, $world, function(?\matze\pathfinder\result\PathResult $result): void {
    if($result === null) {
        //Path not found
    } else {
        //Path found
    }
}, $timeout);

欢迎您贡献!

联系我

Discord: matze998