 e9b8c71da0
			
		
	
	
		e9b8c71da0
		
			
		
	
	
	
	
		
			
			# Objective When working within `bevy_ecs`, we can't use the `log_once` macros due to their placement in `bevy_log` - which depends on `bevy_ecs`. All this create does is migrate those macros to the `bevy_utils` crate, while still re-exporting them in `bevy_log`. created to resolve this: https://github.com/bevyengine/bevy/pull/11417#discussion_r1458100211 --------- Co-authored-by: François <mockersf@gmail.com>
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| /// Call some expression only once per call site.
 | |
| #[macro_export]
 | |
| macro_rules! once {
 | |
|     ($expression:expr) => {{
 | |
|         use ::std::sync::atomic::{AtomicBool, Ordering};
 | |
| 
 | |
|         static SHOULD_FIRE: AtomicBool = AtomicBool::new(true);
 | |
|         if SHOULD_FIRE.swap(false, Ordering::Relaxed) {
 | |
|             $expression;
 | |
|         }
 | |
|     }};
 | |
| }
 | |
| 
 | |
| /// Call [`trace!`](crate::tracing::trace) once per call site.
 | |
| ///
 | |
| /// Useful for logging within systems which are called every frame.
 | |
| #[macro_export]
 | |
| macro_rules! trace_once {
 | |
|     ($($arg:tt)+) => ({
 | |
|         $crate::once!($crate::tracing::trace!($($arg)+))
 | |
|     });
 | |
| }
 | |
| 
 | |
| /// Call [`debug!`](crate::tracing::debug) once per call site.
 | |
| ///
 | |
| /// Useful for logging within systems which are called every frame.
 | |
| #[macro_export]
 | |
| macro_rules! debug_once {
 | |
|     ($($arg:tt)+) => ({
 | |
|         $crate::once!($crate::tracing::debug!($($arg)+))
 | |
|     });
 | |
| }
 | |
| 
 | |
| /// Call [`info!`](crate::tracing::info) once per call site.
 | |
| ///
 | |
| /// Useful for logging within systems which are called every frame.
 | |
| #[macro_export]
 | |
| macro_rules! info_once {
 | |
|     ($($arg:tt)+) => ({
 | |
|         $crate::once!($crate::tracing::info!($($arg)+))
 | |
|     });
 | |
| }
 | |
| 
 | |
| /// Call [`warn!`](crate::tracing::warn) once per call site.
 | |
| ///
 | |
| /// Useful for logging within systems which are called every frame.
 | |
| #[macro_export]
 | |
| macro_rules! warn_once {
 | |
|     ($($arg:tt)+) => ({
 | |
|         $crate::once!($crate::tracing::warn!($($arg)+))
 | |
|     });
 | |
| }
 | |
| 
 | |
| /// Call [`error!`](crate::tracing::error) once per call site.
 | |
| ///
 | |
| /// Useful for logging within systems which are called every frame.
 | |
| #[macro_export]
 | |
| macro_rules! error_once {
 | |
|     ($($arg:tt)+) => ({
 | |
|         $crate::once!($crate::tracing::error!($($arg)+))
 | |
|     });
 | |
| }
 |