Bevy
Trang này được dịch từ tiếng Anh. Nếu hai bản khác nhau, trang tiếng Anh là bản đúng. Đọc trang tiếng Anh
bevy_lingara là một plugin Bevy xây dựng trên lõi người chơi của Lingara. Hãy thêm nó vào ứng dụng của bạn, cho nó biết cách liên hệ với máy chủ của bạn để lấy mã, và đọc những gì Lingara gửi dưới dạng các Message Bevy thông thường.
Thêm plugin
Thêm crate vào trò chơi của bạn, rồi thêm LingaraPlugin vào ứng dụng cùng với một LingaraConfig.
Lấy mã từ máy chủ của bạn
Plugin không bao giờ giữ khóa bí mật. Khi cần một mã, nó hỏi máy chủ của chính bạn; máy chủ cấp một mã bằng bộ công cụ máy chủ và trả lời bằng mã cùng thời điểm hết hạn của nó.
Có hai cách để trả lời. Trong trường hợp phổ biến, hãy cung cấp cho cấu hình tuyến cấp mã của máy chủ và bất kỳ tiêu đề nào phiên của bạn cần, và plugin sẽ gọi tuyến đó thay bạn. Hoặc để trống tuyến và tự trả lời từng Message LingaraTokenNeeded bằng một ProvideToken, dùng bất kỳ cơ chế đăng nhập nào trò chơi của bạn đã có.
Đọc sự kiện một lần mỗi khung hình
Lõi chạy I/O mạng trên luồng riêng của nó và không bao giờ gọi vào mã của bạn. Plugin rút hàng đợi của lõi một lần mỗi khung hình và biến những gì đã đến thành các Message mà các hệ thống của bạn đọc như mọi Message khác:
LingaraEventReceivedcho một sự kiện về người chơi, chẳng hạn một kế hoạch bài học đã sẵn sàng;NpcTranscript, một thành phần trên mỗi nhân vật, lớn dần khi câu trả lời được truyền về (xem hội thoại NPC);PracticeFinishedkhi một phiên luyện tập kết thúc (xem kết quả luyện tập).
Không có gì chặn một khung hình: mạng chậm chỉ khiến một Message đến muộn hơn một chút.
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);
}
}