1use std::collections::BTreeMap;
2
3use crate::body::{BodyArena, BodyId};
4use crate::collider::ColliderKind;
5use crate::geometry::GeometryStore;
6use crate::integrator::PhysicsSpace;
7use crate::manifold::Manifold;
8use crate::world::{FieldId, PairKey};
9
10#[cfg_attr(feature = "persist", derive(serde::Serialize, serde::Deserialize))]
11#[cfg_attr(
12 feature = "persist",
13 serde(bound(
14 serialize = "S::Point: serde::Serialize, S::Vector: serde::Serialize, S::Iso: serde::Serialize, S::AngVel: serde::Serialize, S::Inertia: serde::Serialize",
15 deserialize = "S::Point: serde::Deserialize<'de>, S::Vector: serde::Deserialize<'de>, S::Iso: serde::Deserialize<'de>, S::AngVel: serde::Deserialize<'de>, S::Inertia: serde::Deserialize<'de>"
16 ))
17)]
18pub struct WorldState<S: PhysicsSpace> {
19 pub(crate) bodies: BodyArena<S>,
20 pub(crate) geometry: GeometryStore,
21 pub(crate) manifolds: BTreeMap<PairKey, Manifold<S>>,
22 pub(crate) time: f32,
23 pub(crate) field_bindings: Vec<(BodyId, FieldId)>,
24 pub(crate) field_anchors: Vec<BodyId>,
25 #[cfg_attr(feature = "persist", serde(skip))]
26 pub(crate) registrations: Vec<(ColliderKind, ColliderKind)>,
27 #[cfg_attr(feature = "persist", serde(skip))]
28 pub(crate) field_registrations: Vec<ColliderKind>,
29}