movement + collision untested and unsued (but for real this time)
All checks were successful
Build Bevy Game (Linux) / build (push) Successful in 18m45s
All checks were successful
Build Bevy Game (Linux) / build (push) Successful in 18m45s
This commit is contained in:
parent
113eabfb16
commit
2c120106c2
3 changed files with 50 additions and 0 deletions
38
src/physics_body.rs
Normal file
38
src/physics_body.rs
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue