Lingara Lingara المستندات أدلة التعلّم API المكتبات التطبيقات البناء التضمين تطبيق الويب
اللغة: العربية

Bevy

هذه الصفحة مترجمة من الإنجليزية. إذا اختلفت النسختان، فالصفحة الإنجليزية هي الصحيحة. اقرأ الصفحة الإنجليزية

bevy_lingara إضافة Bevy مبنية فوق نواة اللاعب في Lingara. أضِفها إلى تطبيقك، وأخبرها كيف تصل إلى خادمك للحصول على الرموز، واقرأ ما ترسله Lingara على شكل رسائل Bevy عادية.

أضِف الإضافة

أضِف الحزمة إلى لعبتك، ثم أضِف LingaraPlugin إلى تطبيقك مع LingaraConfig.

احصل على الرموز من خادمك

لا تحتفظ الإضافة بأي سرّ أبدًا. عندما تحتاج إلى رمز، تطلبه من خادمك أنت، فيُصدر رمزًا باستخدام حزمة خادم ويجيب بالرمز وموعد انتهاء صلاحيته.

هناك طريقتان للإجابة. في الحالة الشائعة، أعطِ الإعدادات مسار الرموز في خادمك وأي ترويسة تحتاجها جلستك، فتستدعيه الإضافة نيابةً عنك. أو اترك المسار دون تعيين وأجب بنفسك عن كل رسالة LingaraTokenNeeded باستخدام ProvideToken، مستعينًا بأي طريقة لتسجيل الدخول تملكها لعبتك أصلًا.

اقرأ الأحداث مرة واحدة في كل إطار

تشغّل النواة عمليات الإدخال والإخراج الشبكية على خيطها الخاص، ولا تستدعي شيفرتك أبدًا. تُفرغ الإضافة طابورها مرة واحدة في كل إطار، وتحوّل ما وصل إلى رسائل تقرؤها أنظمتك مثل أي رسائل أخرى:

  • LingaraEventReceived لحدث يخصّ اللاعب، مثل أن تصبح خطة درس جاهزة؛
  • NpcTranscript، مكوّن على كل شخصية ينمو كلما تدفّق رد (انظر حوار NPC)؛
  • PracticeFinished عند انتهاء جلسة تدريب (انظر نتائج التدريب).

لا شيء يعطّل الإطار: الشبكة البطيئة تظهر على شكل رسالة تصل متأخرة قليلًا.

Bevy

cargo add bevy_lingara@0.1.0-alpha.6

Bevy

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