Crate bevy_physimple[][src]

physme is a simple 2d and 3d physics library that doesn’t aim for physical accuracy, but instead for a good feel and ergonomics. The engine provides primitives and systems for all the physics goodies you’d expect:

  • Broad phase
  • Narrow phase
  • Manifold solving
  • Physics step
  • Draw transform synchronization

Creating your first game with physme is as simple as adding one of the physics plugin

use physme::prelude2d::*;
let mut builder = App::build();
builder
    .add_plugin(Physics2dPlugin);

optionally setting some parameters

    .add_resource(GlobalGravity(Vec2::new(0.0, -500.0)))
    .add_resource(GlobalFriction(0.90))
    .add_resource(GlobalStep(15.0));

and then, in your setup function, adding a RigidBody component to your entities

fn setup(
    mut commands: Commands,
    asset_server: Res<AssetServer>,
    mut materials: ResMut<Assets<ColorMaterial>>,
) {
    let icon = asset_server.load("assets/icon.png");
    commands
        .spawn(SpriteComponents {
            material: materials.add(icon.into()),
            ..Default::default()
        })
        .with(
            RigidBody::new(Mass::Real(1.0))
                .with_status(Status::Semikinematic)
                .with_position(Vec2::new(0.0, 0.0))
                .with_terminal(Vec2::new(500.0, 1000.0)),
        );
}

as well as some children with an arbitrary amount of Shape components.

        .with_children(|parent| {
            parent.spawn((Shape::from(Size2::new(28.0, 28.0)),));
        });

And there you go! This will perform all the physics updates on every frame of the game.

Modules

bodies
common
plugin
prelude

This module re-exports all the things you might need for 2d physics simulation.

shapes