Bevy
Αυτή η σελίδα έχει μεταφραστεί από τα αγγλικά. Αν οι δύο διαφέρουν, η αγγλική σελίδα είναι η σωστή. Διαβάστε την αγγλική σελίδα
Το bevy_lingara είναι ένα plugin του Bevy πάνω από τον πυρήνα παίκτη του Lingara. Προσθέστε το στην εφαρμογή σας, πείτε του πώς να φτάνει στον διακομιστή σας για token και διαβάστε ό,τι στέλνει το Lingara ως συνηθισμένα Messages του Bevy.
Προσθήκη του plugin
Προσθέστε το crate στο παιχνίδι σας και έπειτα προσθέστε το LingaraPlugin στην εφαρμογή σας με ένα LingaraConfig.
Λήψη token από τον διακομιστή σας
Το plugin δεν κρατά ποτέ κανένα μυστικό. Όταν χρειάζεται ένα token, το ζητά από τον δικό σας διακομιστή, ο οποίος εκδίδει ένα με ένα κιτ διακομιστή και απαντά με το token και τη λήξη του.
Υπάρχουν δύο τρόποι να απαντήσετε. Στη συνηθισμένη περίπτωση, δίνετε στη διαμόρφωση τη διαδρομή token του διακομιστή σας και όποια κεφαλίδα χρειάζεται η συνεδρία σας, και το plugin την καλεί για εσάς. Ή αφήνετε τη διαδρομή κενή και απαντάτε εσείς σε κάθε Message LingaraTokenNeeded με ένα ProvideToken, χρησιμοποιώντας όποια σύνδεση έχει ήδη το παιχνίδι σας.
Ανάγνωση συμβάντων μία φορά ανά καρέ
Ο πυρήνας εκτελεί το δικτυακό του I/O στο δικό του νήμα και δεν καλεί ποτέ τον κώδικά σας. Το plugin αδειάζει την ουρά του μία φορά ανά καρέ και μετατρέπει ό,τι έφτασε σε Messages που τα συστήματά σας διαβάζουν όπως κάθε άλλο:
LingaraEventReceivedγια ένα συμβάν που αφορά τον παίκτη, όπως ένα σχέδιο μαθήματος που γίνεται έτοιμο·NpcTranscript, ένα component σε κάθε χαρακτήρα που μεγαλώνει καθώς φτάνει σε ροή μια απάντηση (δείτε Διάλογοι με NPC)·PracticeFinishedόταν τελειώνει μια συνεδρία εξάσκησης (δείτε αποτελέσματα εξάσκησης).
Τίποτα δεν μπλοκάρει ένα καρέ: ένα αργό δίκτυο εμφανίζεται ως ένα Message που φτάνει λίγο αργότερα.
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);
}
}