From 986bc287d0433d45a7b00e59d26b0e131fa0e70e Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 26 Apr 2024 20:27:27 +0200 Subject: [PATCH] implement movement(tm) --- Cargo.lock | 246 ++++++++++++++++++++++++++++++++++++-- Cargo.toml | 3 +- assets/sprites/player.png | Bin 0 -> 1253 bytes assets/wall.png | Bin 0 -> 922 bytes flake.nix | 7 +- src/main.rs | 100 +++++++++++++++- 6 files changed, 345 insertions(+), 11 deletions(-) create mode 100644 assets/sprites/player.png create mode 100644 assets/wall.png 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 0000000000000000000000000000000000000000..a999128f75f4da77125c287ba92c009b1b223aa8 GIT binary patch literal 1253 zcmV3lSn}W2FcyBA!)Yg-9e`rQYiM8aHWf&SU;LGe>&w`I4qLxo2kn z@1O6R`De~8k)Em^DPjyLV(z`vvjk)cDDn(s7ASH7WQ$;Cfy@F$o`FICg@5O7k@G)A zI`E&U87Q)Put+ujr;L)+&jQ=NinM$SrrA^~vVT~rDM&W~o4Q4gevc-&aj3|Vvec50 zUIH#c@~b|Z5xX#4WF;(-0@6vq4=|biN#yB2&&Ls)inZW=rO1%D2a|uFP93lX(l;ef zPJEVaQh_%f_e=hq7U6EGdpe_|;8`~*yc6&}M19^uyljo9*R$&)nO zvJa2&r-19fL~6U-gx+2uvcyl#=1&0)4i_<(edSGwp9JiLZ0}n7K1eg{i+y^4dkfrz z^cOplem>zFu)-p@R&cKX*80BSp>MYd*aPynp#WcC-yFjs+*yD=orgU?4ctL(FxSn| z*_{GxR_gK+5&mgmGginLZW6%rJ@8m!rmS zL#P!5XlnI3h8TSjsf%9 ztMAP5v&~f)$7T!(U~hqEe?;a$`rXRuuSFqq4FydQmZE@aSFR;xkj_0=VT#>c+O=Zv zji~jt1XcVV;47#NEs>=JMc7n{83&|)`keWUhoe#d9DU@VNu0(uL)f%K~( z{Vt{S7eM;ALZqJ`_(E7gTTxcP3Z1aRINhA;o@St%vGQuk=N3NG8M0Xr853huLYIJ3 zxZXX-D_$jbK-QX59G_(yEf^bPRKVNW#;X2u?a=mcCsfpOBJz~CER zp7vaUeX&n17&|#cAlw2h$!k7}JXcDeKX%|M?2vzN{N%x1DEFfZ(_~Dh6-J1J+@*#q zpb4wKmOO)MhV)&NXTR)|eQQAus2xoX1n2;OUQNkylDHl0mSb=%EkZa2 zCqR3-uoge%Sd+rfIdY^q7RS^egi~+=Dv@Q=ZEP&MIPBT?K}0zw$2I}EkW&D{d)Q@I zf;Qv1(Vl%D6gkJ_*d~bJ5}tth*f`IYi1g+eAp+a&%l zWE)gJX=k{K^bFVuuXJxbNvt3tiRL)C_v@&vaI|57fb*X?CpHY-*ASzrcX8CW(A~xU6Gh| z1DHm}x*jYr7l|+5!(FRcHQ=)Wq<~$N*lz|vjgYn;46rouWjz{dHLIt=7mfqhTZz3c z~=0ZgClL_9fg zZ#IAecN<91y6+7{wi6{M+V+TtvnGBv8Dt3}=1zkNrzBSnUM50d5lc>V%fr>G%WMDz z@5zwUMu-@#{Ki0xm}uL>4USgvt_~A|4Ljwr}o$ zQs9Ar?+p?^E_pBKgWn_K!G=R*%QtsG--JU!0jrY7h=>QXReb0mxRcutg-mpJh=>OZ z%$6-bSO=6sTy-4|ZcUE~U|6p3tmcFdf;#~~?BIwdP^BO{nVO=?@W ztTk@X4k)0H2Q~rm)U=B7#EoJA1fIz_IzT5-gIXR@p4ib0fW%W7#~Mr^ml_^H-q`ey z#zyOa)Vo0HgJ9~@VCoB@)R)4kZ-%%fO?x|>dP0P0sOTKPKR+dwdQvp?w0P<`c+xFBmK+LnD9TpF26E+KxkZ={xQLb5eaMI`U;_0xC2Z!GIWp@4%#i2wiq07*qoM6N<$f)0(NNdN!< literal 0 HcmV?d00001 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