-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Closed
Labels
A-ECSEntities, components, systems, and eventsEntities, components, systems, and eventsC-BugAn unexpected or incorrect behaviorAn unexpected or incorrect behavior
Milestone
Description
Bevy version
0.10
What you did
Consider the following Bevy app:
use bevy::prelude::*;
#[derive(States, PartialEq, Eq, Debug, Default, Hash, Clone, Copy)]
enum AppState {
#[default]
First,
Second,
}
fn main() {
App::new()
.add_plugins(MinimalPlugins)
.insert_resource(FixedTime::new_from_secs(1.0))
.add_state::<AppState>()
.add_system(transition_state.in_set(OnUpdate(AppState::First)))
.add_system(
print_hello
.in_schedule(CoreSchedule::FixedUpdate)
.in_set(OnUpdate(AppState::Second)),
)
.run();
}
fn transition_state(time: Res<Time>, mut next_state: ResMut<NextState<AppState>>) {
if time.elapsed_seconds() > 3.0 {
println!("Transition state!");
next_state.set(AppState::Second);
}
}
fn print_hello() {
println!("Hello!");
}What went wrong
The print_hello system runs regardless of the application state. It should only run in the AppState::Second state but it runs also in the AppState::First state.
The following output is generated:
Hello!
Hello!
Transition state!
Hello!
Hello!
If line the line with .in_schedule(CoreSchedule::FixedUpdate) is commented out, the output is:
Transition state!
Hello!
Hello!
Hello!
It's as expected. But of course the system is now run every frame.
Metadata
Metadata
Assignees
Labels
A-ECSEntities, components, systems, and eventsEntities, components, systems, and eventsC-BugAn unexpected or incorrect behaviorAn unexpected or incorrect behavior