oxygengine_physics_2d/
lib.rs

1extern crate oxygengine_core as core;
2
3pub mod component;
4pub mod resource;
5pub mod system;
6
7pub use ncollide2d as collide;
8pub use nphysics2d as physics;
9
10pub mod prelude {
11    pub use crate::{
12        collide::shape::*,
13        component::*,
14        physics::*,
15        physics::{math::*, object::*},
16        resource::*,
17        system::*,
18    };
19}
20
21use crate::{
22    component::{
23        Collider2d, Collider2dBody, Collider2dBodyPrefabProxy, Collider2dPrefabProxy, RigidBody2d,
24        RigidBody2dPrefabProxy,
25    },
26    resource::{Physics2dWorld, Physics2dWorldSimulationMode},
27    system::{physics_2d_system, Physics2dSystemCache, Physics2dSystemResources},
28};
29use core::{
30    app::AppBuilder,
31    ecs::pipeline::{PipelineBuilder, PipelineBuilderError},
32    prefab::PrefabManager,
33    Scalar,
34};
35use nphysics2d::math::Vector;
36
37pub fn bundle_installer<PB>(
38    builder: &mut AppBuilder<PB>,
39    (gravity, simulation_mode): (Vector<Scalar>, Physics2dWorldSimulationMode),
40) -> Result<(), PipelineBuilderError>
41where
42    PB: PipelineBuilder,
43{
44    builder.install_resource(Physics2dWorld::new(gravity, simulation_mode));
45    builder.install_resource(Physics2dSystemCache::default());
46    builder.install_system::<Physics2dSystemResources>("physics-2d", physics_2d_system, &[])?;
47    Ok(())
48}
49
50pub fn prefabs_installer(prefabs: &mut PrefabManager) {
51    prefabs.register_component_factory_proxy::<RigidBody2d, RigidBody2dPrefabProxy>("RigidBody2d");
52    prefabs.register_component_factory_proxy::<Collider2d, Collider2dPrefabProxy>("Collider2d");
53    prefabs.register_component_factory_proxy::<Collider2dBody, Collider2dBodyPrefabProxy>(
54        "Collider2dBody",
55    );
56}