bevy_2d_box_physics 0.1.1

A 2D box-collision physics engine for use with the bevy engine
Documentation
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;

/// Bevy plugin for handling Physics on the applicable RigidBodies
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
    }
}