Bevy
Halaman ini diterjemahkan daripada bahasa Inggeris. Jika kedua-duanya berbeza, halaman bahasa Inggeris adalah yang betul. Baca halaman bahasa Inggeris
bevy_lingara ialah pemalam Bevy di atas teras pemain Lingara. Tambahkannya pada aplikasi anda, beritahu cara untuk sampai ke pelayan anda bagi mendapatkan token, dan baca apa yang dihantar oleh Lingara sebagai Bevy Messages biasa.
Tambahkan pemalam
Tambahkan crate pada permainan anda, kemudian tambahkan LingaraPlugin pada aplikasi anda dengan LingaraConfig.
Dapatkan token daripada pelayan anda
Pemalam tidak pernah menyimpan rahsia. Apabila ia memerlukan token, ia meminta daripada pelayan anda sendiri, yang mencetak token dengan kit pelayan dan menjawab dengan token serta tempoh tamatnya.
Terdapat dua cara untuk menjawab. Dalam kes biasa, berikan konfigurasi laluan token pelayan anda dan sebarang pengepala yang diperlukan oleh sesi anda, dan pemalam memanggilnya untuk anda. Atau biarkan laluan itu tidak ditetapkan dan jawab setiap Message LingaraTokenNeeded sendiri dengan ProvideToken, menggunakan apa jua log masuk yang sudah ada pada permainan anda.
Baca acara sekali setiap bingkai
Teras menjalankan I/O rangkaiannya pada benangnya sendiri dan tidak pernah memanggil kod anda. Pemalam mengosongkan barisannya sekali setiap bingkai dan menukar apa yang tiba menjadi Messages yang dibaca oleh sistem anda seperti Message lain:
LingaraEventReceiveduntuk acara tentang pemain, seperti pelan pelajaran yang sudah sedia;NpcTranscript, komponen pada setiap watak yang bertambah semasa balasan distrim masuk (lihat dialog NPC);PracticeFinishedapabila sesi latihan tamat (lihat hasil latihan).
Tiada apa-apa yang menyekat bingkai: rangkaian yang perlahan hanya kelihatan sebagai Message yang tiba sedikit lewat.
Bevy
cargo add bevy_lingara@0.1.0-alpha.6Bevy
/// The common case: the plugin POSTs to your own server's token route, with
/// your game's session as a header, and reads `{token, expires_at}`.
fn lingara_config(session_header: bevy_lingara::lingara_embed::Header) -> LingaraConfig {
LingaraConfig::new()
.token_endpoint("https://game.example.com/lingara-token", vec![session_header])
.source_lang("en")
}
/// Or keep the session in ECS: leave the token endpoint unset, answer each
/// `LingaraTokenNeeded` with what your server returned.
fn answer_token_requests(mut needed: MessageReader<LingaraTokenNeeded>, mut provide: MessageWriter<ProvideToken>) {
for _request in needed.read() {
let (token, expires_at) = fetch_from_your_server();
provide.write(ProvideToken::new(token, expires_at));
}
}Bevy
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(LingaraPlugin::new(lingara_config(header)))
.add_systems(Update, on_lingara_event)
/// The plugin drains Lingara's events once per frame: read them as Messages.
fn on_lingara_event(mut events: MessageReader<LingaraEventReceived>) {
for LingaraEventReceived(event) in events.read() {
info!("{}: {}", event.event_type, event.data_json);
}
}