1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
//! Bod2D for Rust
//!
//! You won't find a lot of information about Box2D itself here,
//! look at [the official website](http://box2d.org/) instead.
//!
//! # World
//!
//! ```
//! use wrapped2d::b2;
//! use wrapped2d::user_data::NoUserData;
//!
//! let gravity = b2::Vec2 { x: 0., y: -10. };
//! let world = b2::World::<NoUserData>::new(&gravity);
//! ```
//!
//! # Handles
//!
//! Bodies, fixtures and joints are accessed through handles and
//! their borrowing is dynamically checked by `RefCell`s.
//!
//! ```
//! # use wrapped2d::b2;
//! # use wrapped2d::user_data::NoUserData;
//! # let gravity = b2::Vec2 { x: 0., y: -10. };
//! # let mut world = b2::World::<NoUserData>::new(&gravity);
//! let mut def = b2::BodyDef {
//! body_type: b2::BodyType::Dynamic,
//! position: b2::Vec2 { x: 10., y: 10. },
//! .. b2::BodyDef::new()
//! };
//!
//! let handle = world.create_body(&def);
//! let mut body = world.body_mut(handle);
//!
//! let shape = b2::PolygonShape::new_box(0.5, 0.5);
//!
//! let handle = body.create_fast_fixture(&shape, 2.);
//! let fixture = body.fixture(handle);
//! ```
//!
//! # User Data
//!
//! You can provide a unit struct to specify the user data types that will be used for bodies,
//! joints and fixtures. For example:
//!
//! ```
//! use wrapped2d::b2;
//! use wrapped2d::user_data::*;
//!
//! pub type ObjectId = u64;
//!
//! pub struct CustomUserData;
//! impl UserDataTypes for CustomUserData {
//! type BodyData = Option<ObjectId>;
//! type JointData = ();
//! type FixtureData = FixtureKind;
//! }
//!
//! pub type World = b2::World<CustomUserData>;
//!
//! pub enum FixtureKind {
//! Wood,
//! Metal,
//! }
//!
//! fn main() {
//! let mut world = World::new(&b2::Vec2 { x: 0., y: -10. });
//!
//! let def = b2::BodyDef {
//! body_type: b2::BodyType::Dynamic,
//! position: b2::Vec2 { x: 0., y: -15. },
//! ..b2::BodyDef::new()
//! };
//!
//! let h1 = world.create_body(&def); // will use `Default` user data (`None` here)
//! let h2 = world.create_body_with(&def, Some(2)); // specifying user data for the body
//!
//! let user_data = world.body(h2).user_data(); // access the body user data
//! }
//! ```
extern crate libc;
extern crate vec_map;
#[macro_use]
extern crate bitflags;
#[cfg(feature = "serialize")]
#[macro_use]
extern crate serde_derive;
#[cfg(feature = "serialize")]
extern crate serde;
#[cfg(feature = "nalgebra")]
extern crate nalgebra;
#[cfg(feature = "cgmath")]
extern crate cgmath;
mod ffi;
#[doc(hidden)]
#[macro_use]
pub mod wrap;
#[doc(hidden)]
pub mod handle;
pub mod common;
pub mod collision;
pub mod dynamics;
pub mod user_data;
#[cfg(feature = "serialize")]
pub mod serialize;
pub mod b2 {
pub use common::{Color, DrawFlags, Draw};
pub use common::math::{Rot, Sweep, Transform, Vec2};
pub use common::math::{cross_vv, cross_vs, cross_sv};
pub use common::settings::{ANGULAR_SLOP, LINEAR_SLOP, MAX_MANIFOLD_POINTS,
MAX_POLYGON_VERTICES, PI, POLYGON_RADIUS};
pub use collision::{AABB, ContactFeature, ContactId, Manifold, ManifoldPoint, WorldManifold,
RayCastInput, RayCastOutput, ContactFeatureType, ManifoldType, PointState,
get_point_states, test_overlap, distance, time_of_impact};
pub use collision::shapes::{MassData, ShapeType, UnknownShape, Shape, ChainShape, CircleShape,
EdgeShape, PolygonShape};
pub use dynamics::Profile;
pub use dynamics::world::{World, BodyHandle, JointHandle};
pub use dynamics::world::callbacks::{ContactImpulse, ContactFilter, ContactListener,
QueryCallback, RayCastCallback};
pub use dynamics::body::{Body, BodyDef, MetaBody, BodyType, FixtureHandle};
pub use dynamics::fixture::{Filter, Fixture, FixtureDef, MetaFixture};
pub use dynamics::joints::{DistanceJoint, DistanceJointDef, FrictionJoint, FrictionJointDef,
GearJoint, GearJointDef, MetaJoint, MotorJoint,
MotorJointDef, MouseJoint, MouseJointDef, PrismaticJoint,
PrismaticJointDef, PulleyJoint, PulleyJointDef, RevoluteJoint,
RevoluteJointDef, RopeJoint, RopeJointDef, WeldJoint, WeldJointDef,
WheelJoint, WheelJointDef, JointType, LimitState, UnknownJoint,
Joint, JointDef};
}