Lingara Lingara Documentação Guias API Bibliotecas Aplicações Criar Incorporar Aplicação web
Idioma: Português

JVM e Android

Esta página é uma tradução do inglês. Se as duas diferirem, a página em inglês é a correta. Ler a página em inglês

O kit de jogador Kotlin é executado na JVM, no computador e no Android. Os jogos em Java usam o mesmo kit através da sua fachada Java. Os exemplos seguem um jogo libGDX, cujo ciclo de renderização é um sítio natural para esvaziar os eventos, e as mesmas chamadas servem para qualquer ciclo de jogo.

Adicionar o kit e as suas bibliotecas nativas

O kit e as suas bibliotecas nativas são artefactos separados no Maven Central, por isso adicione ambos. Um jogo para computador adiciona lingara-embed-natives-desktop, que contém as bibliotecas para Windows, macOS e Linux. Um módulo Android adiciona, em vez disso, lingara-embed-natives-android, um AAR. Num projeto libGDX, as bibliotecas nativas para computador vão no módulo desktop e as nativas Android no módulo Android.

Um jogo em Kotlin depende de lingara-embed-kotlin; um jogo em Java, de lingara-embed-java, a fachada.

Obter tokens do seu servidor

O kit nunca guarda um segredo. Indique-lhe a rota de tokens do seu próprio servidor e o cabeçalho que transporta a sessão do jogador, e o kit faz um pedido a essa rota sempre que precisa de um token. O seu servidor emite-o com um kit de servidor e responde com o token e a sua validade.

Esvaziar os eventos no seu ciclo de renderização

O núcleo executa a sua E/S de rede no seu próprio thread e nunca chama o seu código. No seu ciclo de renderização, no thread do jogo, esvazie o que chegou, no máximo 256 eventos de cada vez, e trate cada um: uma atualização da prática, uma resposta de NPC em streaming, um erro. Em Java, cada evento vai para o método correspondente do seu visitor. Feche o kit no passo de libertação do seu jogo, o que para o núcleo e o liberta.

Consulte Diálogo com NPC e resultados da prática para saber o que esses eventos transportam.

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