Kubi

Voxel engine written in Rust

features

[1] - multiplayer is work-in-progress
[2] - not tested on macos
[3] - android support is experimental
[4] - mouse/gamepad input is not supported on android
[5] - currently only used on the loading screen

download

Latest nightly release

build for windows/linux

**build/run** ```bash cargo build --bin kubi cargo run --bin kubi ``` **build in release mode, with nightly optimizations** ```bash cargo +nightly build --bin kubi --features nightly --release ```

build for android

warn: multitouch got broken after switching to `android-activity`, I'm still looking for a fix. please note that android support is highly experimental!\ gamepad, mouse input is currently borked, and proper touch controls are not available.\ srgb and blending are broken too, which leads to many rendering issues prerequisites: Android SDK, NDK, command line tools, platform-tools, latest JDK\ (make sure that your `PATH`, `ANDROID_HOME` and `ANDROID_NDK_ROOT` variables are configured properly) **Setup:** latest unpublished (git) version of cargo-apk is required ```bash cargo install --git https://github.com/rust-mobile/cargo-apk cargo-apk rustup target add aarch64-linux-android ``` **Build:** `--no-default-features` is required for keyboard input!\ (`prefer-raw-events` feature *must* be disabled on android)\ Mouse input is not implemented, touch only! ```bash cargo apk build -p kubi --lib --no-default-features ``` **Run on device (using adb):** ```bash cargo apk run -p kubi --lib --no-default-features ```

touch controls

warn: multitouch got broken after switching to `android-activity`, I'm still looking for a fix. touch control scheme - Left side: **Movement** - Rigth side: **Camera controls** - Bottom right corner: - **B** (e.g. place blocks) - **A** (e.g. break, attack)

mutiplayer

to join a multiplayer server, just pass the ip address as an argument ```sh cargo run -p kubi -- 127.0.0.1:1234 ```

server configuration

```toml [server] address = "0.0.0.0:12345" # ip address to bind to max_clients = 32 # max amount of connected clients timeout_ms = 10000 # client timeout in ms [world] seed = 0xfeb_face_dead_cafe # worldgen seed to use [query] name = "Kubi Server" # server name ```

"In-house" libraries

- [`kubi-ui`](kubi-ui): semi-imm.mode backend-agnostic ui system\ mostly ready to use, it has already replaced the Kubi legacy ui - [`kubi-pool`](kubi-pool): very early work-in-progress work-stealing threadpool system\ aiming to replace `rayon` threadpool that's currently used inside the kubi client (for more control over task priority) - [`kubi-logging`](kubi-logging) fancy-ass custom formatter for `env-logger` deprecated: ~~`kubi-udp`~~ was a huge pita to work with and eventually got replaced by `uflow` (https://github.com/lowquark/uflow)
~ uwu