pub struct Time { /* private fields */ }
Expand description
A clock that tracks how much it has advanced (and how much real time has elapsed) since its previous update and since its creation.
Implementations§
§impl Time
impl Time
pub fn update(&mut self)
pub fn update(&mut self)
Updates the internal time measurements.
Calling this method as part of your app will most likely result in inaccurate timekeeping,
as the Time
resource is ordinarily managed by the TimePlugin
.
pub fn update_with_instant(&mut self, instant: Instant)
pub fn update_with_instant(&mut self, instant: Instant)
Updates time with a specified Instant
.
This method is provided for use in tests. Calling this method as part of your app will most
likely result in inaccurate timekeeping, as the Time
resource is ordinarily managed by the
TimePlugin
.
Examples
#[derive(Resource)]
struct Health {
// Health value between 0.0 and 1.0
health_value: f32,
}
fn health_system(time: Res<Time>, mut health: ResMut<Health>) {
// Increase health value by 0.1 per second, independent of frame rate,
// but not beyond 1.0
health.health_value = (health.health_value + 0.1 * time.delta_seconds()).min(1.0);
}
// Mock time in tests
fn test_health_system() {
let mut world = World::default();
let mut time = Time::default();
time.update();
world.insert_resource(time);
world.insert_resource(Health { health_value: 0.2 });
let mut schedule = Schedule::new();
schedule.add_systems(health_system);
// Simulate that 30 ms have passed
let mut time = world.resource_mut::<Time>();
let last_update = time.last_update().unwrap();
time.update_with_instant(last_update + Duration::from_millis(30));
// Run system
schedule.run(&mut world);
// Check that 0.003 has been added to the health value
let expected_health_value = 0.2 + 0.1 * 0.03;
let actual_health_value = world.resource::<Health>().health_value;
assert_eq!(expected_health_value, actual_health_value);
}
pub fn startup(&self) -> Instant
pub fn startup(&self) -> Instant
Returns the Instant
the clock was created.
This usually represents when the app was started.
pub fn first_update(&self) -> Option<Instant>
pub fn first_update(&self) -> Option<Instant>
pub fn last_update(&self) -> Option<Instant>
pub fn last_update(&self) -> Option<Instant>
pub fn delta_seconds(&self) -> f32
pub fn delta_seconds(&self) -> f32
pub fn delta_seconds_f64(&self) -> f64
pub fn delta_seconds_f64(&self) -> f64
pub fn elapsed_seconds(&self) -> f32
pub fn elapsed_seconds(&self) -> f32
Returns how much time has advanced since startup
, as f32
seconds.
Note: This is a monotonically increasing value. It’s precision will degrade over time.
If you need an f32
but that precision loss is unacceptable,
use elapsed_seconds_wrapped
.
pub fn elapsed_seconds_f64(&self) -> f64
pub fn elapsed_seconds_f64(&self) -> f64
pub fn elapsed_wrapped(&self) -> Duration
pub fn elapsed_wrapped(&self) -> Duration
Returns how much time has advanced since startup
modulo
the wrap_period
, as Duration
.
pub fn elapsed_seconds_wrapped(&self) -> f32
pub fn elapsed_seconds_wrapped(&self) -> f32
Returns how much time has advanced since startup
modulo
the wrap_period
, as f32
seconds.
This method is intended for applications (e.g. shaders) that require an f32
value but
suffer from the gradual precision loss of elapsed_seconds
.
pub fn elapsed_seconds_wrapped_f64(&self) -> f64
pub fn elapsed_seconds_wrapped_f64(&self) -> f64
Returns how much time has advanced since startup
modulo
the wrap_period
, as f64
seconds.
pub fn raw_delta_seconds(&self) -> f32
pub fn raw_delta_seconds(&self) -> f32
pub fn raw_delta_seconds_f64(&self) -> f64
pub fn raw_delta_seconds_f64(&self) -> f64
pub fn raw_elapsed(&self) -> Duration
pub fn raw_elapsed(&self) -> Duration
pub fn raw_elapsed_seconds(&self) -> f32
pub fn raw_elapsed_seconds(&self) -> f32
Returns how much real time has elapsed since startup
, as f32
seconds.
Note: This is a monotonically increasing value. It’s precision will degrade over time.
If you need an f32
but that precision loss is unacceptable,
use raw_elapsed_seconds_wrapped
.
pub fn raw_elapsed_seconds_f64(&self) -> f64
pub fn raw_elapsed_seconds_f64(&self) -> f64
pub fn raw_elapsed_wrapped(&self) -> Duration
pub fn raw_elapsed_wrapped(&self) -> Duration
Returns how much real time has elapsed since startup
modulo
the wrap_period
, as Duration
.
pub fn raw_elapsed_seconds_wrapped(&self) -> f32
pub fn raw_elapsed_seconds_wrapped(&self) -> f32
Returns how much real time has elapsed since startup
modulo
the wrap_period
, as f32
seconds.
This method is intended for applications (e.g. shaders) that require an f32
value but
suffer from the gradual precision loss of raw_elapsed_seconds
.
pub fn raw_elapsed_seconds_wrapped_f64(&self) -> f64
pub fn raw_elapsed_seconds_wrapped_f64(&self) -> f64
Returns how much real time has elapsed since startup
modulo
the wrap_period
, as f64
seconds.
pub fn wrap_period(&self) -> Duration
pub fn wrap_period(&self) -> Duration
Returns the modulus used to calculate elapsed_wrapped
and
raw_elapsed_wrapped
.
Note: The default modulus is one hour.
pub fn set_wrap_period(&mut self, wrap_period: Duration)
pub fn set_wrap_period(&mut self, wrap_period: Duration)
Sets the modulus used to calculate elapsed_wrapped
and
raw_elapsed_wrapped
.
Note: This will not take effect until the next update.
Panics
Panics if wrap_period
is a zero-length duration.
pub fn relative_speed(&self) -> f32
pub fn relative_speed(&self) -> f32
Returns the speed the clock advances relative to your system clock, as f32
.
This is known as “time scaling” or “time dilation” in other engines.
Note: This function will return zero when time is paused.
pub fn relative_speed_f64(&self) -> f64
pub fn relative_speed_f64(&self) -> f64
Returns the speed the clock advances relative to your system clock, as f64
.
This is known as “time scaling” or “time dilation” in other engines.
Note: This function will return zero when time is paused.
pub fn set_relative_speed(&mut self, ratio: f32)
pub fn set_relative_speed(&mut self, ratio: f32)
pub fn set_relative_speed_f64(&mut self, ratio: f64)
pub fn set_relative_speed_f64(&mut self, ratio: f64)
pub fn pause(&mut self)
pub fn pause(&mut self)
Stops the clock, preventing it from advancing until resumed.
Note: This does not affect the raw_*
measurements.
pub fn unpause(&mut self)
pub fn unpause(&mut self)
Resumes the clock if paused.
Trait Implementations§
§impl FromReflect for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl FromReflect for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
§fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Time>
fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Time>
Self
from a reflected value.§impl GetTypeRegistration for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl GetTypeRegistration for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
§impl Reflect for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl Reflect for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
§fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
fn get_represented_type_info(&self) -> Option<&'static TypeInfo>
§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut dyn Any
.§fn into_reflect(self: Box<Time, Global>) -> Box<dyn Reflect, Global>
fn into_reflect(self: Box<Time, Global>) -> Box<dyn Reflect, Global>
§fn as_reflect(&self) -> &(dyn Reflect + 'static)
fn as_reflect(&self) -> &(dyn Reflect + 'static)
§fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
fn as_reflect_mut(&mut self) -> &mut (dyn Reflect + 'static)
§fn clone_value(&self) -> Box<dyn Reflect, Global>
fn clone_value(&self) -> Box<dyn Reflect, Global>
Reflect
trait object. Read more§fn set(
&mut self,
value: Box<dyn Reflect, Global>
) -> Result<(), Box<dyn Reflect, Global>>
fn set( &mut self, value: Box<dyn Reflect, Global> ) -> Result<(), Box<dyn Reflect, Global>>
§fn apply(&mut self, value: &(dyn Reflect + 'static))
fn apply(&mut self, value: &(dyn Reflect + 'static))
§fn reflect_ref(&self) -> ReflectRef<'_>
fn reflect_ref(&self) -> ReflectRef<'_>
§fn reflect_mut(&mut self) -> ReflectMut<'_>
fn reflect_mut(&mut self) -> ReflectMut<'_>
§fn reflect_owned(self: Box<Time, Global>) -> ReflectOwned
fn reflect_owned(self: Box<Time, Global>) -> ReflectOwned
§fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
fn reflect_partial_eq(&self, value: &(dyn Reflect + 'static)) -> Option<bool>
§fn reflect_hash(&self) -> Option<u64>
fn reflect_hash(&self) -> Option<u64>
§fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn debug(&self, f: &mut Formatter<'_>) -> Result<(), Error>
§fn serializable(&self) -> Option<Serializable<'_>>
fn serializable(&self) -> Option<Serializable<'_>>
§fn is_dynamic(&self) -> bool
fn is_dynamic(&self) -> bool
§impl Struct for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl Struct for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
§fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
fn field(&self, name: &str) -> Option<&(dyn Reflect + 'static)>
name
as a &dyn Reflect
.§fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
fn field_mut(&mut self, name: &str) -> Option<&mut (dyn Reflect + 'static)>
name
as a
&mut dyn Reflect
.§fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
fn field_at(&self, index: usize) -> Option<&(dyn Reflect + 'static)>
index
as a
&dyn Reflect
.§fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
fn field_at_mut(&mut self, index: usize) -> Option<&mut (dyn Reflect + 'static)>
index
as a &mut dyn Reflect
.§fn iter_fields(&self) -> FieldIter<'_> ⓘ
fn iter_fields(&self) -> FieldIter<'_> ⓘ
§fn clone_dynamic(&self) -> DynamicStruct
fn clone_dynamic(&self) -> DynamicStruct
DynamicStruct
.§impl TypePath for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl TypePath for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
§fn short_type_path() -> &'static str
fn short_type_path() -> &'static str
§fn type_ident() -> Option<&'static str>
fn type_ident() -> Option<&'static str>
§fn crate_name() -> Option<&'static str>
fn crate_name() -> Option<&'static str>
§impl Typed for Timewhere
Instant: FromReflect,
Option<Instant>: FromReflect,
bool: FromReflect,
f64: FromReflect,
Duration: FromReflect,
f32: FromReflect,
impl Typed for Timewhere Instant: FromReflect, Option<Instant>: FromReflect, bool: FromReflect, f64: FromReflect, Duration: FromReflect, f32: FromReflect,
impl Resource for Timewhere Time: Send + Sync + 'static,
Auto Trait Implementations§
impl RefUnwindSafe for Time
impl Send for Time
impl Sync for Time
impl Unpin for Time
impl UnwindSafe for Time
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: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> 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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any, 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
.§fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§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.§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.§impl<T> DynamicTypePath for Twhere
T: TypePath,
impl<T> DynamicTypePath for Twhere T: TypePath,
§fn reflect_type_path(&self) -> &str
fn reflect_type_path(&self) -> &str
TypePath::type_path
.§fn reflect_short_type_path(&self) -> &str
fn reflect_short_type_path(&self) -> &str
§fn reflect_type_ident(&self) -> Option<&str>
fn reflect_type_ident(&self) -> Option<&str>
TypePath::type_ident
.§fn reflect_crate_name(&self) -> Option<&str>
fn reflect_crate_name(&self) -> Option<&str>
TypePath::crate_name
.§fn reflect_module_path(&self) -> Option<&str>
fn reflect_module_path(&self) -> Option<&str>
§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<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§impl<T> GetPath for Twhere
T: Reflect,
impl<T> GetPath for Twhere T: Reflect,
§fn reflect_path<'r, 'p>(
&'r self,
path: &'p str
) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path<'r, 'p>( &'r self, path: &'p str ) -> Result<&'r (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more§fn reflect_path_mut<'r, 'p>(
&'r mut self,
path: &'p str
) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
fn reflect_path_mut<'r, 'p>( &'r mut self, path: &'p str ) -> Result<&'r mut (dyn Reflect + 'static), ReflectPathError<'p>>
path
. Read more