pub struct PhysicsIsland { /* private fields */ }
Expand description
A simulation island that contains bodies, contacts, and joints. Used for sleeping and waking.
Islands are retained across time steps. Each dynamic body starts with its own island, and when a constraint between two dynamic bodies is created, the islands are merged with union find.
Splitting is deferred and done using depth-first search (DFS). Only one island is split per time step, choosing the sleepiest island with one or more constraints removed as the candidate.
Bodies, contacts, and joints are linked to islands using linked lists for efficient addition, removal,
and merging. Each island stores the head and tail of each list, while each BodyIslandNode
, ContactEdge
,
and JointGraphEdge
stores an IslandNode
that links it to the next and previous item in the list.
Implementations§
Source§impl PhysicsIsland
impl PhysicsIsland
Sourcepub const fn new(id: IslandId) -> Self
pub const fn new(id: IslandId) -> Self
Creates a new PhysicsIsland
with the given ID.
Sourcepub const fn body_count(&self) -> u32
pub const fn body_count(&self) -> u32
Returns the number of bodies in the island.
Sourcepub const fn contact_count(&self) -> u32
pub const fn contact_count(&self) -> u32
Returns the number of contacts in the island.
Sourcepub const fn joint_count(&self) -> u32
pub const fn joint_count(&self) -> u32
Returns the number of joints in the island.
Sourcepub const fn is_sleeping(&self) -> bool
pub const fn is_sleeping(&self) -> bool
Returns true
if the island is sleeping.
Sourcepub const fn constraints_removed(&self) -> u32
pub const fn constraints_removed(&self) -> u32
Returns the number of constraints that have been removed from the island,
Sourcepub fn validate(
&self,
body_islands: &Query<'_, '_, &BodyIslandNode, Or<(With<Disabled>, Without<Disabled>)>>,
contact_graph: &ContactGraphInternal,
joint_graph: &JointGraph,
)
pub fn validate( &self, body_islands: &Query<'_, '_, &BodyIslandNode, Or<(With<Disabled>, Without<Disabled>)>>, contact_graph: &ContactGraphInternal, joint_graph: &JointGraph, )
Validates the island.
Sourcepub fn validate_bodies(
&self,
body_islands: &Query<'_, '_, &BodyIslandNode, Or<(With<Disabled>, Without<Disabled>)>>,
)
pub fn validate_bodies( &self, body_islands: &Query<'_, '_, &BodyIslandNode, Or<(With<Disabled>, Without<Disabled>)>>, )
Validates the body linked list.
Sourcepub fn validate_contacts(&self, contact_graph: &ContactGraphInternal)
pub fn validate_contacts(&self, contact_graph: &ContactGraphInternal)
Validates the contact linked list.
Sourcepub fn validate_joints(&self, joint_graph: &JointGraph)
pub fn validate_joints(&self, joint_graph: &JointGraph)
Validates the joint linked list.
Trait Implementations§
Source§impl Clone for PhysicsIsland
impl Clone for PhysicsIsland
Source§fn clone(&self) -> PhysicsIsland
fn clone(&self) -> PhysicsIsland
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for PhysicsIsland
impl Debug for PhysicsIsland
Source§impl PartialEq for PhysicsIsland
impl PartialEq for PhysicsIsland
impl StructuralPartialEq for PhysicsIsland
Auto Trait Implementations§
impl Freeze for PhysicsIsland
impl RefUnwindSafe for PhysicsIsland
impl Send for PhysicsIsland
impl Sync for PhysicsIsland
impl Unpin for PhysicsIsland
impl UnwindSafe for PhysicsIsland
Blanket Implementations§
Source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T
ShaderType
for self
. When used in AsBindGroup
derives, it is safe to assume that all images in self
exist.Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
Source§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.