Bevy
Isinalin mula sa Ingles ang pahinang ito. Kung magkaiba ang dalawa, ang pahinang Ingles ang tama. Basahin ang pahinang Ingles
Ang bevy_lingara ay isang Bevy plugin na nakapatong sa player core ng Lingara. Idagdag ito sa iyong app, sabihin dito kung paano maaabot ang iyong server para sa mga token, at basahin ang ipinapadala ng Lingara bilang karaniwang mga Bevy Message.
Idagdag ang plugin
Idagdag ang crate sa iyong laro, saka idagdag ang LingaraPlugin sa iyong app kasama ang isang LingaraConfig.
Kumuha ng mga token mula sa iyong server
Hindi kailanman humahawak ng secret ang plugin. Kapag kailangan nito ng token, humihingi ito sa sarili mong server, na nagmi-mint ng isa gamit ang isang server kit at sumasagot gamit ang token at ang expiry nito.
May dalawang paraan para sumagot. Sa karaniwang kaso, ibigay sa config ang token route ng iyong server at anumang header na kailangan ng iyong session, at ang plugin na ang tatawag dito para sa iyo. O iwanang walang laman ang route at sagutin mo mismo ang bawat LingaraTokenNeeded na Message gamit ang isang ProvideToken, gamit ang anumang sign-in na mayroon na ang iyong laro.
Basahin ang mga event nang isang beses bawat frame
Pinapatakbo ng core ang network I/O nito sa sarili nitong thread at hindi kailanman tumatawag sa iyong code. Inuubos ng plugin ang queue nito nang isang beses bawat frame at ginagawang mga Message ang mga dumating, na binabasa ng iyong mga system gaya ng iba pa:
LingaraEventReceivedpara sa isang event tungkol sa player, gaya ng pagiging handa ng isang plano ng aralin;NpcTranscript, isang component sa bawat karakter na lumalaki habang nag-i-stream papasok ang isang sagot (tingnan ang usapan ng NPC);PracticeFinishedkapag natapos ang isang practice session (tingnan ang mga resulta ng pagsasanay).
Walang humaharang sa isang frame: lumalabas ang mabagal na network bilang isang Message na dumarating nang medyo huli.
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);
}
}