1 个不稳定版本
0.2.1 |
|
---|---|
0.2.0 |
|
0.1.5 |
|
0.0.0 | 2024 年 2 月 18 日 |
5 在 #2d-grid 中排名
每月 45 次下载
11KB
199 行
line_of_sight
用于在 2D 网格上寻找视距的 crate。
示例
use line_of_sight::ShadowMap;
use line_of_sight::BLOCK;
use line_of_sight::PLAYER;
// create a 16x17 line of sight map with empty cells by default
let mut map = ShadowMap::new_with_empty_cells(16, 17);
// add some obstacles
let obstacles = vec![
(3, 3),
(4, 3),
(5, 3),
(8, 7),
(8, 5),
(6, 9),
(6, 10),
(6, 11),
(7, 11),
(7, 10),
(7, 9),
];
for obstacle in obstacles {
map.set(obstacle.0, obstacle.1, BLOCK);
}
// set the center to be (4, 5)
let center = (4.0, 5.0);
// fully scan the map in the 20 unit radius (in 4 directions. Use `scan_arc` to only scan in 1 direction)
map.full_scan(center, 20.0);
// set (4, 5) to be the "player cell" for visual purposes
map.set(4, 5, PLAYER);
map.show();
结果
[2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0]
[2, 2, 2, 2, 3, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0]
[2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 2, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 0, 0, 0, 0, 2]
[2, 2, 2, 2, 2, 2, 1, 1, 0, 2, 2, 2, 2, 0, 0, 0]
[2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 2, 2, 2, 2, 0, 0]
[2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 2, 2, 2]
[2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2]
说明
- 0 -- 不可达的单元格
- 1 -- 障碍物
- 2 -- 可达的单元格
- 3 -- 中心(可选;仅用于视觉目的)
图形结果
说明
- 白色单元格 -- 可达的单元格
- 灰色单元格 -- 不可达的单元格
- 蓝色单元格 -- 障碍物
- 橙色单元格 -- 中心