Skip to content

Commit

Permalink
Make config-loaded asset progress more granular
Browse files Browse the repository at this point in the history
  • Loading branch information
benfrankel committed Aug 3, 2024
1 parent e87fe9a commit cae0c13
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 38 deletions.
16 changes: 11 additions & 5 deletions src/game/actor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ use bevy::math::vec2;
use bevy::math::vec3;
use bevy::prelude::*;
use bevy::utils::HashMap;
use iyes_progress::prelude::*;
use serde::Deserialize;
use serde::Serialize;

Expand Down Expand Up @@ -71,11 +72,16 @@ impl Config for ActorConfig {
}
}

fn is_ready(&self, asset_server: &AssetServer) -> bool {
self.players
.values()
.chain(self.enemies.values())
.all(|x| asset_server.is_loaded_with_dependencies(&x.texture))
fn count_progress(&self, asset_server: &AssetServer) -> Progress {
let mut progress = true.into();

for actor in self.players.values().chain(self.enemies.values()) {
progress += asset_server
.is_loaded_with_dependencies(&actor.texture)
.into();
}

progress
}
}

Expand Down
36 changes: 23 additions & 13 deletions src/game/card.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use bevy::prelude::*;
use bevy::sprite::Anchor;
use bevy::utils::HashMap;
use bevy_kira_audio::prelude::*;
use iyes_progress::prelude::*;
use serde::Deserialize;
use serde::Serialize;

Expand Down Expand Up @@ -72,19 +73,28 @@ impl Config for CardConfig {
}
}

fn is_ready(&self, asset_server: &AssetServer) -> bool {
self.card_background_map
.values()
.all(|x| asset_server.is_loaded_with_dependencies(&x.texture))
&& self
.card_icon_map
.values()
.all(|x| asset_server.is_loaded_with_dependencies(&x.texture))
&& self.card_map.values().all(|x| {
!x.play_sfx
.as_ref()
.is_some_and(|x| !asset_server.is_loaded_with_dependencies(x))
})
fn count_progress(&self, asset_server: &AssetServer) -> Progress {
let mut progress = true.into();

for card_bg in self.card_background_map.values() {
progress += asset_server
.is_loaded_with_dependencies(&card_bg.texture)
.into();
}
for card_icon in self.card_icon_map.values() {
progress += asset_server
.is_loaded_with_dependencies(&card_icon.texture)
.into();
}
for card in self.card_map.values() {
progress += (!card
.play_sfx
.as_ref()
.is_some_and(|x| !asset_server.is_loaded_with_dependencies(x)))
.into();
}

progress
}
}

Expand Down
25 changes: 16 additions & 9 deletions src/game/combat/projectile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use bevy::prelude::*;
use bevy::utils::HashMap;
use bevy_kira_audio::prelude::*;
use bevy_tweening::*;
use iyes_progress::prelude::*;
use serde::Deserialize;
use serde::Serialize;

Expand Down Expand Up @@ -54,15 +55,21 @@ impl Config for ProjectileConfig {
}
}

fn is_ready(&self, asset_server: &AssetServer) -> bool {
self.projectiles
.values()
.all(|x| asset_server.is_loaded_with_dependencies(&x.texture))
&& self.projectiles.values().all(|x| {
!x.spawn_sfx
.as_ref()
.is_some_and(|x| !asset_server.is_loaded_with_dependencies(x))
})
fn count_progress(&self, asset_server: &AssetServer) -> Progress {
let mut progress = true.into();

for projectile in self.projectiles.values() {
progress += asset_server
.is_loaded_with_dependencies(&projectile.texture)
.into();
progress += (!projectile
.spawn_sfx
.as_ref()
.is_some_and(|x| !asset_server.is_loaded_with_dependencies(x)))
.into();
}

progress
}
}

Expand Down
17 changes: 6 additions & 11 deletions src/util/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,16 @@ pub trait Config: Asset + Serialize + for<'de> Deserialize<'de> {
let _ = world;
}

fn is_ready(&self, asset_server: &AssetServer) -> bool {
fn count_progress(&self, asset_server: &AssetServer) -> Progress {
let _ = asset_server;
true
true.into()
}

fn progress(
asset_server: Res<AssetServer>,
config_handle: Res<ConfigHandle<Self>>,
config: Res<Assets<Self>>,
) -> Progress {
fn progress(config: ConfigRef<Self>, asset_server: Res<AssetServer>) -> Progress {
config
.get(&config_handle.0)
.map(|x| x.is_ready(&asset_server))
.unwrap_or_default()
.into()
.get()
.map(|x| x.count_progress(&asset_server))
.unwrap_or(false.into())
}
}

Expand Down

0 comments on commit cae0c13

Please sign in to comment.