Lưới ô, A*, tầm nhìn và đi theo đường cho quái. Tiếp...
Classes | |
| struct | njin::nav_grid |
| Lưới tìm đường: mỗi ô có một chi phí để đi vào, 0 là không đi được. Tiếp... | |
| struct | njin::nav_path_opts |
| Tùy chọn của nav_find_path(). Tiếp... | |
| struct | njin::nav_agent |
| Một con đường đang được đi theo, dùng với nav_steer(). Tiếp... | |
Các hàm | |
| nav_grid | njin::nav_grid_make (vec2 origin, vec2 cell_size, i32 width, i32 height, u8 cost=1) |
| Tạo một lưới trống, mọi ô có cùng chi phí. | |
| nav_grid | njin::nav_grid_from_world (const context &ctx, rect area, vec2 cell_size, u32 mask=0xFFFFFFFFu) |
| Dựng lưới phủ area từ vật cản đang có trong thế giới: mọi ô chồng lên một collider không phải trigger (hộp, tròn, hay ô collider_tiles khác tile_none) có layer & mask != 0 là vật cản. | |
| cell | njin::nav_cell_at (const nav_grid &grid, vec2 pos) |
| Ô chứa một điểm trong thế giới (có thể nằm ngoài lưới). | |
| vec2 | njin::nav_cell_center (const nav_grid &grid, cell c) |
| Tâm của một ô trong thế giới. | |
| u8 | njin::nav_cost (const nav_grid &grid, cell c) |
| Chi phí của một ô. | |
| void | njin::nav_set_cost (nav_grid &grid, cell c, u8 cost) |
| Đặt chi phí một ô. | |
| void | njin::nav_set_area (nav_grid &grid, rect area, u8 cost=0) |
| Đánh dấu vật cản mọi ô chồng lên area: một cái rương vừa đặt xuống, một cánh cửa vừa đóng. | |
| bool | njin::nav_find_path (const nav_grid &grid, vec2 from, vec2 to, std::vector< vec2 > &out, const nav_path_opts &opts={}) |
| Tìm đường ngắn nhất (A*) từ from đến to. | |
| bool | njin::nav_line_clear (const nav_grid &grid, vec2 a, vec2 b) |
| Đoạn thẳng từ a tới b có đi qua ô vật cản nào không. | |
| vec2 | njin::nav_steer (nav_agent &agent, vec2 pos) |
| Hướng cần đi để theo đường, độ dài 1, hoặc {0, 0} khi đã tới cuối. | |
Lưới ô, A*, tầm nhìn và đi theo đường cho quái.
Tạo một lưới trống, mọi ô có cùng chi phí.
| origin | Góc trên trái trong thế giới. |
| cell_size | Kích thước ô. |
| width | Số cột. |
| height | Số hàng. |
| cost | Chi phí mọi ô. 1 là đi được, 0 là vật cản. |
| nav_grid njin::nav_grid_from_world | ( | const context & | ctx, |
| rect | area, | ||
| vec2 | cell_size, | ||
| u32 | mask = 0xFFFFFFFFu ) |
Dựng lưới phủ area từ vật cản đang có trong thế giới: mọi ô chồng lên một collider không phải trigger (hộp, tròn, hay ô collider_tiles khác tile_none) có layer & mask != 0 là vật cản.
Dùng mask để chỉ lấy tường và bỏ qua nhân vật, quái: nav_grid_from_world(ctx, level_bounds(ctx, lv), {16, 16}, layer_walls).
| ctx | Context của engine. |
| area | Vùng thế giới cần phủ. |
| cell_size | Kích thước ô, thường bằng ô tilemap. |
| mask | Lớp va chạm được coi là vật cản. |
Ô chứa một điểm trong thế giới (có thể nằm ngoài lưới).
| grid | Lưới. |
| pos | Điểm. |
Tâm của một ô trong thế giới.
| grid | Lưới. |
| c | Ô. |
Chi phí của một ô.
Ô ngoài lưới là 0.
| grid | Lưới. |
| c | Ô. |
Đặt chi phí một ô.
Ô ngoài lưới bị bỏ qua.
| grid | Lưới. |
| c | Ô. |
| cost | Chi phí, 0 là vật cản. |
Đánh dấu vật cản mọi ô chồng lên area: một cái rương vừa đặt xuống, một cánh cửa vừa đóng.
| grid | Lưới. |
| area | Vùng thế giới. |
| cost | Chi phí gán cho các ô đó, mặc định 0 (vật cản). |
| bool njin::nav_find_path | ( | const nav_grid & | grid, |
| vec2 | from, | ||
| vec2 | to, | ||
| std::vector< vec2 > & | out, | ||
| const nav_path_opts & | opts = {} ) |
Tìm đường ngắn nhất (A*) từ from đến to.
out được xóa rồi nhận các điểm cần đi qua, trong thế giới, không kèm điểm xuất phát; điểm cuối là to khi tới được. Dùng với nav_steer().
| grid | Lưới. |
| from | Điểm xuất phát. |
| to | Điểm đích. |
| out | Nhận đường đi. |
| opts | Tùy chọn. |
Đoạn thẳng từ a tới b có đi qua ô vật cản nào không.
| grid | Lưới. |
| a | Điểm đầu. |
| b | Điểm cuối. |