Lingara Lingara Documentation Guides API Bibliothèques Applications Créer Intégration Application web
Langue: Français

Bevy

Cette page est traduite de l'anglais. En cas de différence, la page anglaise fait foi. Lire la page en anglais

bevy_lingara est un plugin Bevy construit sur le cœur joueur de Lingara. Ajoutez-le à votre application, indiquez-lui comment joindre votre serveur pour obtenir des jetons, et lisez ce que Lingara envoie comme des Messages Bevy ordinaires.

Ajouter le plugin

Ajoutez la crate à votre jeu, puis ajoutez LingaraPlugin à votre application avec une LingaraConfig.

Obtenir des jetons depuis votre serveur

Le plugin ne détient jamais de secret. Lorsqu’il a besoin d’un jeton, il le demande à votre propre serveur, qui en émet un avec un kit serveur et répond avec le jeton et son expiration.

Il y a deux façons de répondre. Dans le cas courant, donnez à la configuration la route de jetons de votre serveur et tout en-tête dont votre session a besoin, et le plugin l’appelle pour vous. Ou bien laissez la route vide et répondez vous-même à chaque Message LingaraTokenNeeded avec un ProvideToken, en utilisant la connexion dont votre jeu dispose déjà.

Lire les événements une fois par frame

Le cœur exécute ses E/S réseau sur son propre thread et n’appelle jamais votre code. Le plugin vide sa file une fois par frame et transforme ce qui est arrivé en Messages que vos systèmes lisent comme n’importe quels autres :

  • LingaraEventReceived pour un événement concernant le joueur, par exemple un plan de cours qui devient prêt ;
  • NpcTranscript, un composant sur chaque personnage qui s’allonge à mesure qu’une réponse arrive en flux (voir Dialogue de PNJ) ;
  • PracticeFinished lorsqu’une séance de pratique se termine (voir résultats de pratique).

Rien ne bloque une frame : un réseau lent se traduit simplement par un Message qui arrive un peu plus tard.

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