Kotlin Spinner Game
Simple spinner-like game intended to demonstrate capabilities of Kotlin/Native software stack
How to play
- Download and install the mobile application for Android or iOS
- The system will automatically assign you to a random team. Each team has a unique colour
- Spin the Kotlin logo using your fingers, or alternatively shake your phone
- Each two full rotations (i.e. 720 degrees) will increment your team's score
- The team with the highest score wins
Technical details
The entire application is implemented using Kotlin/Native
Server-Side
Server side runs on a linux server and is implemented using:
- microHTTPD HTTP server library
- SQLite for the database, storing score
- Jansson for JSON serialization and client/server communication
Client-Side
Android
You need to have ANDROID_HOME set to your Android SDK location.
Client side for Android is implemented in pure Kotlin/Native, as a Native Activity using:
- GLES version 3 interop for 3D rendering
- NDK input handling for input processing
- Open AL interop for sound playback
- Sensors native API
- libcurl file transfer library as HTTP client
iOS
Client side for iOS is implemented in pure Kotlin/Native using:
- GLES version 3 framework for 3D rendering
- UIKit framework for windows and views
- CoreMotion framework for sensors access
- OpenAL framework for audio playback
Implementation details
- Most graphical code, sound playback and user input reaction is shared between Android and iOS
- Server interaction on Android is asynchronous from the UI thread, using workers
- HTTP server works in multithreaded mode, state sharing between sessions performed via SQLite DB access
- Android app is split into separate loader and application code, so that dynamic library (libopenal.so) included with application can be used on older Androids
- WebAssembly frontend can fetch and render stats in the browser
Project Sources
Use JDK1.8, for Android compatibility, i.e.: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_161.jdk/Contents/Home
To use microhttpd (HTTP server) install it, i.e.:
port install libmicrohttpd
apt install libmicrohttpd-dev
To use jansson (JSON library) install it, i.e.:
port install jansson
apt install libjansson-dev
To use sqlite (embedded SQL server) install it:
port install sqlite3
apt install libsqlite3-dev
To use curl (HTTP client) install it:
port install curl
apt install libcurl3-nss