diff --git a/Cargo.lock b/Cargo.lock index ccb1205..e1c09f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -748,6 +748,19 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268" +[[package]] +name = "bevy_rapier2d" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1f2ef2ae7fcf68ccb33f95c1dfc7c679bbc0e33b7f2e461353073065ff6e1e" +dependencies = [ + "bevy", + "bitflags 2.5.0", + "log", + "nalgebra", + "rapier2d", +] + [[package]] name = "bevy_reflect" version = "0.13.2" @@ -1046,6 +1059,14 @@ dependencies = [ "winit", ] +[[package]] +name = "bin-projekt" +version = "0.1.0" +dependencies = [ + "bevy", + "bevy_rapier2d", +] + [[package]] name = "bindgen" version = "0.69.4" @@ -1471,6 +1492,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.12" @@ -1480,6 +1514,34 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -2224,6 +2286,12 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libredox" version = "0.0.2" @@ -2294,6 +2362,16 @@ dependencies = [ "regex-automata 0.1.10", ] +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + [[package]] name = "memchr" version = "2.7.2" @@ -2372,6 +2450,34 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "nalgebra" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ndk" version = "0.8.0" @@ -2449,6 +2555,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -2460,6 +2575,26 @@ dependencies = [ "syn 2.0.60", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -2467,6 +2602,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2648,6 +2784,27 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "parry2d" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fd94bf962ead112f14223469aac6f76e3c24e2c399e348f638924498b238c56" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "simba", + "slab", + "smallvec", + "spade", +] + [[package]] name = "paste" version = "1.0.14" @@ -2760,13 +2917,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d84d1d7a6ac92673717f9f6d1518374ef257669c24ebc5ac25d5033828be58" -[[package]] -name = "quick-start-simple" -version = "0.1.0" -dependencies = [ - "bevy", -] - [[package]] name = "quote" version = "1.0.36" @@ -2788,12 +2938,38 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" +[[package]] +name = "rapier2d" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48a3ec4ae89e0837c0ff6f29af32a8e5d78dfabe2273dcd945cfaf3f5d2b1501" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags 1.3.2", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry2d", + "rustc-hash", + "simba", +] + [[package]] name = "raw-window-handle" version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cc3bcbdb1ddfc11e700e62968e6b4cc9c75bb466464ad28fb61c5b2c964418b" +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "rectangle-pack" version = "0.4.2" @@ -2877,6 +3053,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + [[package]] name = "rodio" version = "0.17.3" @@ -2935,6 +3117,15 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + [[package]] name = "same-file" version = "1.0.6" @@ -2996,6 +3187,19 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -3038,6 +3242,18 @@ dependencies = [ "serde", ] +[[package]] +name = "spade" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61addf9117b11d1f5b4bf6fe94242ba25f59d2d4b2080544b771bd647024fd00" +dependencies = [ + "hashbrown", + "num-traits", + "robust", + "smallvec", +] + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -3277,6 +3493,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicode-ident" version = "1.0.12" @@ -3538,6 +3760,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wide" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a1851a719f11d1d2fea40e15c72f6c00de8c142d7ac47c1441cc7e4d0d5bc6" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "1.1.0" diff --git a/Cargo.toml b/Cargo.toml index 76207dc..9627797 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "quick-start-simple" +name = "bin-projekt" version = "0.1.0" edition = "2021" @@ -7,6 +7,7 @@ edition = "2021" [dependencies] bevy = { version = "0.13.0", features = ["dynamic_linking"] } +bevy_rapier2d = "0.25.0" # Enable a small amount of optimization in debug mode [profile.dev] diff --git a/assets/sprites/player.png b/assets/sprites/player.png new file mode 100644 index 0000000..a999128 Binary files /dev/null and b/assets/sprites/player.png differ diff --git a/assets/wall.png b/assets/wall.png new file mode 100644 index 0000000..f494285 Binary files /dev/null and b/assets/wall.png differ diff --git a/flake.nix b/flake.nix index 0227936..03fb565 100644 --- a/flake.nix +++ b/flake.nix @@ -56,7 +56,7 @@ drv = my-crate; }; - devShells.default = pkgs.mkShell { + devShells.default = pkgs.mkShell rec { buildInputs = with pkgs; [ pkg-config rs-toolchain @@ -68,9 +68,12 @@ xorg.libXi xorg.libXrandr # To use the x11 feature libxkbcommon + wayland mold-wrapped - clang_multi + clang ]; + + LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs; }; }); } diff --git a/src/main.rs b/src/main.rs index 032a096..eb6ca53 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,103 @@ use bevy::prelude::*; +use bevy_rapier2d::prelude::*; +use player::{add_player, move_player}; fn main() { - App::new().run(); + App::new() + .add_plugins(DefaultPlugins) + .add_plugins(RapierPhysicsPlugin::::pixels_per_meter(100.0)) + .add_plugins(RapierDebugRenderPlugin::default()) + .add_systems(Startup, (setup_camera, add_player)) + .add_systems(Update, move_player) + .run(); +} + +fn setup_camera(mut commands: Commands) { + commands.spawn(Camera2dBundle { + transform: Transform::from_xyz(0., 0., 100.), + ..default() + }); +} + +mod scene { + use bevy::prelude::*; + use bevy_rapier2d::prelude::*; + + pub fn setup_scene(mut commands: Commands) {} +} + +mod player { + use bevy::prelude::*; + use bevy_rapier2d::prelude::*; + use std::f32::consts::PI; + + const TURN_SPEED: f32 = PI / 100.; + const FW_SPEED: f32 = 5.; + const BW_SPEED: f32 = 3.; + const SIDEWARD_SPEED: f32 = 3.5; + + #[derive(Component)] + pub struct Player { + move_cooldown: Timer, + } + + pub fn add_player(mut commands: Commands, asset_server: Res) { + commands + .spawn(( + Player { + move_cooldown: Timer::from_seconds(0.01, TimerMode::Repeating), + }, + SpriteBundle { + texture: asset_server.load("sprites/player.png"), + transform: Transform::from_xyz(0., 0., 0.), + ..default() + }, + )) + .insert(Collider::cuboid(8., 8.)); + } + + pub fn move_player( + kb_input: Res>, + mut query: Query<(&mut Transform, &mut Player)>, + time: Res