kubi/README.md
2024-11-07 19:04:16 +01:00

3.7 KiB

Kubi

Heavily multithreaded voxel engine with multiplayer networking.
Written in Rust using wgpu

features

  • multithreaded procedural world generation
  • procedural structures and block queue
  • multithreaded mesh generation
  • cubic chunks (32x32x32)
  • low-level wgpu renderer (gles3 before the major rewrite)
  • frustum culling
  • multiplayer networking
  • immediate ui system [1]
  • cross platform: windows, linux, osx, android [2]
  • universal input system: supports keyboard, mouse, gamepad and touch input [3]
  • support for semi-transparet blocks[4]
[1] - developed out-of-tree here since 2024
[2] - android support is experimental
[3] - mouse and gamepad input is not supported on android
[4] - work in progress, may cause issues

download

Latest nightly release

build for windows/linux

cargo build -p kubi
cargo run -p kubi
#or, build with release mode optimizations:
cargo run -p kubi --release

build for android

please note that android support is highly experimental!
gamepad, mouse input is currently borked, as well as srgb, which leads to dark textures.

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

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!

cargo apk build -p kubi --lib --no-default-features

Run on device (using adb):

cargo apk run -p kubi --lib --no-default-features

touch controls

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 the first argument

cargo run -p kubi -- 127.0.0.1:1234

server configuration

[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

deprecated:

~ uwu