PhysicsSteps

Struct PhysicsSteps 

Source
pub struct PhysicsSteps(/* private fields */);
Expand description

Resource to control how many physics steps are performed per second.

Note that the physics update will be performed at most once per frame. It means that if the rate of frames per second is lower than the physics step per second, the physics simulation will slows down.

This resource is used to tune the precision and performance of the physics system. It doesn’t change the speed of the simulation. To change the time scale, look at the PhysicsTime resource instead.

Implementations§

Source§

impl PhysicsSteps

Source

pub fn from_steps_per_seconds(steps_per_second: f32) -> Self

Configure to run at the given number of steps per second

The higher the value, the more precise and the more expensive the physics simulation will be. If the value gets higher than the frame rate of the game, the physics simulation will slows down.

For good results, it is better to choose a value as high as possible but lower than the typical frame rate of the game.

§Panics

Panics if the argument is nan, infinite or negative

Source

pub fn from_delta_time(duration: Duration) -> Self

Configure the physics systems to wait for the given duration before running again

The lower the value, the more precise and the more expensive the physics simulation will be. If the value gets lower than the delta time between each frame of the game, the physics simulation will slows down.

For good results, it is better to choose a value as low as possible, but higher than the typical delay between each frame of the game.

§Panics

Panics if the duration is zero

Source

pub fn every_frame(duration: Duration) -> Self

Configure the physics systems to run at each and every frame, advancing the simulation the same amount of time each frame.

Should NOT be used in production. It is mostly useful for testing purposes.

§Panics

Panics if the duration is zero

Source

pub fn from_max_delta_time(max: Duration) -> Self

Step the physics simulation every frame, advancing the simulation according to the frame delta time, as long as the delta time is not above a provided maximum.

This is the default setting of PhysicsSteps with a max duration set to 20 ms ( 50 FPS ).

Because it runs the physics step every frame, this physics step mode is precise, but will slow down if the frame delta time is higher than the provided max duration.

The purpose of setting the max duration is to prevent objects from going through walls, etc. in the case that the frame rate drops significantly.

By setting the max duration to Duration::MAX, the simulation speed will not slow down, regardless of the frame rate, but if the frame rate gets too low, objects may begin to pass through each-other because they may travel completely to the other side of a collision object in a single frame, depending on their velocity.

§Example
App::new()
    // Runs physics step every frame.
    // If the frame rate drops bellow 30 FPS, then the physics simulation will slow down.
    .insert_resource(PhysicsSteps::from_max_delta_time(Duration::from_secs_f64(1.0 / 30.0)))
    // ...
    .run();
Source

pub fn is_step_frame(&self) -> bool

Returns true only if the current frame is a frame that execute a physics simulation step

Source

pub fn duration(&self) -> PhysicsStepDuration

Time that elapses between each physics step

Trait Implementations§

Source§

impl Default for PhysicsSteps

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type( &self, _images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset>, ) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &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)

Convert &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> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromWorld for T
where T: Default,

Source§

fn from_world(_world: &mut World) -> T

Creates Self using data from the given World
Source§

impl<T, W> HasTypeWitness<W> for T
where W: MakeTypeWitness<Arg = T>, T: ?Sized,

Source§

const WITNESS: W = W::MAKE

A constant of the type witness
Source§

impl<T> Identity for T
where T: ?Sized,

Source§

const TYPE_EQ: TypeEq<T, <T as Identity>::Type> = TypeEq::NEW

Proof that Self is the same type as Self::Type, provides methods for casting between Self and Self::Type.
Source§

type Type = T

The same type as Self, used to emulate type equality bounds (T == U) with associated type equality constraints (T: Identity<Type = U>).
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> Event for T
where T: Send + Sync + 'static,

Source§

impl<T> Resource for T
where T: Send + Sync + 'static,