pub use crate::collision::{
calculate_movement, CollisionBox, CollisionBundle, CollisionData, CollisionLayers,
};
use crate::collision::{draw_collision_boxes, update_collision_data};
use crate::physics::{apply_gravity, move_rigidbodies};
pub use crate::physics::{Gravity, PhysicsBundle, PhysicsConfiguration, RigidBody, Velocity};
use crate::sensors::check_sensors;
pub use crate::sensors::{SensorBox, SensorBundle, SensorData, SensorLayers};
use bevy::prelude::*;
use bevy_prototype_debug_lines::*;
mod collision;
mod physics;
mod sensors;
pub struct PhysicsPlugin;
impl Plugin for PhysicsPlugin {
fn build(&self, app: &mut App) {
app.insert_resource(PhysicsConfiguration {
paused: false,
show_collision_boxes: false,
})
.add_plugin(DebugLinesPlugin::default())
.add_system(apply_gravity.before(calculate_movement))
.add_system(update_collision_data.before(calculate_movement))
.add_system(calculate_movement.before(move_rigidbodies))
.add_system(move_rigidbodies)
.add_system(draw_collision_boxes)
.add_system(check_sensors.after(move_rigidbodies));
}
}
mod tests {
use super::*;
#[allow(dead_code)]
pub fn create_physics_app() -> App {
let mut app = App::new();
app.insert_resource(PhysicsConfiguration {
paused: false,
show_collision_boxes: false,
})
.add_system(apply_gravity.before(move_rigidbodies))
.add_system(update_collision_data.before(calculate_movement))
.add_system(calculate_movement.before(move_rigidbodies))
.add_system(move_rigidbodies)
.insert_resource(Time::default())
.insert_resource(Gravity(Vec2::new(0.0, -9.81)));
app
}
}