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