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:
LingaraEventReceivedvoor 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);PracticeFinishedwanneer 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.6Bevy
/// 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);
}
}