Lingara Lingara Documentatie Gidsen API Bibliotheken Apps Bouwen Insluiten Webapp
Taal: Nederlands

Bevy

Deze pagina is vertaald uit het Engels. Als de twee verschillen, is de Engelse pagina juist. Lees de Engelse pagina

bevy_lingara is een Bevy-plugin bovenop de spelerkern van Lingara. Voeg hem toe aan je app, vertel hem hoe hij je server bereikt voor tokens, en lees wat Lingara stuurt als gewone Bevy-Messages.

De plugin toevoegen

Voeg de crate toe aan je game en voeg daarna LingaraPlugin met een LingaraConfig toe aan je app.

Tokens van je server krijgen

De plugin bewaart nooit een secret. Als hij een token nodig heeft, vraagt hij het aan je eigen server, die er een uitgeeft met een serverkit en antwoordt met het token en de vervaltijd.

Er zijn twee manieren om te antwoorden. In het gewone geval geef je de configuratie de tokenroute van je server en elke header die je sessie nodig heeft, en roept de plugin die voor je aan. Of je laat de route leeg en beantwoordt elke LingaraTokenNeeded-Message zelf met een ProvideToken, met de aanmelding die je game al heeft.

Events één keer per frame lezen

De kern voert zijn netwerk-I/O uit op een eigen thread en roept nooit jouw code aan. De plugin leegt zijn wachtrij één keer per frame en maakt van wat er binnenkwam Messages die je systemen lezen zoals alle andere:

  • LingaraEventReceived voor een event over de speler, zoals een lesplan dat klaar is;
  • NpcTranscript, een component op elk personage dat groeit terwijl een antwoord binnenstroomt (zie NPC-dialoog);
  • PracticeFinished wanneer een oefensessie eindigt (zie oefenresultaten).

Niets blokkeert een frame: een traag netwerk merk je aan een Message die iets later aankomt.

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