oxygengine_physics_2d/
lib.rs1extern 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}