 7989cb2650
			
		
	
	
		7989cb2650
		
	
	
	
	
		
			
			# Objective - Make `Time` API more consistent. - Support time accel/decel/pause. ## Solution This is just the `Time` half of #3002. I was told that part isn't controversial. - Give the "delta time" and "total elapsed time" methods `f32`, `f64`, and `Duration` variants with consistent naming. - Implement accelerating / decelerating the passage of time. - Implement stopping time. --- ## Changelog - Changed `time_since_startup` to `elapsed` because `time.time_*` is just silly. - Added `relative_speed` and `set_relative_speed` methods. - Added `is_paused`, `pause`, `unpause` , and methods. (I'd prefer `resume`, but `unpause` matches `Timer` API.) - Added `raw_*` variants of the "delta time" and "total elapsed time" methods. - Added `first_update` method because there's a non-zero duration between startup and the first update. ## Migration Guide - `time.time_since_startup()` -> `time.elapsed()` - `time.seconds_since_startup()` -> `time.elapsed_seconds_f64()` - `time.seconds_since_startup_wrapped_f32()` -> `time.elapsed_seconds_wrapped()` If you aren't sure which to use, most systems should continue to use "scaled" time (e.g. `time.delta_seconds()`). The realtime "unscaled" time measurements (e.g. `time.raw_delta_seconds()`) are mostly for debugging and profiling.
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! Loads and renders a glTF file as a scene.
 | |
| 
 | |
| use std::f32::consts::*;
 | |
| 
 | |
| use bevy::prelude::*;
 | |
| 
 | |
| fn main() {
 | |
|     App::new()
 | |
|         .insert_resource(AmbientLight {
 | |
|             color: Color::WHITE,
 | |
|             brightness: 1.0 / 5.0f32,
 | |
|         })
 | |
|         .add_plugins(DefaultPlugins)
 | |
|         .add_startup_system(setup)
 | |
|         .add_system(animate_light_direction)
 | |
|         .run();
 | |
| }
 | |
| 
 | |
| fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
 | |
|     commands.spawn(Camera3dBundle {
 | |
|         transform: Transform::from_xyz(0.7, 0.7, 1.0).looking_at(Vec3::new(0.0, 0.3, 0.0), Vec3::Y),
 | |
|         ..default()
 | |
|     });
 | |
|     const HALF_SIZE: f32 = 1.0;
 | |
|     commands.spawn(DirectionalLightBundle {
 | |
|         directional_light: DirectionalLight {
 | |
|             shadow_projection: OrthographicProjection {
 | |
|                 left: -HALF_SIZE,
 | |
|                 right: HALF_SIZE,
 | |
|                 bottom: -HALF_SIZE,
 | |
|                 top: HALF_SIZE,
 | |
|                 near: -10.0 * HALF_SIZE,
 | |
|                 far: 10.0 * HALF_SIZE,
 | |
|                 ..default()
 | |
|             },
 | |
|             shadows_enabled: true,
 | |
|             ..default()
 | |
|         },
 | |
|         ..default()
 | |
|     });
 | |
|     commands.spawn(SceneBundle {
 | |
|         scene: asset_server.load("models/FlightHelmet/FlightHelmet.gltf#Scene0"),
 | |
|         ..default()
 | |
|     });
 | |
| }
 | |
| 
 | |
| fn animate_light_direction(
 | |
|     time: Res<Time>,
 | |
|     mut query: Query<&mut Transform, With<DirectionalLight>>,
 | |
| ) {
 | |
|     for mut transform in &mut query {
 | |
|         transform.rotation = Quat::from_euler(
 | |
|             EulerRot::ZYX,
 | |
|             0.0,
 | |
|             time.elapsed_seconds() * PI / 5.0,
 | |
|             -FRAC_PI_4,
 | |
|         );
 | |
|     }
 | |
| }
 |