Skip to content

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();
});