.cargo | ||
.github/workflows | ||
.readme | ||
.vscode | ||
assets | ||
kubi | ||
kubi-logging | ||
kubi-pool | ||
kubi-server | ||
kubi-shared | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
LICENSE | ||
README.md | ||
rust-toolchain.toml | ||
Server.toml |
Kubi
Voxel engine written in Rust
features
- multithreaded procedural world generation
- procedural structures
- multithreaded mesh generation
- cubic chunks (32x32x32)
- low-level OpenGL renderer, targetting OpenGL ES 3.0
- frustum culling
- multiplayer support
[1]
- block placement system
- basic gui
[5]
- cross platform: windows, linux, osx
[2]
, android[3]
- universal input system: supports keyboard, mouse, gamepad and touch input
[4]
[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 releasebuild for windows/linux
build/run
cargo build --bin kubi
cargo run --bin kubi
build in release mode, with nightly optimizations
cargo +nightly build --bin kubi --features nightly --release
build for android
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
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
- 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
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
hui
: semi-imm.mode backend-agnostic ui system
mostly ready to use, it has already replaced the Kubi legacy uikubi-ui-glium
Glium-based backend forkubi-ui
kubi-pool
: very early work-in-progress work-stealing threadpool system
aiming to replacerayon
threadpool that's currently used inside the kubi client (for more control over task priority)kubi-logging
fancy-ass custom formatter forenv-logger
deprecated:
was a huge pita to work with and eventually got replaced by kubi-udp
uflow
(https://github.com/lowquark/uflow) in #5