Lingara Lingara Dokumentation Ratgeber API Bibliotheken Apps Erstellen Einbetten Web-App
Sprache: Deutsch

Bevy

Diese Seite ist aus dem Englischen übersetzt. Wenn die beiden voneinander abweichen, ist die englische Seite maßgeblich. Englische Seite lesen

bevy_lingara ist ein Bevy-Plugin über dem Spieler-Kern von Lingara. Fügen Sie es zu Ihrer App hinzu, teilen Sie ihm mit, wie es Ihren Server für Tokens erreicht, und lesen Sie, was Lingara sendet, als gewöhnliche Bevy-Messages.

Das Plugin hinzufügen

Fügen Sie die Crate zu Ihrem Spiel hinzu und dann LingaraPlugin mit einer LingaraConfig zu Ihrer App.

Tokens von Ihrem Server erhalten

Das Plugin hält nie ein Secret. Wenn es ein Token braucht, fragt es Ihren eigenen Server, der mit einem Server-Kit eines ausstellt und mit dem Token und seinem Ablaufzeitpunkt antwortet.

Es gibt zwei Möglichkeiten zu antworten. Im üblichen Fall geben Sie der Konfiguration die Token-Route Ihres Servers und jeden Header, den Ihre Sitzung braucht, und das Plugin ruft sie für Sie auf. Oder Sie lassen die Route leer und beantworten jede LingaraTokenNeeded-Message selbst mit einem ProvideToken, über die Anmeldung, die Ihr Spiel bereits hat.

Events einmal pro Frame lesen

Der Kern führt seine Netzwerk-I/O in einem eigenen Thread aus und ruft nie Ihren Code auf. Das Plugin leert seine Warteschlange einmal pro Frame und macht aus dem, was angekommen ist, Messages, die Ihre Systeme wie jede andere lesen:

  • LingaraEventReceived für ein Event zum Spieler, etwa wenn ein Lektionsplan fertig wird;
  • NpcTranscript, eine Komponente an jeder Figur, die wächst, während eine Antwort hereinströmt (siehe NPC-Dialoge);
  • PracticeFinished, wenn eine Übungseinheit endet (siehe Übungsergebnisse).

Nichts blockiert einen Frame: Ein langsames Netzwerk zeigt sich als Message, die etwas später ankommt.

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