From 113eabfb1669c58b41a5bd6aadb1f8db754e2a61 Mon Sep 17 00:00:00 2001 From: Crizomb Date: Fri, 26 Dec 2025 03:20:47 +0100 Subject: [PATCH] movement + collision untested and unsued --- src/kirby.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++-------- src/main.rs | 8 +++++-- 2 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/kirby.rs b/src/kirby.rs index eac99ec..bf282bb 100644 --- a/src/kirby.rs +++ b/src/kirby.rs @@ -1,19 +1,63 @@ -use bevy::{prelude::*, render::renderer}; +use crate::physics_body::PhysicsBody; +use crate::sphere_collider::SphereCollider; +use bevy::prelude::*; #[derive(Component)] -#[require(Transform, Sprite)] -pub struct Kirby(); +#[require(Sprite, PhysicsBody, SphereCollider)] +pub struct Kirby { + move_speed: f32, +} pub fn kirby_spawn(mut commands: Commands, asset_server: Res) { let sprite = Sprite::from_image(asset_server.load("sprites/kirby.png")); - commands.spawn((Kirby(), Transform::from_xyz(0.0, 0.0, 0.0), sprite)); + let body = PhysicsBody { + mass: 10.0, + force: Vec2::ZERO, + velocity: Vec2::ZERO, + drag: 0.01, + }; + let transform = Transform::from_xyz(0.0, 0.0, 0.0).with_scale(Vec3::ONE * 0.25); + commands.spawn((Kirby { move_speed: 200.0 }, transform, sprite, body)); } -pub fn kirby_input( - keyboard_input: Res>, - // query: Query<&mut Transform, With>, -) { - if keyboard_input.pressed(KeyCode::Space) { +pub fn get_dir(keys: Res>) -> Vec2 { + if keys.pressed(KeyCode::Space) { println!("SUCKING"); } + + let mut dir = Vec2::ZERO; + + if keys.pressed(KeyCode::KeyW) { + dir.y += 1.0; + } + if keys.pressed(KeyCode::KeyS) { + dir.y -= 1.0; + } + if keys.pressed(KeyCode::KeyA) { + dir.x -= 1.0; + } + if keys.pressed(KeyCode::KeyD) { + dir.x += 1.0; + } + + dir.normalize_or_zero() +} + +pub fn kirby_player_move( + keys: Res>, + mut query: Query<(&mut PhysicsBody, &Kirby), With>, +) { + if keys.pressed(KeyCode::Space) { + println!("SUCKING"); + } + let dir = get_dir(keys); + for (mut body, kirby) in &mut query { + body.velocity = dir * kirby.move_speed; + } +} + +#[derive(Component)] +#[require(Sprite, Transform)] +pub struct KirbySuction { + box_size: Vec2, } diff --git a/src/main.rs b/src/main.rs index ca29329..3a42a27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,15 +1,19 @@ use bevy::prelude::*; use camera::spawn_camera; -use kirby::kirby_input; +use kirby::kirby_player_move; use kirby::kirby_spawn; +use physics_body::integrate; + mod camera; mod kirby; +mod physics_body; +mod sphere_collider; fn main() { App::new() .add_plugins(DefaultPlugins) .add_systems(Startup, spawn_camera) .add_systems(Startup, kirby_spawn) - .add_systems(Update, kirby_input) + .add_systems(FixedUpdate, (kirby_player_move, integrate).chain()) .run(); }