Struct heron_core::PhysicsSteps
source · pub struct PhysicsSteps(_);
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
sourceimpl PhysicsSteps
impl PhysicsSteps
sourcepub fn from_steps_per_seconds(steps_per_second: f32) -> Self
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
sourcepub fn from_delta_time(duration: Duration) -> Self
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
sourcepub fn every_frame(duration: Duration) -> Self
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
sourcepub fn from_max_delta_time(max: Duration) -> Self
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();
sourcepub fn is_step_frame(&self) -> bool
pub fn is_step_frame(&self) -> bool
Returns true only if the current frame is a frame that execute a physics simulation step
sourcepub fn duration(&self) -> PhysicsStepDuration
pub fn duration(&self) -> PhysicsStepDuration
Time that elapses between each physics step
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for PhysicsSteps
impl Send for PhysicsSteps
impl Sync for PhysicsSteps
impl Unpin for PhysicsSteps
impl UnwindSafe for PhysicsSteps
Blanket Implementations
impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
impl<T, U> AsBindGroupShaderType<U> for Twhere
U: ShaderType,
&'a T: for<'a> Into<U>,
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
fn as_bind_group_shader_type(
&self,
_images: &HashMap<Handle<Image>, <Image as RenderAsset>::PreparedAsset, RandomState, Global>
) -> U
T
[ShaderType
] for self
. When used in [AsBindGroup
]
derives, it is safe to assume that all images in self
exist. Read moresourceimpl<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
impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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
. Read morefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read morefn 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. Read morefn 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. Read moreimpl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self
using data from the given [World]