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
njin::collider Struct Tham chiếu

Hình va chạm của một entity. Tiếp...

#include <njin_collision.h>

Các thuộc tính Public

collider_shape shape = collider_box
 Hình.
vec2 size {16.0f, 16.0f}
 Kích thước hình hộp.
f32 radius = 8.0f
 Bán kính hình tròn.
vec2 offset {}
 Độ lệch của tâm so với transform.pos.
u32 layer = layer_bit(0)
 Các lớp collider này thuộc về.
u32 mask = layer_all
 Các lớp collider này va chạm với.
bool trigger = false
 Chỉ báo chồng nhau, không chặn đường: vùng nhặt đồ, vùng sát thương, cửa chuyển màn.
bool enabled = true
 Tắt tạm mà không gỡ component.
bool one_way = false
 Bục một chiều (chỉ với hình hộp): collision_move() chỉ bị chặn khi rơi từ trên xuống mặt trên của nó; đi ngang hay nhảy từ dưới lên thì xuyên qua.

Mô tả chi tiết

Hình va chạm của một entity.

Cần một transform trên cùng entity.

Module collision của engine, trong phase_post_update (sau khi transform của entity con đã được tính), tìm mọi cặp collider đang chồng nhau và gửi event njin::collision_enter, njin::collision_stay, njin::collision_exit qua events(). Game nhận chúng bằng events(ctx).sink<...>().connect<...>().

Hai collider A và B chỉ được xét khi cả hai chiều đều cho phép: (A.mask & B.layer) != 0 và (B.mask & A.layer) != 0, giống Box2D.

Tâm của hình là transform.pos cộng offset; offset, size và radius nhân với transform.scale, và offset xoay theo transform.rot (nên hitbox gắn ở đầu kiếm đi theo lưỡi kiếm), nhưng bản thân hình hộp luôn thẳng trục.

Thông tin về Member Data

◆ trigger

bool njin::collider::trigger = false

Chỉ báo chồng nhau, không chặn đường: vùng nhặt đồ, vùng sát thương, cửa chuyển màn.

collision_move() đi xuyên qua trigger; raycast mặc định bỏ qua.

◆ enabled

bool njin::collider::enabled = true

Tắt tạm mà không gỡ component.

Tắt thì có exit.