Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Gamedev com Kotlin Native

Gamedev com Kotlin Native

Rafael Toledo

July 30, 2020
Tweet

More Decks by Rafael Toledo

Other Decks in Programming

Transcript

  1. Rafael Toledo Sr Sofware Engineer @ Uber Mega Drive (94-01)

    Dreamcast (01-08) Faculdade (08-11) XBox 360 (12-14) Playstation 4 (14-..) Switch (18-..)
  2. Kotlin Native Kotlin sem VM Mas com a StdLib Sem

    VM – sem Garbage Collector Comunica com linguagens nativas C C++ ObjectiveC Switf
  3. Kotlin Native Kotlin sem VM Mas com a StdLib Sem

    VM – sem Garbage Collector Comunica com linguagens nativas C C++ ObjectiveC Switf
  4. Sobre a Linguagem C Já tem quase 50 anos (1972)

    Influenciou várias outras linguagens como: C++ C# ObjC Go Java Python JavaScript Perl PHP Rust
  5. TODAS as keywords auto break case char const continue default

    do int long register return short signed sizeof static struct switch typedef union unsigned void volatile while double else enum extern float for goto if
  6. TODAS as keywords auto break case char const continue default

    do int long register return short signed sizeof static struct switch typedef union unsigned void volatile while double else enum extern float for goto if
  7. Simple DirectMedia Layer Cross Plataforma – Windows, Linux, MacOS, iOS,

    Android audio teclado mouse joystick gráficos OpenGL/Direct3D libsdl.org
  8. Estrutura de um Game Fortemente orientado a eventos Gestão de

    recursos Input -> Processamento -> Saída
  9. // build.gradle apply plugin: 'org.jetbrains.kotlin.multiplatform' kotlin { macosX64() { binaries

    { entryPoint 'pacote.main’ linkerOpts '-L/usr/local/lib', '-LSDL2' } } }
  10. // build.gradle apply plugin: 'org.jetbrains.kotlin.multiplatform' kotlin { macosX64() { binaries

    { ... } compilations.main.cinterops { sdl { // sdl.def includeDirs '/usr/local/include/SDL2' } } } }
  11. // build.gradle apply plugin: 'org.jetbrains.kotlin.multiplatform' kotlin { macosX64() { binaries

    { ... } compilations.main.cinterops { sdl { // sdl.def includeDirs '/usr/local/include/SDL2' } } } }
  12. // src/nativeInterop/cinterop/sdl.def headers = SDL.h stdlib.h time.h entryPoint = SDL_main

    headerFilter = SDL* stdlib.h time.h compileOpts = -D_POSIX_SOURCE compileOpts.osx = ... compileOpts.linux = ...
  13. Header file Em C: typedef struct SDL_Window { ... }

    Em Kotlin: class SDL_Window : CStructVar { ... }
  14. Header file SDL_Surface *SDL_GetWindowSurface( SDL_Window *window); recebe uma referência de

    SDL_Window fun SDL_GetWindowSurface( CValuesRef<SDL_Window>? window)
  15. Header file SDL_Surface *SDL_GetWindowSurface( SDL_Window *window); retorna um ponteiro de

    SDL_Surface fun SDL_GetWindowSurface( CValuesRef<SDL_Window>? window): CPointer<SDL_Surface>
  16. SDL em Kotlin memScoped { val e = alloc<SDL_Event>() while

    (!SDL_PollEvent(&e)) { ... } } // aqui a memória é liberada
  17. SDL em Kotlin parâmetro: &e endereço de memória de uma

    struct SDL_Event vira e.ptr.reinterpret()
  18. SDL em Kotlin parâmetro: &e endereço de memória de uma

    struct SDL_Event vira e.ptr.reinterpret()
  19. SDL em C SDL_Window *window; // Acessando os dados de

    um // ponteiro pra struct window->w // retorna a // largura da tela
  20. SDL em Kotlin var window: CPointer<SDL_Window>? // Acessando os dados

    de um // ponteiro pra struct window?.get(0)?.w // retorna a // largura da tela
  21. SDL em C // Acessando último erro // retornado pela

    SDL printf("Erro: %s\n", SDL_GetError());
  22. SDL em Kotlin // Acessando último erro // retornado pela

    SDL println("Erro: ${SDL_GetError()?.toKString()}");
  23. O que posso aprender? Exercitar lógica de programação Como isolar

    uma biblioteca do código e criar abstrações
  24. O que posso aprender? Exercitar lógica de programação Como isolar

    uma biblioteca do código e criar abstrações while (SDL_PollEvent(e.ptr.reinterpret()) != 0) { ... }
  25. O que posso aprender? Exercitar lógica de programação Como isolar

    uma biblioteca do código e criar abstrações while (eventPool.hasMoreEvents())) { // eventual abstração }
  26. O que posso aprender? Exercitar lógica de programação Como isolar

    uma biblioteca do código e criar abstrações Debugar problemas de lógica – em uma plataforma "diferente"
  27. O que posso aprender? Exercitar lógica de programação Como isolar

    uma biblioteca do código e criar abstrações Debugar problemas de lógica – em uma plataforma "diferente" Lidar com memória
  28. Links Flappy Ball github.com/rafaeltoledo/flappy-kotlin Tetris (dentro de samples/tetris) github.com/JetBrains/kotlin Tutorials

    SDL (C/C++) lazyfoo.net Overview Kotlin Native kotlinlang.org/docs/reference/native-overview.html