Lingara Lingara Documentación Guías API Bibliotecas Apps Crear Integración Aplicación web
Idioma: Español

JVM y Android

Esta página está traducida del inglés. Si ambas difieren, la página en inglés es la correcta. Leer la página en inglés

El kit de jugador de Kotlin se ejecuta en la JVM, en escritorio y en Android. Los juegos en Java usan el mismo kit a través de su fachada de Java. Los ejemplos siguen un juego de libGDX, cuyo bucle de renderizado es un lugar natural para vaciar los eventos, y las mismas llamadas sirven para cualquier bucle de juego.

Añadir el kit y sus bibliotecas nativas

El kit y sus bibliotecas nativas son artefactos distintos en Maven Central, así que añade ambos. Un juego de escritorio añade lingara-embed-natives-desktop, que contiene las bibliotecas para Windows, macOS y Linux. Un módulo de Android añade en su lugar lingara-embed-natives-android, un AAR. En un proyecto de libGDX, las bibliotecas nativas de escritorio van en el módulo de escritorio y las nativas de Android en el módulo de Android.

Un juego en Kotlin depende de lingara-embed-kotlin; un juego en Java, de lingara-embed-java, la fachada.

Obtener tokens de tu servidor

El kit nunca guarda un secreto. Dale la ruta de tokens de tu propio servidor y la cabecera que lleva la sesión del jugador, y el kit hará una petición a ella cada vez que necesite un token. Tu servidor lo emite con un kit de servidor y responde con el token y su caducidad.

Vaciar los eventos en tu bucle de renderizado

El núcleo ejecuta su E/S de red en su propio hilo y nunca llama a tu código. En tu bucle de renderizado, en el hilo del juego, vacía lo que ha llegado, como máximo 256 eventos a la vez, y gestiona cada uno: una actualización de práctica, una respuesta de PNJ en streaming, un error. En Java, cada evento va al método correspondiente de tu visitante. Cierra el kit en el paso de liberación de tu juego, lo que detiene el núcleo y lo libera.

Consulta Diálogo con PNJ y resultados de práctica para ver qué contienen esos eventos.

Lenguaje del ejemplo de código

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>
Lenguaje del ejemplo de código

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();
Lenguaje del ejemplo de código

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