bevy/crates/bevy_state/src
MiniaczQ bc72cedfe3
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-07-15 15:08:54 +00:00
..
state Make initial StateTransition run before PreStartup (#14208) 2024-07-15 15:08:54 +00:00
app.rs Make initial StateTransition run before PreStartup (#14208) 2024-07-15 15:08:54 +00:00
condition.rs remove inaccurate warning from in_state (#13862) 2024-06-16 16:06:45 +00:00
lib.rs Fix intra-doc links and make CI test them (#14076) 2024-07-11 13:08:31 +00:00
state_scoped.rs impl Reflect + Clone for StateScoped (#14156) 2024-07-08 01:00:04 +00:00