Event Bus
Event bus adalah cara utama buat nempel ke hook CampAPI.
Pakai ModuleScope supaya bersih otomatis
ModuleScope ngelompokin listener jadi satu. Begitu scope hilang, listener di dalamnya ikut dibersihkan otomatis.
cpp
CampAPI::ModuleScope scope;Menambah listener
cpp
scope.AddListener<BeforeRenderScreenEvent>([](BeforeRenderScreenEvent& event) {
event.Cancel();
});Urutan listener
Listener dijalankan sesuai urutan daftar. Kalau kamu butuh kebalikan urutannya, bus juga punya ReverseInvoke().
Berguna untuk apa?
- memblokir hook render
- mengonsumsi input supaya handler lain tidak ikut memproses
- memantau event lifecycle client
- nyambungin perilaku startup dan shutdown mod
Contoh: stop render layar
cpp
CampAPI::ModuleScope scope;
scope.AddListener<BeforeRenderScreenEvent>([](BeforeRenderScreenEvent& event) {
if (event.isDebugOrToastScreen) {
return;
}
event.Cancel();
});Contoh: tangani tombol
cpp
CampAPI::ModuleScope scope;
scope.AddListener<OnKeyEvent>([](OnKeyEvent& event) {
if (event.isKeyDown && event.keyCode == 66) {
event.Consume();
}
});Kapan pakai event yang bisa dibatalkan?
Pakai event yang bisa dibatalkan kalau kode kamu memang perlu menghentikan aksi default.
cpp
scope.AddListener<CancelableClientInstanceEvent>([](CancelableClientInstanceEvent& event) {
event.Cancel();
});