use super::*;
#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
pub struct OwnedHandleCounts {
pub bodies: usize,
pub shapes: usize,
pub joints: usize,
pub chains: usize,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub struct OutstandingOwnedHandles {
pub strong_count: usize,
pub counts: OwnedHandleCounts,
}
impl OutstandingOwnedHandles {
pub fn total(&self) -> usize {
self.counts.bodies + self.counts.shapes + self.counts.joints + self.counts.chains
}
}
#[derive(Clone, Debug)]
pub struct Counters {
pub body_count: i32,
pub shape_count: i32,
pub contact_count: i32,
pub joint_count: i32,
pub island_count: i32,
pub stack_used: i32,
pub static_tree_height: i32,
pub tree_height: i32,
pub byte_count: i32,
pub task_count: i32,
pub color_counts: [i32; 24],
}
impl Counters {
#[inline]
pub fn from_raw(raw: ffi::b2Counters) -> Self {
Self {
body_count: raw.bodyCount,
shape_count: raw.shapeCount,
contact_count: raw.contactCount,
joint_count: raw.jointCount,
island_count: raw.islandCount,
stack_used: raw.stackUsed,
static_tree_height: raw.staticTreeHeight,
tree_height: raw.treeHeight,
byte_count: raw.byteCount,
task_count: raw.taskCount,
color_counts: raw.colorCounts,
}
}
}
#[derive(Copy, Clone, Debug, PartialEq)]
pub struct Profile {
pub step: f32,
pub pairs: f32,
pub collide: f32,
pub solve: f32,
pub prepare_stages: f32,
pub solve_constraints: f32,
pub prepare_constraints: f32,
pub integrate_velocities: f32,
pub warm_start: f32,
pub solve_impulses: f32,
pub integrate_positions: f32,
pub relax_impulses: f32,
pub apply_restitution: f32,
pub store_impulses: f32,
pub split_islands: f32,
pub transforms: f32,
pub sensor_hits: f32,
pub joint_events: f32,
pub hit_events: f32,
pub refit: f32,
pub bullets: f32,
pub sleep_islands: f32,
pub sensors: f32,
}
impl Profile {
#[inline]
pub fn from_raw(raw: ffi::b2Profile) -> Self {
Self {
step: raw.step,
pairs: raw.pairs,
collide: raw.collide,
solve: raw.solve,
prepare_stages: raw.prepareStages,
solve_constraints: raw.solveConstraints,
prepare_constraints: raw.prepareConstraints,
integrate_velocities: raw.integrateVelocities,
warm_start: raw.warmStart,
solve_impulses: raw.solveImpulses,
integrate_positions: raw.integratePositions,
relax_impulses: raw.relaxImpulses,
apply_restitution: raw.applyRestitution,
store_impulses: raw.storeImpulses,
split_islands: raw.splitIslands,
transforms: raw.transforms,
sensor_hits: raw.sensorHits,
joint_events: raw.jointEvents,
hit_events: raw.hitEvents,
refit: raw.refit,
bullets: raw.bullets,
sleep_islands: raw.sleepIslands,
sensors: raw.sensors,
}
}
#[inline]
pub fn into_raw(self) -> ffi::b2Profile {
ffi::b2Profile {
step: self.step,
pairs: self.pairs,
collide: self.collide,
solve: self.solve,
prepareStages: self.prepare_stages,
solveConstraints: self.solve_constraints,
prepareConstraints: self.prepare_constraints,
integrateVelocities: self.integrate_velocities,
warmStart: self.warm_start,
solveImpulses: self.solve_impulses,
integratePositions: self.integrate_positions,
relaxImpulses: self.relax_impulses,
applyRestitution: self.apply_restitution,
storeImpulses: self.store_impulses,
splitIslands: self.split_islands,
transforms: self.transforms,
sensorHits: self.sensor_hits,
jointEvents: self.joint_events,
hitEvents: self.hit_events,
refit: self.refit,
bullets: self.bullets,
sleepIslands: self.sleep_islands,
sensors: self.sensors,
}
}
}