njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
Tìm đường 3D

Navmesh dựng từ hình học tĩnh và địa hình, tìm đường, lối tắt, đám đông tác tử né nhau. Tiếp...

Classes

struct  njin::navmesh3d_desc
 Cách dựng một navmesh 3D bằng navmesh3d_create(): cỡ của tác tử đi trên nó và độ mịn khi dựng. Tiếp...
struct  njin::nav3d_filter
 Cách tìm đường đánh giá các vùng: chi phí đi qua mỗi vùng và vùng nào cấm. Tiếp...
struct  njin::nav3d_obstacle_desc
 Một vật cản di động trên navmesh: thùng bị đẩy, xe đậu, cửa đóng. Tiếp...
struct  njin::nav3d_ray
 Kết quả của navmesh3d_raycast(). Tiếp...
struct  njin::nav3d_agent_desc
 Một tác tử đi trên navmesh cùng các tác tử khác: tự tìm đường, tránh nhau, tách nhau ra khi đứng sát. Tiếp...

Các hàm

navmesh3d_handle njin::navmesh3d_create (context &ctx, const navmesh3d_desc &desc={})
 Tạo một navmesh trống.
void njin::navmesh3d_destroy (context &ctx, navmesh3d_handle handle)
 Hủy navmesh cùng mọi tác tử của nó.
void njin::navmesh3d_add_mesh (context &ctx, navmesh3d_handle handle, const vec3 *positions, u32 vertex_count, const u32 *indices=nullptr, u32 index_count=0, u8 area=0)
 Thêm một lưới tam giác (trong thế giới) làm hình học: sàn, tường, cầu thang.
void njin::navmesh3d_add_model (context &ctx, navmesh3d_handle handle, model_handle model, vec3 position, vec3 rotation={0.0f, 0.0f, 0.0f}, vec3 scale={1.0f, 1.0f, 1.0f}, u8 area=0)
 Thêm các tam giác của một model, đặt ở vị trí, góc xoay (độ) và tỉ lệ như draw_model().
void njin::navmesh3d_add_box (context &ctx, navmesh3d_handle handle, vec3 center, vec3 size, vec3 rotation={0.0f, 0.0f, 0.0f}, u8 area=0)
 Thêm một hình hộp: bục, bàn, vật cản, tường.
void njin::navmesh3d_add_terrain (context &ctx, navmesh3d_handle handle, terrain3d_handle terrain, u8 area=0)
 Thêm một địa hình (njin_world3d.h).
void njin::navmesh3d_add_link (context &ctx, navmesh3d_handle handle, vec3 from, vec3 to, bool both_ways=true, f32 radius=0.5f, u8 area=0)
 Thêm một lối tắt mà tác tử đi được dù không liền mặt đất: nhảy qua khe, leo thang, nhảy xuống bục.
i32 njin::navmesh3d_add_area (context &ctx, navmesh3d_handle handle, vec3 center, vec3 size, f32 yaw, u8 area)
 Đánh dấu một khối đứng là một vùng (0..15): mọi chỗ đi được bên trong hộp xoay quanh trục đứng (đường cái, đầm lầy, khung cửa).
void njin::navmesh3d_remove_area (context &ctx, navmesh3d_handle handle, i32 id)
 Bỏ một khối đã đánh dấu (chỗ đó trở về vùng của hình học bên dưới) và dựng lại các ô vuông nó chạm vào.
void njin::navmesh3d_clear_geometry (context &ctx, navmesh3d_handle handle)
 Bỏ mọi hình học và lối tắt đã thêm (navmesh đã dựng vẫn giữ đến lần dựng sau).
bool njin::navmesh3d_build (context &ctx, navmesh3d_handle handle)
 Dựng toàn bộ navmesh từ hình học đã thêm.
i32 njin::navmesh3d_rebuild (context &ctx, navmesh3d_handle handle, vec3 min, vec3 max)
 Dựng lại các ô vuông chạm vào vùng [min, max], từ hình học hiện tại: sau khi sửa địa hình, mở cửa, đặt vật cản mới (thêm nó bằng navmesh3d_add_box()).
navmesh3d_handle njin::navmesh3d_clone (context &ctx, navmesh3d_handle source, const navmesh3d_desc &desc)
 Một navmesh mới cùng hình học, vùng đánh dấu, lối tắt, vật cản và bộ lọc với source, nhưng dựng theo desc (thường là cỡ tác tử khác): mỗi cỡ tác tử cần navmesh riêng, vì khoảng chừa quanh tường được tính lúc dựng.
void njin::navmesh3d_set_filter (context &ctx, navmesh3d_handle handle, i32 index, const nav3d_filter &filter)
 Đặt bộ lọc số index (0..15) của navmesh.
nav3d_filter njin::navmesh3d_filter (const context &ctx, navmesh3d_handle handle, i32 index)
 Bộ lọc số index của navmesh.
i32 njin::navmesh3d_add_obstacle (context &ctx, navmesh3d_handle handle, const nav3d_obstacle_desc &desc)
 Thêm một vật cản.
bool njin::navmesh3d_move_obstacle (context &ctx, navmesh3d_handle handle, i32 id, vec3 position, f32 yaw=0.0f)
 Dời một vật cản: dựng lại các ô vuông chỗ cũ và chỗ mới.
void njin::navmesh3d_remove_obstacle (context &ctx, navmesh3d_handle handle, i32 id)
 Bỏ một vật cản: chỗ đó đi được lại sau khi các ô vuông được dựng lại.
i32 njin::navmesh3d_pending_tiles (const context &ctx, navmesh3d_handle handle)
 Số ô vuông còn chờ dựng lại vì vật cản.
bool njin::navmesh3d_path (const context &ctx, navmesh3d_handle handle, vec3 from, vec3 to, std::vector< vec3 > &out)
 Tìm đường từ from đến to: các điểm gấp khúc, đầu là điểm gần from nhất trên navmesh, cuối là điểm gần to nhất.
bool njin::navmesh3d_path (const context &ctx, navmesh3d_handle handle, vec3 from, vec3 to, std::vector< vec3 > &out, i32 filter)
 Như bản trên, theo bộ lọc số filter (navmesh3d_set_filter()): chi phí từng vùng, vùng cấm.
bool njin::navmesh3d_nearest (const context &ctx, navmesh3d_handle handle, vec3 p, vec3 &out, vec3 extents={2.0f, 4.0f, 2.0f})
 Điểm gần p nhất trên navmesh, tìm trong hộp nửa cỡ extents quanh p.
nav3d_ray njin::navmesh3d_raycast (const context &ctx, navmesh3d_handle handle, vec3 from, vec3 to)
 Đi thẳng trên mặt navmesh từ from về phía to và dừng ở mép đầu tiên: có nhìn thấy nhau theo mặt đất không, lao tới được bao xa.
bool njin::navmesh3d_random_point (context &ctx, navmesh3d_handle handle, vec3 &out)
 Một điểm ngẫu nhiên trên navmesh (các chỗ đi được có xác suất theo diện tích).
bool njin::navmesh3d_random_point_near (context &ctx, navmesh3d_handle handle, vec3 center, f32 radius, vec3 &out)
 Một điểm ngẫu nhiên trên navmesh, cách center không quá radius và đi tới được từ đó: chỗ quái đi lang thang quanh ổ.
void njin::navmesh3d_draw_debug (context &ctx, navmesh3d_handle handle, rgba color={0.2f, 0.8f, 1.0f, 1.0f})
 Vẽ các đa giác của navmesh bằng gizmo (njin_gizmo.h) trong frame này: mép đa giác, mép ngoài đậm hơn, và các lối tắt.
nav3d_agent_handle njin::nav3d_agent_add (context &ctx, navmesh3d_handle navmesh, const nav3d_agent_desc &desc)
 Thêm một tác tử.
void njin::nav3d_agent_remove (context &ctx, nav3d_agent_handle agent)
 Bỏ một tác tử.
bool njin::nav3d_agent_set_target (context &ctx, nav3d_agent_handle agent, vec3 target)
 Đặt đích: tác tử tìm đường và đi tới đó (đích được kéo về chỗ gần nhất trên navmesh).
void njin::nav3d_agent_set_filter (context &ctx, nav3d_agent_handle agent, i32 filter)
 Đổi bộ lọc tác tử tìm đường theo (người lính có chìa khóa đi được qua cửa khóa).
void njin::nav3d_agent_stop (context &ctx, nav3d_agent_handle agent)
 Bỏ đích: tác tử dừng lại (vẫn tách khỏi tác tử khác).
bool njin::nav3d_agent_teleport (context &ctx, nav3d_agent_handle agent, vec3 position)
 Đặt tác tử sang chỗ khác ngay (dịch chuyển tức thời), bỏ đích.
vec3 njin::nav3d_agent_position (const context &ctx, nav3d_agent_handle agent)
 Vị trí hiện tại của tác tử (trên mặt navmesh).
vec3 njin::nav3d_agent_velocity (const context &ctx, nav3d_agent_handle agent)
 Vận tốc hiện tại của tác tử: hướng nó đang đi, để quay mặt và chọn animation.
bool njin::nav3d_agent_arrived (const context &ctx, nav3d_agent_handle agent)
 Tác tử đã tới đích chưa (cách đích không quá arrive_distance).
i32 njin::nav3d_agent_count (const context &ctx, navmesh3d_handle navmesh)
 Số tác tử đang có trên một navmesh.

Các biến

constexpr i32 njin::nav3d_max_areas = 16
 Số loại vùng: vùng 0 đến 15.

Mô tả chi tiết

Navmesh dựng từ hình học tĩnh và địa hình, tìm đường, lối tắt, đám đông tác tử né nhau.

Thông tin về hàm

◆ navmesh3d_create()

navmesh3d_handle njin::navmesh3d_create ( context & ctx,
const navmesh3d_desc & desc = {} )

Tạo một navmesh trống.

Thêm hình học bằng navmesh3d_add_mesh(), navmesh3d_add_model(), navmesh3d_add_box(), navmesh3d_add_terrain(), rồi dựng bằng navmesh3d_build().

Các tham số
ctxContext của engine.
descCách dựng.
Giá trị trả về
Handle, hoặc handle không hợp lệ nếu desc sai (cảnh báo nói vì sao).

◆ navmesh3d_destroy()

void njin::navmesh3d_destroy ( context & ctx,
navmesh3d_handle handle )

Hủy navmesh cùng mọi tác tử của nó.

Handle không hợp lệ bị bỏ qua.

Các tham số
ctxContext của engine.
handleNavmesh.

◆ navmesh3d_add_mesh()

void njin::navmesh3d_add_mesh ( context & ctx,
navmesh3d_handle handle,
const vec3 * positions,
u32 vertex_count,
const u32 * indices = nullptr,
u32 index_count = 0,
u8 area = 0 )

Thêm một lưới tam giác (trong thế giới) làm hình học: sàn, tường, cầu thang.

Được chép lại.

Các tham số
ctxContext của engine.
handleNavmesh.
positionsCác đỉnh.
vertex_countSố đỉnh.
indicesBa chỉ số một tam giác; nullptr là mỗi ba đỉnh liên tiếp một tam giác.
index_countSố chỉ số, bội của 3.
areaVùng của mặt đi được trên lưới này, 0..15 (xem nav3d_filter). Khi hai mặt trùng độ cao, vùng số lớn hơn thắng.

◆ navmesh3d_add_model()

void njin::navmesh3d_add_model ( context & ctx,
navmesh3d_handle handle,
model_handle model,
vec3 position,
vec3 rotation = {0.0f, 0.0f, 0.0f},
vec3 scale = {1.0f, 1.0f, 1.0f},
u8 area = 0 )

Thêm các tam giác của một model, đặt ở vị trí, góc xoay (độ) và tỉ lệ như draw_model().

Model được đọc lại mỗi lần dựng, nên phải còn sống đến lúc đó.

Các tham số
ctxContext của engine.
handleNavmesh.
modelModel.
positionVị trí.
rotationGóc xoay, độ, như njin::transform3d::rotation.
scaleTỉ lệ.
areaVùng của mặt đi được trên model, 0..15.

◆ navmesh3d_add_box()

void njin::navmesh3d_add_box ( context & ctx,
navmesh3d_handle handle,
vec3 center,
vec3 size,
vec3 rotation = {0.0f, 0.0f, 0.0f},
u8 area = 0 )

Thêm một hình hộp: bục, bàn, vật cản, tường.

Các tham số
ctxContext của engine.
handleNavmesh.
centerTâm.
sizeCỡ.
rotationGóc xoay, độ.
areaVùng của mặt trên hộp, 0..15.

◆ navmesh3d_add_terrain()

void njin::navmesh3d_add_terrain ( context & ctx,
navmesh3d_handle handle,
terrain3d_handle terrain,
u8 area = 0 )

Thêm một địa hình (njin_world3d.h).

Độ cao được đọc lại mỗi lần dựng, nên sau terrain3d_edit() chỉ cần navmesh3d_rebuild() vùng đã sửa.

Các tham số
ctxContext của engine.
handleNavmesh.
terrainĐịa hình.
areaVùng của mặt địa hình, 0..15 (từng khoảng riêng thì đánh dấu bằng navmesh3d_add_area()).

◆ navmesh3d_add_link()

void njin::navmesh3d_add_link ( context & ctx,
navmesh3d_handle handle,
vec3 from,
vec3 to,
bool both_ways = true,
f32 radius = 0.5f,
u8 area = 0 )

Thêm một lối tắt mà tác tử đi được dù không liền mặt đất: nhảy qua khe, leo thang, nhảy xuống bục.

Hai đầu phải nằm trên navmesh (cách nó không quá radius).

Các tham số
ctxContext của engine.
handleNavmesh.
fromĐầu đi.
toĐầu đến.
both_waysĐi được cả chiều ngược lại.
radiusKhoảng tìm navmesh quanh hai đầu, mét.
areaVùng của lối tắt, 0..15: cho nó chi phí riêng (nhảy thì đắt) hay cấm nó.

◆ navmesh3d_add_area()

i32 njin::navmesh3d_add_area ( context & ctx,
navmesh3d_handle handle,
vec3 center,
vec3 size,
f32 yaw,
u8 area )

Đánh dấu một khối đứng là một vùng (0..15): mọi chỗ đi được bên trong hộp xoay quanh trục đứng (đường cái, đầm lầy, khung cửa).

Khối đánh dấu sau thắng khối trước chỗ chồng nhau. Nếu navmesh đã dựng, các ô vuông khối chạm vào được dựng lại ngay.

Các tham số
ctxContext của engine.
handleNavmesh.
centerTâm khối.
sizeCỡ khối: x và z theo mặt đất, y là tầm cao phủ tới.
yawGóc xoay quanh trục đứng, độ.
areaVùng, 0..15.
Giá trị trả về
Số của khối, để bỏ bằng navmesh3d_remove_area(); 0 nếu từ chối.

◆ navmesh3d_remove_area()

void njin::navmesh3d_remove_area ( context & ctx,
navmesh3d_handle handle,
i32 id )

Bỏ một khối đã đánh dấu (chỗ đó trở về vùng của hình học bên dưới) và dựng lại các ô vuông nó chạm vào.

Số không có bị bỏ qua.

Các tham số
ctxContext của engine.
handleNavmesh.
idSố do navmesh3d_add_area() trả về.

◆ navmesh3d_clear_geometry()

void njin::navmesh3d_clear_geometry ( context & ctx,
navmesh3d_handle handle )

Bỏ mọi hình học và lối tắt đã thêm (navmesh đã dựng vẫn giữ đến lần dựng sau).

Các tham số
ctxContext của engine.
handleNavmesh.

◆ navmesh3d_build()

bool njin::navmesh3d_build ( context & ctx,
navmesh3d_handle handle )

Dựng toàn bộ navmesh từ hình học đã thêm.

Mất từ vài mili giây đến vài giây tùy cỡ bản đồ và cell_size: gọi lúc nạp màn, không phải mỗi frame.

Các tham số
ctxContext của engine.
handleNavmesh.
Giá trị trả về
true nếu có ít nhất một chỗ đi được.

◆ navmesh3d_rebuild()

i32 njin::navmesh3d_rebuild ( context & ctx,
navmesh3d_handle handle,
vec3 min,
vec3 max )

Dựng lại các ô vuông chạm vào vùng [min, max], từ hình học hiện tại: sau khi sửa địa hình, mở cửa, đặt vật cản mới (thêm nó bằng navmesh3d_add_box()).

Tác tử đang đi tự tìm lại đường.

Các tham số
ctxContext của engine.
handleNavmesh đã dựng.
minGóc nhỏ của vùng.
maxGóc lớn của vùng.
Giá trị trả về
Số ô vuông đã dựng lại.

◆ navmesh3d_clone()

navmesh3d_handle njin::navmesh3d_clone ( context & ctx,
navmesh3d_handle source,
const navmesh3d_desc & desc )

Một navmesh mới cùng hình học, vùng đánh dấu, lối tắt, vật cản và bộ lọc với source, nhưng dựng theo desc (thường là cỡ tác tử khác): mỗi cỡ tác tử cần navmesh riêng, vì khoảng chừa quanh tường được tính lúc dựng.

Chưa dựng: gọi navmesh3d_build(). Thêm hình học, vùng hay vật cản về sau thì thêm cho từng navmesh.

const auto small = njin::navmesh3d_create(ctx, {.agent_radius = 0.3f});
// ... thêm hình học vào small ...
const auto large = njin::navmesh3d_clone(ctx, small, {.agent_radius = 1.0f, .agent_height = 3.0f});
navmesh3d_handle navmesh3d_clone(context &ctx, navmesh3d_handle source, const navmesh3d_desc &desc)
Một navmesh mới cùng hình học, vùng đánh dấu, lối tắt, vật cản và bộ lọc với source,...
bool navmesh3d_build(context &ctx, navmesh3d_handle handle)
Dựng toàn bộ navmesh từ hình học đã thêm.
navmesh3d_handle navmesh3d_create(context &ctx, const navmesh3d_desc &desc={})
Tạo một navmesh trống.
Các tham số
ctxContext của engine.
sourceNavmesh để chép hình học.
descCách dựng navmesh mới.
Giá trị trả về
Handle mới, hoặc handle không hợp lệ nếu source không có hay desc sai.

◆ navmesh3d_set_filter()

void njin::navmesh3d_set_filter ( context & ctx,
navmesh3d_handle handle,
i32 index,
const nav3d_filter & filter )

Đặt bộ lọc số index (0..15) của navmesh.

Bộ lọc 0 là bộ lọc mặc định: mọi hàm tìm đường không chọn bộ lọc và mọi tác tử không đặt filter dùng nó. Tác tử đang đi theo bộ lọc này tìm lại đường ngay. Không cần dựng lại navmesh.

Các tham số
ctxContext của engine.
handleNavmesh.
indexSố bộ lọc, 0..15.
filterBộ lọc.

◆ navmesh3d_filter()

nav3d_filter njin::navmesh3d_filter ( const context & ctx,
navmesh3d_handle handle,
i32 index )

Bộ lọc số index của navmesh.

Các tham số
ctxContext của engine.
handleNavmesh.
indexSố bộ lọc, 0..15.
Giá trị trả về
Bộ lọc, hoặc bộ lọc mặc định nếu handle hay số không hợp lệ.

◆ navmesh3d_add_obstacle()

i32 njin::navmesh3d_add_obstacle ( context & ctx,
navmesh3d_handle handle,
const nav3d_obstacle_desc & desc )

Thêm một vật cản.

Các ô vuông nó chạm vào được dựng lại ở các frame sau (tối đa obstacle_tiles_per_frame ô mỗi frame), rồi tác tử tìm đường vòng qua nó.

Các tham số
ctxContext của engine.
handleNavmesh.
descVật cản.
Giá trị trả về
Số của vật cản, 0 nếu từ chối.

◆ navmesh3d_move_obstacle()

bool njin::navmesh3d_move_obstacle ( context & ctx,
navmesh3d_handle handle,
i32 id,
vec3 position,
f32 yaw = 0.0f )

Dời một vật cản: dựng lại các ô vuông chỗ cũ và chỗ mới.

Các tham số
ctxContext của engine.
handleNavmesh.
idSố do navmesh3d_add_obstacle() trả về.
positionTâm mới.
yawGóc xoay mới, độ.
Giá trị trả về
false nếu không có vật cản này.

◆ navmesh3d_remove_obstacle()

void njin::navmesh3d_remove_obstacle ( context & ctx,
navmesh3d_handle handle,
i32 id )

Bỏ một vật cản: chỗ đó đi được lại sau khi các ô vuông được dựng lại.

Các tham số
ctxContext của engine.
handleNavmesh.
idSố do navmesh3d_add_obstacle() trả về.

◆ navmesh3d_pending_tiles()

i32 njin::navmesh3d_pending_tiles ( const context & ctx,
navmesh3d_handle handle )

Số ô vuông còn chờ dựng lại vì vật cản.

0 là navmesh đã khớp với mọi vật cản.

Các tham số
ctxContext của engine.
handleNavmesh.
Giá trị trả về
Số ô vuông.

◆ navmesh3d_path() [1/2]

bool njin::navmesh3d_path ( const context & ctx,
navmesh3d_handle handle,
vec3 from,
vec3 to,
std::vector< vec3 > & out )

Tìm đường từ from đến to: các điểm gấp khúc, đầu là điểm gần from nhất trên navmesh, cuối là điểm gần to nhất.

Không đến được to thì đường dừng ở chỗ gần nó nhất mà đến được (so điểm cuối với to để biết). Trên địa hình, đoạn nào cắt qua đồi thì có thêm điểm giữa để đường bám mặt đất (cách không quá 5 cm).

Các tham số
ctxContext của engine.
handleNavmesh.
fromĐiểm đi.
toĐiểm đến.
outNhận các điểm (được xóa trước).
Giá trị trả về
true nếu tìm được đường (dù chỉ đến gần to); false nếu from hay to không gần navmesh.

◆ navmesh3d_path() [2/2]

bool njin::navmesh3d_path ( const context & ctx,
navmesh3d_handle handle,
vec3 from,
vec3 to,
std::vector< vec3 > & out,
i32 filter )

Như bản trên, theo bộ lọc số filter (navmesh3d_set_filter()): chi phí từng vùng, vùng cấm.

Các tham số
ctxContext của engine.
handleNavmesh.
fromĐiểm đi.
toĐiểm đến.
outNhận các điểm (được xóa trước).
filterSố bộ lọc, 0..15.
Giá trị trả về
Như bản trên.

◆ navmesh3d_nearest()

bool njin::navmesh3d_nearest ( const context & ctx,
navmesh3d_handle handle,
vec3 p,
vec3 & out,
vec3 extents = {2.0f, 4.0f, 2.0f} )

Điểm gần p nhất trên navmesh, tìm trong hộp nửa cỡ extents quanh p.

Các tham số
ctxContext của engine.
handleNavmesh.
pĐiểm.
outNhận điểm tìm được.
extentsNửa cỡ hộp tìm, mét.
Giá trị trả về
true nếu có.

◆ navmesh3d_raycast()

nav3d_ray njin::navmesh3d_raycast ( const context & ctx,
navmesh3d_handle handle,
vec3 from,
vec3 to )

Đi thẳng trên mặt navmesh từ from về phía to và dừng ở mép đầu tiên: có nhìn thấy nhau theo mặt đất không, lao tới được bao xa.

Các tham số
ctxContext của engine.
handleNavmesh.
fromĐiểm đi (gần navmesh).
toĐiểm đến.
Giá trị trả về
Kết quả; point của lần không trúng là to chiếu lên navmesh.

◆ navmesh3d_random_point()

bool njin::navmesh3d_random_point ( context & ctx,
navmesh3d_handle handle,
vec3 & out )

Một điểm ngẫu nhiên trên navmesh (các chỗ đi được có xác suất theo diện tích).

Các tham số
ctxContext của engine.
handleNavmesh.
outNhận điểm.
Giá trị trả về
true nếu có.

◆ navmesh3d_random_point_near()

bool njin::navmesh3d_random_point_near ( context & ctx,
navmesh3d_handle handle,
vec3 center,
f32 radius,
vec3 & out )

Một điểm ngẫu nhiên trên navmesh, cách center không quá radius và đi tới được từ đó: chỗ quái đi lang thang quanh ổ.

Các tham số
ctxContext của engine.
handleNavmesh.
centerTâm.
radiusBán kính, mét.
outNhận điểm.
Giá trị trả về
true nếu có.

◆ navmesh3d_draw_debug()

void njin::navmesh3d_draw_debug ( context & ctx,
navmesh3d_handle handle,
rgba color = {0.2f, 0.8f, 1.0f, 1.0f} )

Vẽ các đa giác của navmesh bằng gizmo (njin_gizmo.h) trong frame này: mép đa giác, mép ngoài đậm hơn, và các lối tắt.

Các tham số
ctxContext của engine.
handleNavmesh.
colorMàu.

◆ nav3d_agent_add()

nav3d_agent_handle njin::nav3d_agent_add ( context & ctx,
navmesh3d_handle navmesh,
const nav3d_agent_desc & desc )

Thêm một tác tử.

Nó đứng yên đến khi có đích (nav3d_agent_set_target()). Mọi tác tử được engine cập nhật trong phase_post_update theo delta().

Các tham số
ctxContext của engine.
navmeshNavmesh đã dựng.
descTác tử.
Giá trị trả về
Handle, hoặc handle không hợp lệ nếu navmesh chưa dựng, đã đủ max_agents, hay position không gần navmesh.

◆ nav3d_agent_remove()

void njin::nav3d_agent_remove ( context & ctx,
nav3d_agent_handle agent )

Bỏ một tác tử.

Handle không hợp lệ bị bỏ qua.

Các tham số
ctxContext của engine.
agentTác tử.

◆ nav3d_agent_set_target()

bool njin::nav3d_agent_set_target ( context & ctx,
nav3d_agent_handle agent,
vec3 target )

Đặt đích: tác tử tìm đường và đi tới đó (đích được kéo về chỗ gần nhất trên navmesh).

Gọi lại khi đích di chuyển (đuổi theo người chơi) là đủ, không tốn gì thêm khi đích đổi ít.

Các tham số
ctxContext của engine.
agentTác tử.
targetĐích.
Giá trị trả về
false nếu đích không gần navmesh.

◆ nav3d_agent_set_filter()

void njin::nav3d_agent_set_filter ( context & ctx,
nav3d_agent_handle agent,
i32 filter )

Đổi bộ lọc tác tử tìm đường theo (người lính có chìa khóa đi được qua cửa khóa).

Tác tử đang có đích tìm lại đường ngay.

Các tham số
ctxContext của engine.
agentTác tử.
filterSố bộ lọc, 0..15.

◆ nav3d_agent_stop()

void njin::nav3d_agent_stop ( context & ctx,
nav3d_agent_handle agent )

Bỏ đích: tác tử dừng lại (vẫn tách khỏi tác tử khác).

Các tham số
ctxContext của engine.
agentTác tử.

◆ nav3d_agent_teleport()

bool njin::nav3d_agent_teleport ( context & ctx,
nav3d_agent_handle agent,
vec3 position )

Đặt tác tử sang chỗ khác ngay (dịch chuyển tức thời), bỏ đích.

Các tham số
ctxContext của engine.
agentTác tử.
positionChỗ mới (được kéo về navmesh).
Giá trị trả về
false nếu chỗ đó không gần navmesh.

◆ nav3d_agent_position()

vec3 njin::nav3d_agent_position ( const context & ctx,
nav3d_agent_handle agent )

Vị trí hiện tại của tác tử (trên mặt navmesh).

Các tham số
ctxContext của engine.
agentTác tử.
Giá trị trả về
Vị trí, hoặc (0, 0, 0) nếu handle không hợp lệ.

◆ nav3d_agent_velocity()

vec3 njin::nav3d_agent_velocity ( const context & ctx,
nav3d_agent_handle agent )

Vận tốc hiện tại của tác tử: hướng nó đang đi, để quay mặt và chọn animation.

Các tham số
ctxContext của engine.
agentTác tử.
Giá trị trả về
Vận tốc, mét mỗi giây.

◆ nav3d_agent_arrived()

bool njin::nav3d_agent_arrived ( const context & ctx,
nav3d_agent_handle agent )

Tác tử đã tới đích chưa (cách đích không quá arrive_distance).

Các tham số
ctxContext của engine.
agentTác tử.
Giá trị trả về
true nếu đã tới, false nếu đang đi hay không có đích.

◆ nav3d_agent_count()

i32 njin::nav3d_agent_count ( const context & ctx,
navmesh3d_handle navmesh )

Số tác tử đang có trên một navmesh.

Các tham số
ctxContext của engine.
navmeshNavmesh.
Giá trị trả về
Số tác tử.

Thông tin về các biến

◆ nav3d_max_areas

i32 njin::nav3d_max_areas = 16
constexpr

Số loại vùng: vùng 0 đến 15.

Vùng 0 là mặt đất thường, mọi chỗ chưa đánh dấu. Số còn lại game tự đặt nghĩa (đường, cỏ, đầm lầy, nước nông, cửa...).