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. | |
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.
| 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.
| bool njin::collider::enabled = true |
Tắt tạm mà không gỡ component.
Tắt thì có exit.