#path-finding #traits #rogue-like #brackets #geometry #interface #maps

bracket-algorithm-traits

bracket-* crate所需的特性。使用Algorithm2D、Algorithm3D和BaseMap适配您的地图。

6个版本

0.8.7 2022年10月4日
0.8.2 2021年2月10日
0.8.1 2020年4月29日
0.7.0 2020年2月22日
0.1.0 2020年2月21日

游戏开发中排名第1615

Download history 859/week @ 2024-03-13 1305/week @ 2024-03-20 1160/week @ 2024-03-27 1451/week @ 2024-04-03 1221/week @ 2024-04-10 1210/week @ 2024-04-17 1237/week @ 2024-04-24 1059/week @ 2024-05-01 1143/week @ 2024-05-08 1104/week @ 2024-05-15 1288/week @ 2024-05-22 1308/week @ 2024-05-29 1152/week @ 2024-06-05 876/week @ 2024-06-12 1001/week @ 2024-06-19 1029/week @ 2024-06-26

每月下载量4,257
用于10个crate(直接使用2个)

MIT许可协议

88KB
2K SLoC

bracket-algorithm-traits

此crate提供了用于在crate中使用的特性。它是整体系统的一部分。

使用特性接口意味着不需要知道或关心您如何存储数据,但仍可提供有用的几何和路径查找功能。提供了默认设置,允许您快速启动和运行。

所有内容都通过导出。

地图索引

真正的最小实现(将
TestMap
替换为您自己的地图结构)

struct TestMap{};
impl BaseMap for TestMap {}
impl Algorithm2D for TestMap{
    fn dimensions(&self) -> Point {
        Point::new(2, 2)
    }
}

这足以提供以下服务

  • in_bounds(Point):一个点是否位于地图的维度内?
  • point2d_to_index(Point) -> usize:为点提供一个数组索引,在地图维度内。它假设您的数组以列为中心进行扩展。
  • index_to_point2d(usize) -> Point:为给定的数组索引提供一个x/y坐标,假设相同的扩展。

如果您不喜欢默认实现,可以自由地覆盖它们。

还有一个等效的
Algorithm3D
用于基于3D网格的地图(用
Point3D
替换
Point
)。

地图遍历

BaseMap特性帮助您定义地图。如果您想使用路径查找,您需要实现
is_opaque
函数

impl BaseMap for MyMap {
    fn is_opaque(&self, _idx: usize) -> bool {
        false
    }
}

为了支持路径查找,您还需要实现两个其他函数

impl BaseMap for MyMap {
    fn get_available_exits(&self, idx: usize) -> SmallVec<[(usize, f32); 10]> {
        Vec::new()
        // Provide a list of exit indices (you can use point2d_to_index to generate them) for this
        // tile inside the array.
        // Do NOT include the current tile as an available exit.
    }

    fn get_pathing_distance(&self, _idx1: usize, _idx2: usize) -> f32 {
        1.0
        // This should be a distance, using whatever heuristic you prefer.
    }

依赖关系

~1.5MB
~33K SLoC