implement movement(tm)

This commit is contained in:
Schrottkatze 2024-04-26 20:27:27 +02:00
parent 30dc1ddd75
commit 986bc287d0
Signed by: schrottkatze
SSH key fingerprint: SHA256:hXb3t1vINBFCiDCmhRABHX5ocdbLiKyCdKI4HK2Rbbc
6 changed files with 345 additions and 11 deletions

246
Cargo.lock generated
View file

@ -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"

View file

@ -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]

BIN
assets/sprites/player.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
assets/wall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 922 B

View file

@ -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;
};
});
}

View file

@ -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::<NoUserData>::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<AssetServer>) {
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<ButtonInput<KeyCode>>,
mut query: Query<(&mut Transform, &mut Player)>,
time: Res<Time>,
) {
let (mut transform, mut player) = query.single_mut();
if player.move_cooldown.tick(time.delta()).finished() {
let mut moved = false;
let (mut mv_forward, mut mv_sideward, mut rot) = (0., 0., 0.);
if kb_input.pressed(KeyCode::KeyA) {
moved = true;
rot += TURN_SPEED;
}
if kb_input.pressed(KeyCode::KeyD) {
moved = true;
rot -= TURN_SPEED;
}
if kb_input.pressed(KeyCode::KeyW) {
moved = true;
mv_forward += FW_SPEED;
}
if kb_input.pressed(KeyCode::KeyE) {
moved = true;
mv_sideward += SIDEWARD_SPEED;
}
if kb_input.pressed(KeyCode::KeyQ) {
moved = true;
mv_sideward -= SIDEWARD_SPEED;
}
if kb_input.pressed(KeyCode::KeyS) {
moved = true;
mv_forward -= BW_SPEED;
}
if moved {
player.move_cooldown.reset();
transform.rotation *= Quat::from_rotation_z(rot);
let fw = transform.up();
let right = transform.right();
transform.translation += fw * mv_forward + right * mv_sideward;
}
}
}
}