63 lines
1.5 KiB
Rust
63 lines
1.5 KiB
Rust
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<AssetServer>) {
|
|
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<ButtonInput<KeyCode>>) -> 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<ButtonInput<KeyCode>>,
|
|
mut query: Query<(&mut PhysicsBody, &Kirby), With<Kirby>>,
|
|
) {
|
|
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,
|
|
}
|