 79a367db16
			
		
	
	
		79a367db16
		
			
		
	
	
	
	
		
			
			# Objective - Contributes to #15460 ## Solution - Added the following features: - `std` (default) - `portable-atomic` - `critical-section` ## Testing - CI ## Notes - `portable-atomic`, and `critical-section` are shortcuts to enable the relevant features in dependencies, making the usage of this crate on atomically challenged platforms possible and simpler. - This PR is blocked until #17027 is merged (as it depends on fixes for the `once!` macro). Once merged, the change-count for this PR should reduce.
		
			
				
	
	
		
			31 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use bevy_ecs::{system::Commands, world::World};
 | |
| use log::debug;
 | |
| 
 | |
| use crate::state::{FreelyMutableState, NextState};
 | |
| 
 | |
| /// Extension trait for [`Commands`] adding `bevy_state` helpers.
 | |
| pub trait CommandsStatesExt {
 | |
|     /// Sets the next state the app should move to.
 | |
|     ///
 | |
|     /// Internally this schedules a command that updates the [`NextState<S>`](crate::prelude::NextState)
 | |
|     /// resource with `state`.
 | |
|     ///
 | |
|     /// Note that commands introduce sync points to the ECS schedule, so modifying `NextState`
 | |
|     /// directly may be more efficient depending on your use-case.
 | |
|     fn set_state<S: FreelyMutableState>(&mut self, state: S);
 | |
| }
 | |
| 
 | |
| impl CommandsStatesExt for Commands<'_, '_> {
 | |
|     fn set_state<S: FreelyMutableState>(&mut self, state: S) {
 | |
|         self.queue(move |w: &mut World| {
 | |
|             let mut next = w.resource_mut::<NextState<S>>();
 | |
|             if let NextState::Pending(prev) = &*next {
 | |
|                 if *prev != state {
 | |
|                     debug!("overwriting next state {:?} with {:?}", prev, state);
 | |
|                 }
 | |
|             }
 | |
|             next.set(state);
 | |
|         });
 | |
|     }
 | |
| }
 |