pub struct CDEngine {
pub quadtree: QTNode,
pub static_hazards: Vec<Hazard>,
pub dynamic_hazards: Vec<Hazard>,
pub config: CDEConfig,
pub uncommitted_deregisters: Vec<Hazard>,
}
Expand description
The Collision Detection Engine (CDE).
Hazard
s can be (de)registered and collision queries can be performed.
Fields§
§quadtree: QTNode
Root node of the quadtree
static_hazards: Vec<Hazard>
Static hazards that are registered at the start and do not change during the CDE’s lifetime
dynamic_hazards: Vec<Hazard>
Dynamic hazards that can be registered and deregistered during the CDE’s lifetime
config: CDEConfig
Configuration of the CDE
uncommitted_deregisters: Vec<Hazard>
Hazards which have been deregistered but not yet fully removed from the quadtree (just deactivated)
Implementations§
Source§impl CDEngine
impl CDEngine
pub fn new( bbox: Rect, static_hazards: Vec<Hazard>, config: CDEConfig, ) -> CDEngine
Sourcepub fn register_hazard(&mut self, hazard: Hazard)
pub fn register_hazard(&mut self, hazard: Hazard)
Registers a new hazard in the CDE.
Sourcepub fn deregister_hazard(
&mut self,
hazard_entity: HazardEntity,
commit_instant: bool,
)
pub fn deregister_hazard( &mut self, hazard_entity: HazardEntity, commit_instant: bool, )
Removes a hazard from the CDE.
If commit_instant
the deregistration is fully executed immediately.
If not, the deregistration causes the hazard to be deactivated in the quadtree and
the hazard_proximity_grid to become dirty (and therefore inaccessible).
Can be beneficial not to commit_instant
if multiple hazards are to be deregistered, or if the chance of
restoring from a snapshot with the hazard present is high.
pub fn create_snapshot(&mut self) -> CDESnapshot
Sourcepub fn restore(&mut self, snapshot: &CDESnapshot)
pub fn restore(&mut self, snapshot: &CDESnapshot)
Restores the CDE to a previous state, as described by the snapshot.
Sourcepub fn commit_deregisters(&mut self)
pub fn commit_deregisters(&mut self)
Commits all pending deregisters by actually removing them from the quadtree
pub fn has_uncommitted_deregisters(&self) -> bool
Sourcepub fn all_hazards(&self) -> impl Iterator<Item = &Hazard>
pub fn all_hazards(&self) -> impl Iterator<Item = &Hazard>
Returns all hazards in the CDE, both static and dynamic.
Sourcepub fn detect_poly_collision(
&self,
shape: &SPolygon,
filter: &impl HazardFilter,
) -> bool
pub fn detect_poly_collision( &self, shape: &SPolygon, filter: &impl HazardFilter, ) -> bool
Checks whether a simple polygon collides with any of the (relevant) hazards
§Arguments
shape
- The shape (already transformed) to be checked for collisionsfilter
- Hazard filter to be applied
Sourcepub fn detect_surrogate_collision(
&self,
base_surrogate: &SPSurrogate,
transform: &Transformation,
filter: &impl HazardFilter,
) -> bool
pub fn detect_surrogate_collision( &self, base_surrogate: &SPSurrogate, transform: &Transformation, filter: &impl HazardFilter, ) -> bool
Checks whether a surrogate collides with any of the (relevant) hazards.
§Arguments
base_surrogate
- The (untransformed) surrogate to be checked for collisionstransform
- The transformation to be applied to the surrogate (on the fly)filter
- Hazard filter to be applied
Sourcepub fn detect_containment_collision(
&self,
shape: &SPolygon,
haz_shape: &SPolygon,
haz_entity: HazardEntity,
) -> bool
pub fn detect_containment_collision( &self, shape: &SPolygon, haz_shape: &SPolygon, haz_entity: HazardEntity, ) -> bool
Check for collision by containment between a shape and a hazard. This only guarantees to detect collisions caused by full containment of one shape in another.
§Arguments
shape
- The shape to be checked for containmenthaz_shape
- The shape of the respective hazardhaz_entity
- The entity inducing the hazard
Sourcepub fn collect_poly_collisions(
&self,
shape: &SPolygon,
detector: &mut impl HazardDetector,
)
pub fn collect_poly_collisions( &self, shape: &SPolygon, detector: &mut impl HazardDetector, )
Collects all hazards with which the polygon collides and reports them to the detector.
§Arguments
shape
- The shape to be checked for collisionsdetector
- The detector to which the hazards are reported
Sourcepub fn collect_surrogate_collisions(
&self,
base_surrogate: &SPSurrogate,
transform: &Transformation,
detector: &mut impl HazardDetector,
)
pub fn collect_surrogate_collisions( &self, base_surrogate: &SPSurrogate, transform: &Transformation, detector: &mut impl HazardDetector, )
Collects all hazards with which the surrogate collides and reports them to the detector.
§Arguments
base_surrogate
- The (untransformed) surrogate to be checked for collisionstransform
- The transformation to be applied to the surrogate (on the fly)detector
- The detector to which the hazards are reported
Sourcepub fn get_virtual_root(&self, bbox: Rect) -> &QTNode
pub fn get_virtual_root(&self, bbox: Rect) -> &QTNode
Returns the lowest QTNode
that completely surrounds the given bounding box.
Used to initiate collision checks from lower in the quadtree.
pub fn bbox(&self) -> Rect
Trait Implementations§
Auto Trait Implementations§
impl Freeze for CDEngine
impl RefUnwindSafe for CDEngine
impl Send for CDEngine
impl Sync for CDEngine
impl Unpin for CDEngine
impl UnwindSafe for CDEngine
Blanket Implementations§
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> 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 more