Lingara Lingara Belgeler Rehberler API Kütüphaneler Uygulamalar Oluştur Gömme Web uygulaması
Dil: Türkçe

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.6

Bevy

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