use super::{DEFAULT_CATEGORY_BITS, DEFAULT_MASK_BITS};
use crate::core::SECRET_COOKIE;
use crate::math_functions::Vec2;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Filter {
pub category_bits: u64,
pub mask_bits: u64,
pub group_index: i32,
}
pub fn default_filter() -> Filter {
Filter {
category_bits: DEFAULT_CATEGORY_BITS,
mask_bits: DEFAULT_MASK_BITS,
group_index: 0,
}
}
impl Default for Filter {
fn default() -> Self {
default_filter()
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct QueryFilter {
pub category_bits: u64,
pub mask_bits: u64,
}
pub fn default_query_filter() -> QueryFilter {
QueryFilter {
category_bits: DEFAULT_CATEGORY_BITS,
mask_bits: DEFAULT_MASK_BITS,
}
}
impl Default for QueryFilter {
fn default() -> Self {
default_query_filter()
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct SurfaceMaterial {
pub friction: f32,
pub restitution: f32,
pub rolling_resistance: f32,
pub tangent_speed: f32,
pub user_material_id: u64,
pub custom_color: u32,
}
pub fn default_surface_material() -> SurfaceMaterial {
SurfaceMaterial {
friction: 0.6,
restitution: 0.0,
rolling_resistance: 0.0,
tangent_speed: 0.0,
user_material_id: 0,
custom_color: 0,
}
}
impl Default for SurfaceMaterial {
fn default() -> Self {
default_surface_material()
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct ShapeDef {
pub user_data: u64,
pub material: SurfaceMaterial,
pub density: f32,
pub filter: Filter,
pub enable_custom_filtering: bool,
pub is_sensor: bool,
pub enable_sensor_events: bool,
pub enable_contact_events: bool,
pub enable_hit_events: bool,
pub enable_pre_solve_events: bool,
pub invoke_contact_creation: bool,
pub update_body_mass: bool,
pub internal_value: i32,
}
pub fn default_shape_def() -> ShapeDef {
ShapeDef {
user_data: 0,
material: default_surface_material(),
density: 1.0,
filter: default_filter(),
enable_custom_filtering: false,
is_sensor: false,
enable_sensor_events: false,
enable_contact_events: false,
enable_hit_events: false,
enable_pre_solve_events: false,
invoke_contact_creation: true,
update_body_mass: true,
internal_value: SECRET_COOKIE,
}
}
impl Default for ShapeDef {
fn default() -> Self {
default_shape_def()
}
}
#[derive(Debug, Clone, PartialEq, Default)]
pub struct ChainDef {
pub user_data: u64,
pub points: Vec<Vec2>,
pub materials: Vec<SurfaceMaterial>,
pub filter: Filter,
pub is_loop: bool,
pub enable_sensor_events: bool,
pub internal_value: i32,
}
pub fn default_chain_def() -> ChainDef {
ChainDef {
user_data: 0,
points: Vec::new(),
materials: vec![default_surface_material()],
filter: default_filter(),
is_loop: false,
enable_sensor_events: false,
internal_value: SECRET_COOKIE,
}
}