mirror of
https://github.com/bevyengine/bevy
synced 2024-12-23 19:43:07 +00:00
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.
50 lines
1.4 KiB
Rust
50 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,
|
|
}
|