use crate::physics_body::PhysicsBody; use crate::sphere_collider::SphereCollider; use bevy::prelude::*; #[derive(Component)] #[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")); 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 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, }