|
|
|
@ -5,6 +5,7 @@ pub(crate) struct LoadingPlugin;
|
|
|
|
impl Plugin for LoadingPlugin {
|
|
|
|
impl Plugin for LoadingPlugin {
|
|
|
|
fn build(&self, app: &mut App) {
|
|
|
|
fn build(&self, app: &mut App) {
|
|
|
|
app.add_systems(Startup, initialize)
|
|
|
|
app.add_systems(Startup, initialize)
|
|
|
|
|
|
|
|
.add_systems(Update, loading.run_if(in_state(GameState::Loading)))
|
|
|
|
.add_systems(OnEnter(GameState::Loading), activate::<Loading>)
|
|
|
|
.add_systems(OnEnter(GameState::Loading), activate::<Loading>)
|
|
|
|
.add_systems(OnExit(GameState::Loading), deactivate::<Loading>);
|
|
|
|
.add_systems(OnExit(GameState::Loading), deactivate::<Loading>);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -48,3 +49,48 @@ fn initialize(mut commands: Commands) {
|
|
|
|
},));
|
|
|
|
},));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn loading(
|
|
|
|
|
|
|
|
server: Res<AssetServer>,
|
|
|
|
|
|
|
|
sprites: Res<Assets<Image>>,
|
|
|
|
|
|
|
|
gltfs: Res<Assets<Gltf>>,
|
|
|
|
|
|
|
|
tweakfile: Res<Assets<audio::AudioSettings>>,
|
|
|
|
|
|
|
|
mut next_state: ResMut<NextState<GameState>>,
|
|
|
|
|
|
|
|
) {
|
|
|
|
|
|
|
|
let s_ids = sprites
|
|
|
|
|
|
|
|
.ids()
|
|
|
|
|
|
|
|
.filter(|&id| matches!(id, HandleId::AssetPathId(_)))
|
|
|
|
|
|
|
|
.collect::<Vec<HandleId>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let g_ids = gltfs
|
|
|
|
|
|
|
|
.ids()
|
|
|
|
|
|
|
|
.filter(|&id| matches!(id, HandleId::AssetPathId(_)))
|
|
|
|
|
|
|
|
.collect::<Vec<HandleId>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let a_ids = tweakfile
|
|
|
|
|
|
|
|
.ids()
|
|
|
|
|
|
|
|
.filter(|&id| matches!(id, HandleId::AssetPathId(_)))
|
|
|
|
|
|
|
|
.collect::<Vec<HandleId>>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debug!(
|
|
|
|
|
|
|
|
"Sprite len: {:?} | GLTF len: {:?} | Audio Tweakfile: {:?}",
|
|
|
|
|
|
|
|
s_ids.len(),
|
|
|
|
|
|
|
|
g_ids.len(),
|
|
|
|
|
|
|
|
a_ids.len(),
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if s_ids.len() > 0 && g_ids.len() > 0 {
|
|
|
|
|
|
|
|
let s_ready = s_ids
|
|
|
|
|
|
|
|
.iter()
|
|
|
|
|
|
|
|
.all(|&id| server.get_load_state(id) == LoadState::Loaded);
|
|
|
|
|
|
|
|
let g_ready = g_ids
|
|
|
|
|
|
|
|
.iter()
|
|
|
|
|
|
|
|
.all(|&id| server.get_load_state(id) == LoadState::Loaded);
|
|
|
|
|
|
|
|
let a_ready = a_ids
|
|
|
|
|
|
|
|
.iter()
|
|
|
|
|
|
|
|
.all(|&id| server.get_load_state(id) == LoadState::Loaded);
|
|
|
|
|
|
|
|
if s_ready && g_ready && a_ready {
|
|
|
|
|
|
|
|
next_state.set(GameState::Menu)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|