Lingara Lingara Dokumentasi Panduan API Pustaka Aplikasi Buat Sematkan Aplikasi web
Bahasa: Bahasa Indonesia

JVM dan Android

Halaman ini diterjemahkan dari bahasa Inggris. Jika keduanya berbeda, halaman bahasa Inggris yang benar. Baca halaman bahasa Inggris

Kit pemain Kotlin berjalan di JVM, di desktop dan di Android. Game Java menggunakan kit yang sama melalui facade Java-nya. Contoh mengikuti game libGDX, yang loop render-nya adalah tempat alami untuk mengosongkan event, dan panggilan yang sama cocok untuk loop game mana pun.

Tambahkan kit dan library native-nya

Kit dan library native-nya adalah artefak terpisah di Maven Central, jadi tambahkan keduanya. Game desktop menambahkan lingara-embed-natives-desktop, yang membawa library untuk Windows, macOS, dan Linux. Modul Android menambahkan lingara-embed-natives-android, sebuah AAR, sebagai gantinya. Dalam proyek libGDX, native desktop masuk ke modul desktop dan native Android ke modul Android.

Game Kotlin bergantung pada lingara-embed-kotlin; game Java pada lingara-embed-java, yaitu facade-nya.

Dapatkan token dari server Anda

Kit tidak pernah menyimpan secret. Berikan rute token server Anda sendiri dan header yang membawa sesi pemain, dan kit mengirim ke rute itu setiap kali membutuhkan token. Server Anda mencetak dengan kit server dan menjawab dengan token beserta waktu kedaluwarsanya.

Kosongkan event di loop render Anda

Inti menjalankan I/O jaringannya di thread-nya sendiri dan tidak pernah memanggil kode Anda. Di loop render Anda, pada thread game, kosongkan apa yang telah tiba, paling banyak 256 event sekaligus, dan tangani masing-masing: pembaruan latihan, balasan NPC yang dialirkan, error. Di Java, setiap event masuk ke metode yang sesuai pada visitor Anda. Tutup kit di langkah dispose game Anda, yang menghentikan inti dan membebaskannya.

Lihat dialog NPC dan hasil latihan untuk isi event tersebut.

Bahasa contoh kode

Kotlin

// The kit, and the natives for the platform: natives-desktop in a libGDX lwjgl3 module, natives-android in its android module.
implementation("com.getlingara:lingara-embed-kotlin:0.1.0-alpha.6")
implementation("com.getlingara:lingara-embed-natives-desktop:0.1.0-alpha.6")

Java

<!-- The kit, and the natives for the platform (lingara-embed-natives-android in an Android module). -->
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-java</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
<dependency>
  <groupId>com.getlingara</groupId>
  <artifactId>lingara-embed-natives-desktop</artifactId>
  <version>0.1.0-alpha.6</version>
</dependency>
Bahasa contoh kode

Kotlin

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
private val lingara =
    LingaraEmbed.start(
        EmbedConfig(
            tokenSource =
                TokenSourceConfig.Http(
                    url = "https://my-game.example/lingara/token",
                    headers = listOf(Header("Authorization", Secret("Bearer $session"))),
                ),
            userAgentSuffix = "my-game/1.4",
        ),
    )

Java

// Your server mints the embed token; the kit POSTs {} here whenever it needs one.
lingara =
    LingaraEmbedJava.builder()
        .httpTokenSource(
            "https://my-game.example/lingara/token",
            Map.of("Authorization", "Bearer " + session))
        .userAgentSuffix("my-game/1.4")
        .build();
Bahasa contoh kode

Kotlin

// In render(), on the game thread: one crossing, at most 256 events.
fun render() {
    lingara.drain(256) { event ->
        when (event) {
            is EmbedEvent.Practice -> showPractice(event.snapshot.question?.prompt)
            is EmbedEvent.NpcTurn -> onNpcTurn(event.update)
            is EmbedEvent.Error -> println("Lingara error: ${event.error.message}")
            else -> Unit
        }
    }
}

// In dispose(): stops the core and frees it.
fun dispose() {
    lingara.close()
}

Java

// In render(), on the game thread: one crossing, at most 256 events, each to its visitor method.
void render() {
  lingara.drain(256, event -> LingaraEmbedJava.visit(event, visitor));
}

// In dispose(), or let try-with-resources do it.
@Override
public void close() {
  lingara.close();
}