Compare commits

..

No commits in common. "4948d85e05b9f151537da2bded5bde6cfc5be643" and "9f5b974f82f080c7c5dce2627a68b948691f5bfd" have entirely different histories.

15 changed files with 1118 additions and 1107 deletions

635
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -33,8 +33,3 @@ opt-level = 3
[profile.dev.package.rayon] [profile.dev.package.rayon]
opt-level = 3 opt-level = 3
#this is cursed as fuck
#enabling debug assertions here causes the game to abort
[profile.dev.package.android-activity]
debug-assertions = false

View file

@ -8,10 +8,10 @@ publish = false
kubi-shared = { path = "../kubi-shared" } kubi-shared = { path = "../kubi-shared" }
kubi-logging = { path = "../kubi-logging" } kubi-logging = { path = "../kubi-logging" }
log = "0.4" log = "0.4"
shipyard = { git = "https://github.com/leudz/shipyard", rev = "9099b990e", default-features = false, features = ["std", "proc", "thread_local"] } shipyard = { git = "https://github.com/leudz/shipyard", rev = "8ef90ea6c4d1eb6c9cb0988f0d2f873f75044d49", default-features = false, features = ["std", "proc", "thread_local"] }
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] } serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }
toml = "0.8" toml = "0.8"
glam = { version = "0.25", features = ["debug-glam-assert", "fast-math"] } glam = { version = "0.24", features = ["debug-glam-assert", "fast-math"] }
hashbrown = "0.14" hashbrown = "0.14"
nohash-hasher = "0.2" nohash-hasher = "0.2"
anyhow = "1.0" anyhow = "1.0"

View file

@ -5,9 +5,9 @@ edition = "2021"
publish = false publish = false
[dependencies] [dependencies]
glam = { version = "0.25", features = ["debug-glam-assert", "fast-math", "serde"] } glam = { version = "0.24", features = ["debug-glam-assert", "fast-math", "serde"] }
shipyard = { git = "https://github.com/leudz/shipyard", rev = "9099b990e", default-features = false, features = ["std"] } shipyard = { git = "https://github.com/leudz/shipyard", rev = "8ef90ea6c4d1eb6c9cb0988f0d2f873f75044d49", default-features = false, features = ["std"] }
strum = { version = "0.26", features = ["derive"] } strum = { version = "0.25", features = ["derive"] }
num_enum = "0.7" num_enum = "0.7"
postcard = { version = "1.0", features = ["alloc"] } postcard = { version = "1.0", features = ["alloc"] }
serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] } serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] }

View file

@ -10,7 +10,7 @@ publish = false
kubi-ui = { path = "../kubi-ui" } kubi-ui = { path = "../kubi-ui" }
kubi-ui-glium = { path = "../kubi-ui-glium" } kubi-ui-glium = { path = "../kubi-ui-glium" }
kubi-logging = { path = "../kubi-logging" } kubi-logging = { path = "../kubi-logging" }
glium = { git = "https://github.com/glium/glium", rev = "a352c667" } glium = { git = "https://github.com/glium/glium", rev = "968fc92378caf" }
winit = "0.29" winit = "0.29"
glam = "0.25" glam = "0.24"
log = "0.4" log = "0.4"

View file

@ -7,6 +7,6 @@ publish = false
[dependencies] [dependencies]
kubi-ui = { path = "../kubi-ui", default-features = false } kubi-ui = { path = "../kubi-ui", default-features = false }
#kubi-ui = { path = "../kubi-ui" } #kubi-ui = { path = "../kubi-ui" }
glium = { git = "https://github.com/glium/glium", rev = "a352c667" } glium = { git = "https://github.com/glium/glium", rev = "968fc92378caf" }
glam = "0.25" glam = "0.24"
log = "0.4" log = "0.4"

View file

@ -50,8 +50,8 @@ impl BufferPair {
pub fn new<F: Facade>(facade: &F) -> Self { pub fn new<F: Facade>(facade: &F) -> Self {
log::debug!("init ui buffers..."); log::debug!("init ui buffers...");
Self { Self {
vertex_buffer: VertexBuffer::empty_dynamic(facade, 1024).unwrap(), vertex_buffer: VertexBuffer::empty_persistent(facade, 1024).unwrap(),
index_buffer: IndexBuffer::empty_dynamic(facade, PrimitiveType::TrianglesList, 1024).unwrap(), index_buffer: IndexBuffer::empty_persistent(facade, PrimitiveType::TrianglesList, 1024).unwrap(),
vertex_count: 0, vertex_count: 0,
index_count: 0, index_count: 0,
} }
@ -68,13 +68,13 @@ impl BufferPair {
let new_idx_size = (need_idx + 1).next_power_of_two(); let new_idx_size = (need_idx + 1).next_power_of_two();
log::debug!("resizing buffers: vtx {} -> {}, idx {} -> {}", current_vtx_size, new_vtx_size, current_idx_size, new_idx_size); log::debug!("resizing buffers: vtx {} -> {}, idx {} -> {}", current_vtx_size, new_vtx_size, current_idx_size, new_idx_size);
if current_vtx_size != new_vtx_size { if current_vtx_size != new_vtx_size {
self.vertex_buffer = VertexBuffer::empty_dynamic( self.vertex_buffer = VertexBuffer::empty_persistent(
self.vertex_buffer.get_context(), self.vertex_buffer.get_context(),
new_vtx_size new_vtx_size
).unwrap(); ).unwrap();
} }
if current_idx_size != new_idx_size { if current_idx_size != new_idx_size {
self.index_buffer = IndexBuffer::empty_dynamic( self.index_buffer = IndexBuffer::empty_persistent(
self.index_buffer.get_context(), self.index_buffer.get_context(),
PrimitiveType::TrianglesList, PrimitiveType::TrianglesList,
new_idx_size new_idx_size

View file

@ -7,7 +7,7 @@ publish = false
[dependencies] [dependencies]
hashbrown = "0.14" hashbrown = "0.14"
nohash-hasher = "0.2" nohash-hasher = "0.2"
glam = "0.25" glam = "0.24"
fontdue = "0.8" fontdue = "0.8"
rect_packer = "0.2" rect_packer = "0.2"
log = "0.4" log = "0.4"

View file

@ -14,18 +14,18 @@ kubi-logging = { path = "../kubi-logging" }
kubi-ui = { path = "../kubi-ui" } kubi-ui = { path = "../kubi-ui" }
kubi-ui-glium = { path = "../kubi-ui-glium" } kubi-ui-glium = { path = "../kubi-ui-glium" }
log = "0.4" log = "0.4"
glium = { git = "https://github.com/glium/glium", rev = "a352c667" } glium = { git = "https://github.com/glium/glium", rev = "968fc92378caf" }
glutin = "0.31" glutin = "0.31"
winit = { version = "0.29", features = ["android-native-activity"] } winit = { version = "0.29", features = ["android-native-activity"] }
glutin-winit = "0.4" glutin-winit = "0.4"
raw-window-handle = "=0.5.*" raw-window-handle = "0.5"
glam = { version = "0.25", features = ["debug-glam-assert", "fast-math"] } glam = { version = "0.24", features = ["debug-glam-assert", "fast-math"] }
image = { version = "0.24", default_features = false, features = ["png"] } image = { version = "0.24", default_features = false, features = ["png"] }
strum = { version = "0.26", features = ["derive"] } strum = { version = "0.25", features = ["derive"] }
hashbrown = "0.14" hashbrown = "0.14"
nohash-hasher = "0.2" nohash-hasher = "0.2"
rayon = "1.7" rayon = "1.7"
shipyard = { git = "https://github.com/leudz/shipyard", rev = "9099b990e", default-features = false, features = ["std", "proc", "thread_local"] } shipyard = { git = "https://github.com/leudz/shipyard", rev = "8ef90ea6c4d1eb6c9cb0988f0d2f873f75044d49", default-features = false, features = ["std", "proc", "thread_local"] }
anyhow = "1.0" anyhow = "1.0"
flume = "0.11" flume = "0.11"
gilrs = { version = "0.10", default_features = false, features = ["xinput"] } gilrs = { version = "0.10", default_features = false, features = ["xinput"] }
@ -37,7 +37,7 @@ tinyset = "0.4"
serde_json = { version = "1.0", optional = true } #only used for `generate_visualizer_data` serde_json = { version = "1.0", optional = true } #only used for `generate_visualizer_data`
[target.'cfg(target_os = "android")'.dependencies] [target.'cfg(target_os = "android")'.dependencies]
android-activity = "^0.5.2" android-activity = "0.5"
ndk = "0.8" ndk = "0.8"
[target.'cfg(target_os = "windows")'.dependencies] [target.'cfg(target_os = "windows")'.dependencies]
@ -59,14 +59,15 @@ assets = "../assets"
apk_name = "kubi" apk_name = "kubi"
theme = "@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen" theme = "@android:style/Theme.DeviceDefault.NoActionBar.Fullscreen"
label = "Kubi" label = "Kubi"
orientation = "sensorLandscape"
[package.metadata.android.sdk] [package.metadata.android.sdk]
min_sdk_version = 16 min_sdk_version = 16
target_sdk_version = 30 target_sdk_version = 30
[[package.metadata.android.uses_feature]] [[package.metadata.android.uses_feature]]
glEsVersion = 0x00030000
required = true required = true
glEsVersion = 0x00030000
[[package.metadata.android.uses_feature]] [[package.metadata.android.uses_feature]]
name = "android.hardware.touchscreen.multitouch" name = "android.hardware.touchscreen.multitouch"
@ -77,13 +78,6 @@ name = "android.hardware.touchscreen.multitouch.distinct"
required = true required = true
[package.metadata.android.application.activity] [package.metadata.android.application.activity]
label = "Kubi"
launch_mode = "singleTop"
orientation = "sensorLandscape"
config_changes = "orientation|keyboardHidden|screenLayout|screenSize" config_changes = "orientation|keyboardHidden|screenLayout|screenSize"
exported = true exported = true
resizeable_activity = true resizeable_activity = true
# [package.metadata.android.signing.release]
# path = "$HOME/.android/debug.keystore"
# keystore_password = "android"

View file

@ -1,52 +0,0 @@
//TODO client-side physics
//TODO move this to shared
use glam::{Mat4, Vec3};
use kubi_shared::transform::Transform;
use shipyard::{track, AllStoragesView, Component, IntoIter, Unique, UniqueView, View, ViewMut};
use crate::delta_time::DeltaTime;
#[derive(Unique)]
pub struct GlobalClPhysicsConfig {
pub gravity: Vec3,
}
#[derive(Component)]
pub struct ClPhysicsActor {
pub forces: Vec3,
pub velocity: Vec3,
pub terminal_velocity: f32,
//TODO: this should be configurable per block
pub friction_agains_ground: f32,
}
impl Default for ClPhysicsActor {
fn default() -> Self {
Self {
forces: Vec3::ZERO,
velocity: Vec3::ZERO,
terminal_velocity: 40.,
friction_agains_ground: 0.5,
}
}
}
pub fn init_client_physics(
storages: AllStoragesView,
) {
storages.add_unique(GlobalClPhysicsConfig {
gravity: Vec3::new(0., -9.8, 0.),
});
}
pub fn update_client_physics_late(
controllers: View<ClPhysicsActor>,
mut transforms: ViewMut<Transform, track::All>,
dt: UniqueView<DeltaTime>,
phy_conf: UniqueView<GlobalClPhysicsConfig>,
) {
// for (_, mut transform) in (&controllers, &mut transforms).iter() {
// let (scale, rotation, mut translation) = transform.0.to_scale_rotation_translation();
// translation.y -= dt.0.as_secs_f32() * 100.;
// transform.0 = Mat4::from_scale_rotation_translation(scale, rotation, translation);
// }
}

View file

@ -1,6 +1,6 @@
use glam::UVec2; use glam::UVec2;
use shipyard::{World, Component, AllStoragesViewMut, SparseSet, NonSendSync, UniqueView}; use shipyard::{World, Component, AllStoragesViewMut, SparseSet, NonSendSync, UniqueView};
use winit::event::{Event, DeviceEvent, DeviceId, WindowEvent, Touch}; use winit::event::{Event, DeviceEvent, DeviceId, WindowEvent, Touch, RawKeyEvent, TouchPhase};
use crate::rendering::Renderer; use crate::rendering::Renderer;
pub mod player_actions; pub mod player_actions;
@ -24,7 +24,7 @@ pub struct TouchEvent(pub Touch);
#[derive(Component, Clone, Copy, Debug, Default)] #[derive(Component, Clone, Copy, Debug, Default)]
pub struct WindowResizedEvent(pub UVec2); pub struct WindowResizedEvent(pub UVec2);
pub fn process_winit_events(world: &mut World, event: &Event<()>) { pub fn process_glutin_events(world: &mut World, event: &Event<()>) {
#[allow(clippy::collapsible_match, clippy::single_match)] #[allow(clippy::collapsible_match, clippy::single_match)]
match event { match event {
Event::WindowEvent { window_id: _, event } => match event { Event::WindowEvent { window_id: _, event } => match event {

View file

@ -45,9 +45,8 @@ fn update_movement(
let movement = inputs.movement * 30. * dt.0.as_secs_f32(); let movement = inputs.movement * 30. * dt.0.as_secs_f32();
for (_, mut transform) in (&controllers, &mut transforms).iter() { for (_, mut transform) in (&controllers, &mut transforms).iter() {
let (scale, rotation, mut translation) = transform.0.to_scale_rotation_translation(); let (scale, rotation, mut translation) = transform.0.to_scale_rotation_translation();
let rotation_norm = rotation.normalize(); translation += (rotation * Vec3::NEG_Z).normalize() * movement.y;
translation += (rotation_norm * Vec3::NEG_Z).normalize() * movement.y; translation += (rotation * Vec3::X).normalize() * movement.x;
translation += (rotation_norm * Vec3::X).normalize() * movement.x; transform.0 = Mat4::from_scale_rotation_translation(scale, rotation, translation);
transform.0 = Mat4::from_scale_rotation_translation(scale, rotation_norm, translation);
} }
} }

View file

@ -37,7 +37,6 @@ pub(crate) mod loading_screen;
pub(crate) mod connecting_screen; pub(crate) mod connecting_screen;
pub(crate) mod fixed_timestamp; pub(crate) mod fixed_timestamp;
pub(crate) mod filesystem; pub(crate) mod filesystem;
pub(crate) mod client_physics;
use world::{ use world::{
init_game_world, init_game_world,
@ -52,7 +51,7 @@ use settings::{load_settings, GameSettings};
use camera::compute_cameras; use camera::compute_cameras;
use events::{ use events::{
clear_events, clear_events,
process_winit_events, process_glutin_events,
initial_resize_event, initial_resize_event,
player_actions::generate_move_events, player_actions::generate_move_events,
}; };
@ -82,7 +81,6 @@ use loading_screen::update_loading_screen;
use connecting_screen::switch_to_loading_if_connected; use connecting_screen::switch_to_loading_if_connected;
use fixed_timestamp::init_fixed_timestamp_storage; use fixed_timestamp::init_fixed_timestamp_storage;
use filesystem::AssetManager; use filesystem::AssetManager;
use client_physics::{init_client_physics, update_client_physics_late};
/// stuff required to init the renderer and other basic systems /// stuff required to init the renderer and other basic systems
fn pre_startup() -> Workload { fn pre_startup() -> Workload {
@ -106,7 +104,6 @@ fn startup() -> Workload {
init_input, init_input,
insert_control_flow_unique, insert_control_flow_unique,
init_delta_time, init_delta_time,
init_client_physics,
).into_sequential_workload() ).into_sequential_workload()
} }
@ -134,7 +131,6 @@ fn update() -> Workload {
).into_sequential_workload().run_if(is_ingame_or_loading), ).into_sequential_workload().run_if(is_ingame_or_loading),
( (
update_controllers, update_controllers,
update_client_physics_late,
generate_move_events, generate_move_events,
update_raycasts, update_raycasts,
update_block_placement, update_block_placement,
@ -183,13 +179,9 @@ pub fn android_main(app: android_activity::AndroidApp) {
} }
#[no_mangle] #[no_mangle]
pub fn kubi_main( pub fn kubi_main(#[cfg(target_os = "android")] app: android_activity::AndroidApp) {
#[cfg(target_os = "android")]
app: android_activity::AndroidApp
) {
//Attach console on release builds on windows //Attach console on release builds on windows
#[cfg(all(windows, not(debug_assertions)))] #[cfg(all(windows, not(debug_assertions)))] attach_console();
attach_console();
//Print version //Print version
println!("{:─^54}", format!("[ ▄▀ Kubi client v. {} ]", env!("CARGO_PKG_VERSION"))); println!("{:─^54}", format!("[ ▄▀ Kubi client v. {} ]", env!("CARGO_PKG_VERSION")));
@ -261,7 +253,7 @@ pub fn kubi_main(
window_target.set_control_flow(ControlFlow::Poll); window_target.set_control_flow(ControlFlow::Poll);
process_winit_events(&mut world, &event); process_glutin_events(&mut world, &event);
#[allow(clippy::collapsible_match, clippy::single_match)] #[allow(clippy::collapsible_match, clippy::single_match)]
match event { match event {

View file

@ -10,11 +10,10 @@ use kubi_shared::{
} }
}; };
use crate::{ use crate::{
camera::Camera,
client_physics::ClPhysicsActor,
fly_controller::FlyController,
transform::Transform, transform::Transform,
world::raycast::LookingAtBlock camera::Camera,
fly_controller::FlyController,
world::raycast::LookingAtBlock,
}; };
#[derive(Component)] #[derive(Component)]
@ -24,7 +23,7 @@ pub fn spawn_player (
mut storages: AllStoragesViewMut, mut storages: AllStoragesViewMut,
) { ) {
log::info!("spawning player"); log::info!("spawning player");
storages.add_entity((( storages.add_entity((
Player, Player,
MainPlayer, MainPlayer,
Entity, Entity,
@ -34,10 +33,8 @@ pub fn spawn_player (
FlyController, FlyController,
LookingAtBlock::default(), LookingAtBlock::default(),
PlayerHolding(Some(Block::Cobblestone)), PlayerHolding(Some(Block::Cobblestone)),
Username("LocalPlayer".into()), Username("LocalPlayer".into())
),( ));
ClPhysicsActor::default(),
)));
} }
pub fn spawn_local_player_multiplayer ( pub fn spawn_local_player_multiplayer (
@ -45,21 +42,22 @@ pub fn spawn_local_player_multiplayer (
init: ClientInitData init: ClientInitData
) { ) {
log::info!("spawning local multiplayer player"); log::info!("spawning local multiplayer player");
let entity_id = storages.add_entity((( let entity_id = storages.add_entity((
Player, (
Client(init.client_id), Player,
MainPlayer, Client(init.client_id),
Entity, MainPlayer,
init.health, Entity,
Transform(Mat4::from_rotation_translation(init.direction, init.position)), init.health,
Camera::default(), Transform(Mat4::from_rotation_translation(init.direction, init.position)),
FlyController, Camera::default(),
LookingAtBlock::default(), FlyController,
PlayerHolding::default(), LookingAtBlock::default(),
),( PlayerHolding::default(),
Username(init.username), ),(
ClPhysicsActor::default(), Username(init.username)
))); )
));
//Add ourself to the client id map //Add ourself to the client id map
let mut client_id_map = storages.borrow::<UniqueViewMut<ClientIdMap>>().unwrap(); let mut client_id_map = storages.borrow::<UniqueViewMut<ClientIdMap>>().unwrap();