Move loading system to loading.rs

bevy0.12
Elijah Voigt 2 years ago
parent a784bd1c2f
commit 69205318dd

1
.gitattributes vendored

@ -17,3 +17,4 @@ assets/ filter=lfs diff=lfs merge=lfs -text
*.dll filter=lfs diff=lfs merge=lfs -text
*.lib filter=lfs diff=lfs merge=lfs -text
*.gltf filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text

BIN
assets/Liquid Mirror Intro.mp4 (Stored with Git LFS)

Binary file not shown.

@ -19,6 +19,7 @@ mkShell rec {
xorg.libXcursor xorg.libXi xorg.libXrandr # To use the x11 feature
libxkbcommon wayland # To use the wayland feature
gimp
ffmpeg
];
LD_LIBRARY_PATH = lib.makeLibraryPath buildInputs;

@ -5,6 +5,7 @@ pub(crate) struct LoadingPlugin;
impl Plugin for LoadingPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Startup, initialize)
.add_systems(Update, loading.run_if(in_state(GameState::Loading)))
.add_systems(OnEnter(GameState::Loading), activate::<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)
}
}
}

@ -37,7 +37,6 @@ fn main() {
debug_state::<GameState>.run_if(resource_changed::<State<GameState>>()),
),
);
app.add_systems(Update, loading.run_if(in_state(GameState::Loading)));
app.add_systems(
Update,
(
@ -90,51 +89,6 @@ pub(crate) enum DisplayState {
Display3d,
}
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)
}
}
}
/// System for printing the current state
///
/// Only runs when state is modified.

Loading…
Cancel
Save