bevy-santa/src/physics_body.rs
Crizomb 2c120106c2
All checks were successful
Build Bevy Game (Linux) / build (push) Successful in 18m45s
movement + collision untested and unsued (but for real this time)
2025-12-26 13:12:09 +01:00

38 lines
1.1 KiB
Rust

use bevy::{prelude::*, render::renderer};
#[derive(Component)]
#[require(Transform)]
pub struct PhysicsBody {
pub mass: f32,
pub force: Vec2,
pub velocity: Vec2,
pub drag: f32, // velocity multiplied each physics update by (1-drag)
}
impl Default for PhysicsBody {
fn default() -> Self {
Self {
mass: 1.0,
force: Vec2::ZERO,
velocity: Vec2::ZERO,
drag: 0.0,
}
}
}
pub fn integrate(mut query: Query<(&mut Transform, &mut PhysicsBody)>, time: Res<Time<Fixed>>) {
for (mut transform, mut physicsbody) in &mut query {
let force = physicsbody.force;
let mass = physicsbody.mass;
let drag = physicsbody.drag;
let delta_secs = time.delta_secs();
physicsbody.velocity += force * delta_secs / mass;
// Drag because stability is good you know
physicsbody.velocity *= 1.0 - drag;
transform.translation.x += physicsbody.velocity.x * delta_secs;
transform.translation.y += physicsbody.velocity.y * delta_secs;
physicsbody.force = Vec2::ZERO;
}
}