Bevy
Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés
bevy_lingara es un plugin de Bevy sobre el núcleo de jugador de Lingara. Añádelo a tu aplicación, indícale cómo llegar a tu servidor para obtener tokens y lee lo que envía Lingara como Messages normales de Bevy.
Añadir el plugin
Añade el crate a tu juego y luego añade LingaraPlugin a tu aplicación con una LingaraConfig.
Obtener tokens de tu servidor
El plugin nunca guarda un secreto. Cuando necesita un token, se lo pide a tu propio servidor, que emite uno con un kit de servidor y responde con el token y su caducidad.
Hay dos formas de responder. En el caso habitual, da a la configuración la ruta de tokens de tu servidor y cualquier cabecera que necesite tu sesión, y el plugin la llama por ti. O deja la ruta sin definir y responde tú mismo a cada Message LingaraTokenNeeded con un ProvideToken, usando el inicio de sesión que ya tenga tu juego.
Leer los eventos una vez por fotograma
El núcleo ejecuta su E/S de red en su propio hilo y nunca llama a tu código. El plugin vacía su cola una vez por fotograma y convierte lo que ha llegado en Messages que tus sistemas leen como cualquier otro:
LingaraEventReceivedpara un evento sobre el jugador, como que un plan de lección esté listo;NpcTranscript, un componente en cada personaje que crece a medida que llega una respuesta en streaming (consulta Diálogo con PNJ);PracticeFinishedcuando termina una sesión de práctica (consulta resultados de práctica).
Nada bloquea un fotograma: una red lenta se nota como un Message que llega un poco más tarde.
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);
}
}