bevy/crates/bevy_state/src
MiniaczQ 524fb01457
Make initial StateTransition run before PreStartup (#14208)
# Objective

- Fixes #14206 

## Solution

- Run initial `StateTransition` as a startup schedule before
`PreStartup`, instead of running it inside `Startup` as an exclusive
system.

Related discord discussion:

https://discord.com/channels/691052431525675048/692572690833473578/1259543775668207678

## Testing

Reproduction now works correctly:

```rs
use bevy::prelude::*;

#[derive(Debug, Clone, Copy, Default, Eq, PartialEq, Hash, States)]
enum AppState {
    #[default]
    Menu,
    InGame,
}

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .init_state::<AppState>()
        .add_systems(Startup, setup)
        .add_systems(OnEnter(AppState::Menu), enter_menu_state)
        .run();
}

fn setup(mut next_state: ResMut<NextState<AppState>>) {
    next_state.set(AppState::Menu);
}

fn enter_menu_state() {
    println!("Entered menu state");
}
```


![image](https://github.com/bevyengine/bevy/assets/13040204/96d7a533-c439-4c0b-8f15-49f620903ce1)


---

## Changelog

- Initial `StateTransition` runs before `PreStartup` instead of inside
`Startup`.
2024-08-02 19:17:57 +02:00
..
state Make initial StateTransition run before PreStartup (#14208) 2024-08-02 19:17:57 +02:00
app.rs Make initial StateTransition run before PreStartup (#14208) 2024-08-02 19:17:57 +02:00
condition.rs remove inaccurate warning from in_state (#13862) 2024-06-19 04:14:58 +02:00
lib.rs Add more granular system sets for state transition schedule ordering (#13763) 2024-06-10 19:31:41 +02:00
state_scoped.rs impl Reflect + Clone for StateScoped (#14156) 2024-08-02 18:58:30 +02:00