Lingara Lingara Documentazione Guide API Librerie App Crea Incorporare App web
Lingua: Italiano

Bevy

Questa pagina è tradotta dall'inglese. Se le due versioni differiscono, fa fede la pagina in inglese. Leggi la pagina in inglese

bevy_lingara è un plugin Bevy sopra il player core di Lingara. Aggiungilo alla tua app, indicagli come raggiungere il tuo server per i token e leggi ciò che Lingara invia come normali Message di Bevy.

Aggiungere il plugin

Aggiungi il crate al tuo gioco, poi aggiungi LingaraPlugin alla tua app con una LingaraConfig.

Ottenere i token dal tuo server

Il plugin non conserva mai un segreto. Quando ha bisogno di un token, lo chiede al tuo server, che ne emette uno con un kit server e risponde con il token e la sua scadenza.

Ci sono due modi per rispondere. Nel caso più comune, fornisci alla configurazione la route dei token del tuo server e qualsiasi header richiesto dalla tua sessione, e il plugin la chiama per te. Oppure lascia la route non impostata e rispondi tu stesso a ogni Message LingaraTokenNeeded con un ProvideToken, usando l’accesso che il tuo gioco ha già.

Leggere gli eventi una volta per frame

Il core esegue il suo I/O di rete su un proprio thread e non chiama mai il tuo codice. Il plugin svuota la sua coda una volta per frame e trasforma ciò che è arrivato in Message che i tuoi sistemi leggono come qualsiasi altro:

  • LingaraEventReceived per un evento che riguarda il giocatore, ad esempio un piano di lezione che diventa pronto;
  • NpcTranscript, un componente su ogni personaggio che cresce man mano che una risposta arriva in streaming (vedi Dialoghi con gli NPC);
  • PracticeFinished quando una sessione di pratica termina (vedi risultati della pratica).

Nulla blocca un frame: una rete lenta si traduce in un Message che arriva un po’ più tardi.

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