 55c84cc722
			
		
	
	
		55c84cc722
		
			
		
	
	
	
	
		
			
			Added a `HeadlessPlugins` plugin group, that adds more default functionality (like logging) than the `MinimumPlugins`. Fixes #15203 Changed the headless example to use the new plugin group. I am not entirely sure if the list of plugins is correct. Are there ones that should be added / removed? ---- The `TerminalCtrlCHandlerPlugin` has interesting effects in the headless example: Installing it a second time it will give a log message about skipping installation, because it is already installed. Ctrl+C will terminate the application in that case. However, _not_ installing it the second time (so only on the app that runs once) has the effect that the app that runs continuously cannot be stopped using Ctrl+C. This implies that, even though the second app did not install the Ctrl+C handler, it did _something_ because it was keeping the one from the first app alive. Not sure if this is a problem or issue, or can be labeled a wierd quirk of having multiple Apps in one executable.
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! This example only enables a minimal set of plugins required for bevy to run.
 | |
| //! You can also completely remove rendering / windowing Plugin code from bevy
 | |
| //! by making your import look like this in your Cargo.toml.
 | |
| //!
 | |
| //! ```toml
 | |
| //! [dependencies]
 | |
| //! bevy = { version = "*", default-features = false }
 | |
| //! # replace "*" with the most recent version of bevy
 | |
| //! ```
 | |
| 
 | |
| use bevy::{app::ScheduleRunnerPlugin, log::LogPlugin, prelude::*, utils::Duration};
 | |
| 
 | |
| fn main() {
 | |
|     // This app runs once
 | |
|     App::new()
 | |
|         .add_plugins(HeadlessPlugins.set(ScheduleRunnerPlugin::run_once()))
 | |
|         .add_systems(Update, hello_world_system)
 | |
|         .run();
 | |
| 
 | |
|     // This app loops forever at 60 fps
 | |
|     App::new()
 | |
|         .add_plugins(
 | |
|             HeadlessPlugins
 | |
|                 .set(ScheduleRunnerPlugin::run_loop(Duration::from_secs_f64(
 | |
|                     1.0 / 60.0,
 | |
|                 )))
 | |
|                 // The log and ctrl+c plugin can only be registered once globally,
 | |
|                 // which means we need to disable it here, because it was already registered with the
 | |
|                 // app that runs once.
 | |
|                 .disable::<LogPlugin>(),
 | |
|         )
 | |
|         .add_systems(Update, counter)
 | |
|         .run();
 | |
| }
 | |
| 
 | |
| fn hello_world_system() {
 | |
|     println!("hello world");
 | |
| }
 | |
| 
 | |
| fn counter(mut state: Local<CounterState>) {
 | |
|     if state.count % 60 == 0 {
 | |
|         println!("{}", state.count);
 | |
|     }
 | |
|     state.count += 1;
 | |
| }
 | |
| 
 | |
| #[derive(Default)]
 | |
| struct CounterState {
 | |
|     count: u32,
 | |
| }
 |