Đăng ký module, system, phase; truy cập registry và event của EnTT. Tiếp...
Classes | |
| struct | njin::sys_desc |
| Mô tả một system kèm ràng buộc thứ tự, dùng với ecs_register(). Tiếp... | |
| struct | njin::mod_desc |
| Mô tả một module: một nhóm system có tên. Tiếp... | |
Typedefs | |
| using | njin::sys_fnc = void (*)(context &ctx) |
| Một system là một hàm thường nhận context của engine. | |
Enumerations | |
| enum | njin::sys_phase { njin::phase_startup , njin::phase_pre_update , njin::phase_fixed_update , njin::phase_update , njin::phase_post_update , njin::phase_pre_render , njin::phase_render , njin::phase_post_render , njin::phase_shutdown , njin::phase_count } |
| Các phase của một frame, chạy theo đúng thứ tự khai báo. Tiếp... | |
Các hàm | |
| entt::registry & | njin::world (context &ctx) |
| Trả về registry của EnTT chứa mọi entity và component của game. | |
| entt::dispatcher & | njin::events (context &ctx) |
| Trả về dispatcher của EnTT để gửi và nhận event giữa các system. | |
| void | njin::ecs_register (context &ctx, sys_phase phase, sys_fnc fnc, const char *name=nullptr) |
| Thêm một system vào lịch chạy của một phase. | |
| void | njin::ecs_register (context &ctx, sys_phase phase, const sys_desc &desc) |
| Thêm một system kèm ràng buộc thứ tự vào lịch chạy của một phase. | |
| void | njin::mod_register (context &ctx, const mod_desc &desc) |
| Chạy setup của module và đưa các system của nó vào lịch chạy. | |
| void | njin::mod_register (context &ctx, std::initializer_list< mod_desc > mods) |
| Đăng ký nhiều module một lần, theo đúng thứ tự trong danh sách. | |
| void | njin::mod_register (context &ctx, std::span< const mod_desc > mods) |
| Đăng ký nhiều module từ một danh sách tạo lúc chạy, ví dụ một std::vector<mod_desc> hay std::array. | |
Đăng ký module, system, phase; truy cập registry và event của EnTT.
| using njin::sys_fnc = void (*)(context &ctx) |
Một system là một hàm thường nhận context của engine.
System được đăng ký vào một sys_phase bằng ecs_register() và được gọi mỗi lần phase đó chạy.
| enum njin::sys_phase |
Các phase của một frame, chạy theo đúng thứ tự khai báo.
phase_startup chạy một lần trước frame đầu tiên và phase_shutdown chạy một lần sau khi cửa sổ đóng. Các phase còn lại chạy mỗi frame.
phase_pre_render, phase_render và phase_post_render chạy giữa lúc bắt đầu và kết thúc vẽ. Module camera của engine vẽ phase_render trong không gian thế giới (qua camera đang dùng) và phase_post_render trong không gian màn hình, nên dùng phase_post_render cho UI.
phase_fixed_update chạy theo nhịp cố định (mặc định 60 lần mỗi giây, xem config::fixed_hz): 0, 1 hay nhiều lần trong một frame tùy FPS. Trong phase này delta() trả về đúng một nhịp. Đặt vật lý ở đây để kết quả không phụ thuộc FPS.
| entt::registry & njin::world | ( | context & | ctx | ) |
Trả về registry của EnTT chứa mọi entity và component của game.
EnTT là một phần của API module, nên system có thể tự định nghĩa component và truy vấn registry trực tiếp.
| ctx | Context của engine. |
| entt::dispatcher & njin::events | ( | context & | ctx | ) |
Trả về dispatcher của EnTT để gửi và nhận event giữa các system.
Event đã enqueue được phát ngay sau phase_post_update.
| ctx | Context của engine. |
| void njin::ecs_register | ( | context & | ctx, |
| sys_phase | phase, | ||
| sys_fnc | fnc, | ||
| const char * | name = nullptr ) |
Thêm một system vào lịch chạy của một phase.
Chỉ hợp lệ bên trong callback setup của module. Gọi ở nơi khác sẽ bị bỏ qua và ghi cảnh báo. Các module chạy theo thứ tự đăng ký.
| ctx | Context của engine. |
| phase | Phase mà system chạy trong đó. |
| fnc | Hàm system. |
| name | Tên system, hiện trong njin_inspector. Có thể null. |
Thêm một system kèm ràng buộc thứ tự vào lịch chạy của một phase.
Trong cùng một module và phase, các system được sắp theo sys_desc (xem _mod.h): ràng buộc after/before được đảm bảo trước, sau đó system có order nhỏ hơn chạy trước, còn bằng nhau thì theo thứ tự đăng ký.
| ctx | Context của engine. |
| phase | Phase mà system chạy trong đó. |
| desc | Mô tả system và thứ tự của nó. |
| void njin::mod_register | ( | context & | ctx, |
| const mod_desc & | desc ) |
Chạy setup của module và đưa các system của nó vào lịch chạy.
Phải gọi trước run(). Tên module chỉ được đăng ký một lần.
| ctx | Context của engine. |
| desc | Mô tả module. |
| void njin::mod_register | ( | context & | ctx, |
| std::initializer_list< mod_desc > | mods ) |
Đăng ký nhiều module một lần, theo đúng thứ tự trong danh sách.
Giống hệt gọi mod_register() cho từng module lần lượt: module đứng trước chạy trước trong cùng phase, và một module lỗi (trùng tên, đăng ký sau run()) chỉ bị bỏ qua riêng nó.
| ctx | Context của engine. |
| mods | Các module, theo thứ tự đăng ký. |