Bevy
Halaman ini diterjemahkan dari bahasa Inggris. Jika keduanya berbeda, halaman bahasa Inggris yang benar. Baca halaman bahasa Inggris
bevy_lingara adalah plugin Bevy di atas inti pemain Lingara. Tambahkan ke aplikasi Anda, beri tahu cara menjangkau server Anda untuk mendapatkan token, dan baca apa yang dikirim Lingara sebagai Bevy Messages biasa.
Tambahkan plugin
Tambahkan crate ke game Anda, lalu tambahkan LingaraPlugin ke aplikasi Anda dengan sebuah LingaraConfig.
Dapatkan token dari server Anda
Plugin tidak pernah menyimpan secret. Saat membutuhkan token, plugin meminta ke server Anda sendiri, yang mencetak token dengan kit server dan menjawab dengan token beserta waktu kedaluwarsanya.
Ada dua cara untuk menjawab. Dalam kasus umum, berikan konfigurasi rute token server Anda dan header apa pun yang dibutuhkan sesi Anda, dan plugin memanggilnya untuk Anda. Atau biarkan rute tidak diatur dan jawab sendiri setiap Message LingaraTokenNeeded dengan sebuah ProvideToken, menggunakan cara masuk apa pun yang sudah dimiliki game Anda.
Baca event sekali per frame
Inti menjalankan I/O jaringannya di thread-nya sendiri dan tidak pernah memanggil kode Anda. Plugin mengosongkan antreannya sekali per frame dan mengubah apa yang tiba menjadi Messages yang dibaca sistem Anda seperti Message lainnya:
LingaraEventReceiveduntuk event tentang pemain, seperti rencana pelajaran yang sudah siap;NpcTranscript, komponen pada setiap karakter yang bertambah selama balasan mengalir masuk (lihat dialog NPC);PracticeFinishedsaat sesi latihan berakhir (lihat hasil latihan).
Tidak ada yang memblokir frame: jaringan yang lambat hanya terlihat sebagai Message yang tiba sedikit lebih lambat.
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);
}
}