Bevy
این صفحه از انگلیسی ترجمه شده است. اگر این دو با هم تفاوت داشته باشند، صفحهٔ انگلیسی درست است. خواندن صفحهٔ انگلیسی
bevy_lingara یک افزونهٔ Bevy است که روی هستهٔ بازیکن Lingara ساخته شده است. آن را به برنامهٔ خود اضافه کنید، به آن بگویید برای گرفتن توکن چگونه به سرور شما برسد، و آنچه Lingara میفرستد را بهصورت پیامهای معمولی Bevy بخوانید.
افزودن افزونه
کریت را به بازی خود اضافه کنید، سپس LingaraPlugin را همراه با یک LingaraConfig به برنامهٔ خود اضافه کنید.
گرفتن توکن از سرور شما
افزونه هرگز رمزی نگه نمیدارد. وقتی به توکن نیاز دارد، آن را از سرور خودتان درخواست میکند، که با یک کیت سرور توکنی صادر میکند و با توکن و زمان انقضای آن پاسخ میدهد.
دو راه برای پاسخ دادن هست. در حالت معمول، مسیر توکن سرور خود و هر سرآیندی را که نشست شما لازم دارد به پیکربندی بدهید تا افزونه خودش آن را برایتان فراخوانی کند. یا مسیر را تنظیمنشده بگذارید و به هر پیام LingaraTokenNeeded خودتان با یک ProvideToken پاسخ دهید، با هر روش ورودی که بازی شما از قبل دارد.
خواندن رویدادها یک بار در هر فریم
هسته ورودی/خروجی شبکهٔ خود را روی رشتهٔ اجرایی خودش اجرا میکند و هرگز کد شما را فراخوانی نمیکند. افزونه صف آن را یک بار در هر فریم خالی میکند و آنچه رسیده را به پیامهایی تبدیل میکند که سیستمهای شما مانند هر پیام دیگری میخوانند:
LingaraEventReceivedبرای رویدادی دربارهٔ بازیکن، مانند آماده شدن یک برنامهٔ درسی؛NpcTranscript، مؤلفهای روی هر شخصیت که با رسیدن جریانی یک پاسخ بزرگتر میشود (نگاه کنید به گفتوگوی NPC)؛PracticeFinishedوقتی یک جلسهٔ تمرین به پایان میرسد (نگاه کنید به نتایج تمرین).
هیچ چیز یک فریم را متوقف نمیکند: شبکهٔ کند فقط به این شکل دیده میشود که پیامی کمی دیرتر میرسد.
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);
}
}