From af47eb6510b0264433282c4f3b7809f0621bafde Mon Sep 17 00:00:00 2001 From: Schrottkatze Date: Fri, 3 May 2024 18:46:56 +0200 Subject: [PATCH] do basic stuff like movement and walls --- .cargo/config.toml | 3 ++ Cargo.lock | 21 ++++++------ Cargo.toml | 12 ++++--- src/main.rs | 80 ++++++++++++++++++++++++++++++++++++---------- 4 files changed, 84 insertions(+), 32 deletions(-) create mode 100644 .cargo/config.toml diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..d29d6c3 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,3 @@ +[target.x86_64-unknown-linux-gnu] +linker = "clang" +rustflags = ["-C", "link-arg=-fuse-ld=mold"] diff --git a/Cargo.lock b/Cargo.lock index e1c09f8..7321ccd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -293,7 +293,6 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "65b9eadaacf8fe971331bc3f250f35c18bc9dace3f96b483062f38ac07e3a1b4" dependencies = [ - "bevy_dylib", "bevy_internal", ] @@ -470,15 +469,6 @@ dependencies = [ "sysinfo", ] -[[package]] -name = "bevy_dylib" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922826e3b8f37c19836b49e18ceca662260cce87ab8faa4db6df8433903660cc" -dependencies = [ - "bevy_internal", -] - [[package]] name = "bevy_ecs" version = "0.13.2" @@ -1065,6 +1055,7 @@ version = "0.1.0" dependencies = [ "bevy", "bevy_rapier2d", + "some_bevy_tools", ] [[package]] @@ -2956,6 +2947,7 @@ dependencies = [ "parry2d", "rustc-hash", "simba", + "vec_map", ] [[package]] @@ -3242,6 +3234,15 @@ dependencies = [ "serde", ] +[[package]] +name = "some_bevy_tools" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85470658805b5915e9e84cddbdc582e2412e65df1f3299737142913430cd3209" +dependencies = [ + "bevy", +] + [[package]] name = "spade" version = "2.6.0" diff --git a/Cargo.toml b/Cargo.toml index 9627797..d866544 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,8 +6,10 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy = { version = "0.13.0", features = ["dynamic_linking"] } -bevy_rapier2d = "0.25.0" +# bevy = { version = "0.13.0", features = ["dynamic_linking"] } +bevy = "0.13" +bevy_rapier2d = { version = "0.25.0", features = [ "simd-stable", "debug-render-2d" ] } +some_bevy_tools = "0.2.4" # Enable a small amount of optimization in debug mode [profile.dev] @@ -17,6 +19,6 @@ opt-level = 1 [profile.dev.package."*"] opt-level = 3 -[target.x86_64-unknown-linux-gnu] -linker = "clang" -rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"] +# Add this to your Cargo.toml +[profile.dev.package.bevy_rapier2d] +opt-level = 3 diff --git a/src/main.rs b/src/main.rs index eb6ca53..df6a680 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,34 +1,69 @@ use bevy::prelude::*; use bevy_rapier2d::prelude::*; use player::{add_player, move_player}; +use some_bevy_tools::{camera_2d::Camera2DPlugin, controller_2d::SimpleTopDownControllerPlugin}; fn main() { App::new() + .insert_resource(RapierConfiguration { + gravity: Vec2::new(0.0, 0.0), + ..Default::default() + }) .add_plugins(DefaultPlugins) - .add_plugins(RapierPhysicsPlugin::::pixels_per_meter(100.0)) + .add_plugins(RapierPhysicsPlugin::::pixels_per_meter(64.0)) .add_plugins(RapierDebugRenderPlugin::default()) - .add_systems(Startup, (setup_camera, add_player)) + .add_plugins(Camera2DPlugin) + .add_plugins(SimpleTopDownControllerPlugin) + .add_systems(Startup, (scene::setup_scene, 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::{ + prelude::*, + sprite::{MaterialMesh2dBundle, Mesh2dHandle}, + }; use bevy_rapier2d::prelude::*; + const METER: f32 = 64.; - pub fn setup_scene(mut commands: Commands) {} + pub fn setup_scene( + mut commands: Commands, + mut meshes: ResMut>, + mut materials: ResMut>, + ) { + let scene_objs = [ + // Arena walls + (Rectangle::new(16. * METER, METER), (0., 7.5 * METER)), + (Rectangle::new(16. * METER, METER), (0., -7.5 * METER)), + (Rectangle::new(METER, 16. * METER), (7.5 * METER, 0.)), + (Rectangle::new(METER, 16. * METER), (-7.5 * METER, 0.)), + (Rectangle::new(8. * METER, METER), (0., 2. * METER)), + (Rectangle::new(1. * METER, 2. * METER), (2. * METER, 0.)), + (Rectangle::new(8. * METER, METER), (0., -2. * METER)), + ]; + + for (shape_, pos) in scene_objs { + let shape = Mesh2dHandle(meshes.add(shape_)); + commands + .spawn(MaterialMesh2dBundle { + mesh: shape, + material: materials.add(Color::rgb(1., 0., 0.)), + transform: Transform::from_xyz(pos.0, pos.1, 1.), + ..default() + }) + .insert(( + RigidBody::Fixed, + Collider::cuboid(shape_.half_size.x, shape_.half_size.y), + )); + } + } } mod player { use bevy::prelude::*; use bevy_rapier2d::prelude::*; + use some_bevy_tools::camera_2d::Camera2DController; use std::f32::consts::PI; const TURN_SPEED: f32 = PI / 100.; @@ -42,7 +77,7 @@ mod player { } pub fn add_player(mut commands: Commands, asset_server: Res) { - commands + let player = commands .spawn(( Player { move_cooldown: Timer::from_seconds(0.01, TimerMode::Repeating), @@ -53,15 +88,25 @@ mod player { ..default() }, )) - .insert(Collider::cuboid(8., 8.)); + .insert((Collider::cuboid(32., 32.),)) + .insert(KinematicCharacterController { ..default() }) + .id(); + commands.spawn(( + Camera2dBundle::default(), + Camera2DController::new_follow_with_speed(player, 300.), + )); } pub fn move_player( kb_input: Res>, - mut query: Query<(&mut Transform, &mut Player)>, + mut query: Query<( + &mut Transform, + &mut Player, + &mut KinematicCharacterController, + )>, time: Res