Bevy
Bu sayfa İngilizceden çevrilmiştir. İkisi arasında fark varsa İngilizce sayfa doğrudur. İngilizce sayfayı oku
bevy_lingara, Lingara’nın oyuncu çekirdeği üzerine kurulu bir Bevy eklentisidir. Onu uygulamanıza ekleyin, belirteçler için sunucunuza nasıl ulaşacağını söyleyin ve Lingara’nın gönderdiklerini sıradan Bevy Message’ları olarak okuyun.
Eklentiyi ekleyin
Crate’i oyununuza ekleyin, ardından LingaraPlugin eklentisini bir LingaraConfig ile uygulamanıza ekleyin.
Belirteçleri sunucunuzdan alın
Eklenti hiçbir zaman bir gizli anahtar tutmaz. Bir belirtece ihtiyaç duyduğunda kendi sunucunuza sorar; sunucunuz bir sunucu kiti ile bir belirteç üretir ve belirteci ve son kullanma zamanını yanıt olarak döndürür.
Yanıt vermenin iki yolu vardır. Yaygın durumda yapılandırmaya sunucunuzun belirteç rotasını ve oturumunuzun gerektirdiği başlığı verin; eklenti rotayı sizin için çağırır. Ya da rotayı boş bırakın ve oyununuzda zaten bulunan oturum açma yöntemini kullanarak her LingaraTokenNeeded Message’ını bir ProvideToken ile kendiniz yanıtlayın.
Olayları her karede bir kez okuyun
Çekirdek ağ I/O’sunu kendi iş parçacığında yürütür ve hiçbir zaman sizin kodunuzu çağırmaz. Eklenti kuyruğunu her karede bir kez boşaltır ve gelenleri, sistemlerinizin diğer her Message gibi okuduğu Message’lara dönüştürür:
- oyuncuyla ilgili bir olay için, örneğin bir ders planının hazır olması,
LingaraEventReceived; NpcTranscript, her karakter üzerinde bulunan ve bir yanıt akarken büyüyen bir bileşen (bkz. NPC diyaloğu);- bir alıştırma oturumu sona erdiğinde
PracticeFinished(bkz. alıştırma sonuçları).
Hiçbir şey bir kareyi engellemez: yavaş bir ağ, bir Message’ın biraz daha geç gelmesi olarak görünür.
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);
}
}