Skip to main content

loam_physics/
state.rs

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}