Struct rhusics_ecs::PhysicalEntityParts
source · pub struct PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
T: Pose<P::Point, R> + Clone + Component + Send + Sync + 'static,
P: Primitive + Send + Sync + 'static,
B: Bound<Point = P::Point> + Send + Sync + 'static,
P::Point: EuclideanSpace<Scalar = V::Scalar> + Send + Sync + 'static,
V::Scalar: BaseFloat + Send + Sync + 'static,
V: VectorSpace + Zero + Clone + Send + Sync + 'static,
A: Copy + Zero + Clone + Send + Sync + 'static,
Y: Send + Sync + 'static,
I: Send + Sync + 'static,
R: Rotation<P::Point> + Send + Sync + 'static,{
pub shapes: WriteStorage<'a, CollisionShape<P, T, B, Y>>,
pub poses: WriteStorage<'a, T>,
pub entities: WriteStorage<'a, PhysicalEntity<V::Scalar>>,
pub masses: WriteStorage<'a, Mass<V::Scalar, I>>,
pub velocities: WriteStorage<'a, Velocity<V, A>>,
pub next_poses: WriteStorage<'a, NextFrame<T>>,
pub next_velocities: WriteStorage<'a, NextFrame<Velocity<V, A>>>,
pub forces: WriteStorage<'a, ForceAccumulator<V, A>>,
/* private fields */
}
Expand description
SystemData for easier creation of physical entities.
Type parameters:
P
: Collision PrimitiveY
: ColliderR
: Rotational quantityV
: Linear velocityA
: Angular velocityI
: InertiaB
: Bounding volumeT
: Transform
Fields
shapes: WriteStorage<'a, CollisionShape<P, T, B, Y>>
Collision shapes
poses: WriteStorage<'a, T>
Body transforms
entities: WriteStorage<'a, PhysicalEntity<V::Scalar>>
Physical entities
masses: WriteStorage<'a, Mass<V::Scalar, I>>
Mass
velocities: WriteStorage<'a, Velocity<V, A>>
Velocity
next_poses: WriteStorage<'a, NextFrame<T>>
Next frame transform
next_velocities: WriteStorage<'a, NextFrame<Velocity<V, A>>>
Next frame velocity
forces: WriteStorage<'a, ForceAccumulator<V, A>>
Forces
Implementations
sourceimpl<'a, P, Y, R, V, A, I, B, T> PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
T: Pose<P::Point, R> + Clone + Component + Send + Sync + 'static,
P: Primitive + Send + Sync + 'static,
B: Bound<Point = P::Point> + Send + Sync + 'static,
P::Point: EuclideanSpace<Scalar = V::Scalar> + Send + Sync + 'static,
V::Scalar: BaseFloat + Send + Sync + 'static,
V: VectorSpace + Zero + Clone + Send + Sync + 'static,
A: Copy + Zero + Clone + Send + Sync + 'static,
Y: Send + Sync + 'static,
I: Send + Sync + 'static,
R: Rotation<P::Point> + Send + Sync + 'static,
impl<'a, P, Y, R, V, A, I, B, T> PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
T: Pose<P::Point, R> + Clone + Component + Send + Sync + 'static,
P: Primitive + Send + Sync + 'static,
B: Bound<Point = P::Point> + Send + Sync + 'static,
P::Point: EuclideanSpace<Scalar = V::Scalar> + Send + Sync + 'static,
V::Scalar: BaseFloat + Send + Sync + 'static,
V: VectorSpace + Zero + Clone + Send + Sync + 'static,
A: Copy + Zero + Clone + Send + Sync + 'static,
Y: Send + Sync + 'static,
I: Send + Sync + 'static,
R: Rotation<P::Point> + Send + Sync + 'static,
sourcepub fn static_entity(
&mut self,
entity: Entity,
shape: CollisionShape<P, T, B, Y>,
pose: T,
physical_entity: PhysicalEntity<V::Scalar>,
mass: Mass<V::Scalar, I>
) -> Result<(), PhysicalEntityCreationError>
pub fn static_entity(
&mut self,
entity: Entity,
shape: CollisionShape<P, T, B, Y>,
pose: T,
physical_entity: PhysicalEntity<V::Scalar>,
mass: Mass<V::Scalar, I>
) -> Result<(), PhysicalEntityCreationError>
Setup static physical entity for given entity.
sourcepub fn dynamic_entity(
&mut self,
entity: Entity,
shape: CollisionShape<P, T, B, Y>,
pose: T,
velocity: Velocity<V, A>,
physical_entity: PhysicalEntity<V::Scalar>,
mass: Mass<V::Scalar, I>
) -> Result<(), PhysicalEntityCreationError>
pub fn dynamic_entity(
&mut self,
entity: Entity,
shape: CollisionShape<P, T, B, Y>,
pose: T,
velocity: Velocity<V, A>,
physical_entity: PhysicalEntity<V::Scalar>,
mass: Mass<V::Scalar, I>
) -> Result<(), PhysicalEntityCreationError>
Setup dynamic physical entity for given entity.
Trait Implementations
sourceimpl<'a, P, Y, R, V, A, I, B, T> SystemData<'a> for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
T: Pose<P::Point, R> + Clone + Component + Send + Sync + 'static,
P: Primitive + Send + Sync + 'static,
B: Bound<Point = P::Point> + Send + Sync + 'static,
P::Point: EuclideanSpace<Scalar = V::Scalar> + Send + Sync + 'static,
V::Scalar: BaseFloat + Send + Sync + 'static,
V: VectorSpace + Zero + Clone + Send + Sync + 'static,
A: Copy + Zero + Clone + Send + Sync + 'static,
Y: Send + Sync + 'static,
I: Send + Sync + 'static,
R: Rotation<P::Point> + Send + Sync + 'static,
WriteStorage<'a, CollisionShape<P, T, B, Y>>: SystemData<'a>,
WriteStorage<'a, T>: SystemData<'a>,
WriteStorage<'a, PhysicalEntity<V::Scalar>>: SystemData<'a>,
WriteStorage<'a, Mass<V::Scalar, I>>: SystemData<'a>,
WriteStorage<'a, Velocity<V, A>>: SystemData<'a>,
WriteStorage<'a, NextFrame<T>>: SystemData<'a>,
WriteStorage<'a, NextFrame<Velocity<V, A>>>: SystemData<'a>,
WriteStorage<'a, ForceAccumulator<V, A>>: SystemData<'a>,
PhantomData<R>: SystemData<'a>,
impl<'a, P, Y, R, V, A, I, B, T> SystemData<'a> for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
T: Pose<P::Point, R> + Clone + Component + Send + Sync + 'static,
P: Primitive + Send + Sync + 'static,
B: Bound<Point = P::Point> + Send + Sync + 'static,
P::Point: EuclideanSpace<Scalar = V::Scalar> + Send + Sync + 'static,
V::Scalar: BaseFloat + Send + Sync + 'static,
V: VectorSpace + Zero + Clone + Send + Sync + 'static,
A: Copy + Zero + Clone + Send + Sync + 'static,
Y: Send + Sync + 'static,
I: Send + Sync + 'static,
R: Rotation<P::Point> + Send + Sync + 'static,
WriteStorage<'a, CollisionShape<P, T, B, Y>>: SystemData<'a>,
WriteStorage<'a, T>: SystemData<'a>,
WriteStorage<'a, PhysicalEntity<V::Scalar>>: SystemData<'a>,
WriteStorage<'a, Mass<V::Scalar, I>>: SystemData<'a>,
WriteStorage<'a, Velocity<V, A>>: SystemData<'a>,
WriteStorage<'a, NextFrame<T>>: SystemData<'a>,
WriteStorage<'a, NextFrame<Velocity<V, A>>>: SystemData<'a>,
WriteStorage<'a, ForceAccumulator<V, A>>: SystemData<'a>,
PhantomData<R>: SystemData<'a>,
sourcefn fetch(res: &'a Resources) -> Self
fn fetch(res: &'a Resources) -> Self
Fetches the system data from
Resources
. Note that this is only specified for one concrete
lifetime 'a
, you need to implement the SystemData
trait for every possible
lifetime. Read moresourcefn reads() -> Vec<ResourceId>
fn reads() -> Vec<ResourceId>
Returns all read dependencies as fetched from
Self::fetch
. Read moresourcefn writes() -> Vec<ResourceId>
fn writes() -> Vec<ResourceId>
Returns all write dependencies as fetched from
Self::fetch
. Read moreAuto Trait Implementations
impl<'a, P, Y, R, V, A, I, B, T> !RefUnwindSafe for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>
impl<'a, P, Y, R, V, A, I, B, T> Send for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>
impl<'a, P, Y, R, V, A, I, B, T> Sync for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>
impl<'a, P, Y, R, V, A, I, B, T> Unpin for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>where
A: Unpin,
B: Unpin,
I: Unpin,
P: Unpin,
R: Unpin,
T: Unpin,
V: Unpin,
Y: Unpin,
<V as VectorSpace>::Scalar: Unpin,
impl<'a, P, Y, R, V, A, I, B, T> !UnwindSafe for PhysicalEntityParts<'a, P, Y, R, V, A, I, B, T>
Blanket Implementations
impl<T> Any for Twhere
T: Any,
impl<T> Any for Twhere
T: Any,
fn get_type_id(&self) -> TypeId
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<'a, T> DynamicSystemData<'a> for Twhere
T: SystemData<'a>,
impl<'a, T> DynamicSystemData<'a> for Twhere
T: SystemData<'a>,
type Accessor = StaticAccessor<T>
type Accessor = StaticAccessor<T>
The accessor of the
SystemData
, which specifies the read and write dependencies and does
the fetching. Read moresourcefn setup(_: &StaticAccessor<T>, res: &mut Resources)
fn setup(_: &StaticAccessor<T>, res: &mut Resources)
Sets up
Resources
for fetching this system data.