|
@@ -8,7 +8,9 @@ use crate::game_state::GameState;
|
|
|
pub struct LogoFilename(pub String);
|
|
|
|
|
|
#[derive(Component)]
|
|
|
-struct Logo;
|
|
|
+struct Logo {
|
|
|
+ path: String,
|
|
|
+}
|
|
|
|
|
|
#[derive(Component)]
|
|
|
struct LogoFader {
|
|
@@ -20,23 +22,19 @@ const LOGO_DURATION: f32 = 10.0;
|
|
|
|
|
|
pub struct LogoPlugin;
|
|
|
|
|
|
-fn logo_filename(filename: Option<Res<LogoFilename>>) -> String {
|
|
|
- filename.map_or_else(|| LOGO.to_string(), |res| res.0.clone())
|
|
|
-}
|
|
|
-
|
|
|
fn setup_logo(
|
|
|
mut commands: Commands,
|
|
|
filename: Option<Res<LogoFilename>>,
|
|
|
assert_server: Res<AssetServer>,
|
|
|
windows: Res<Windows>,
|
|
|
) {
|
|
|
- let path = logo_filename(filename);
|
|
|
+ let path = filename.map_or_else(|| LOGO.to_string(), |res| res.0.clone());
|
|
|
let window = windows.primary();
|
|
|
let (win_w, win_h) = (window.width(), window.height());
|
|
|
|
|
|
commands
|
|
|
.spawn()
|
|
|
- .insert(Logo)
|
|
|
+ .insert(Logo { path: path.clone() })
|
|
|
.insert_bundle(SpriteBundle {
|
|
|
texture: assert_server.load(&path),
|
|
|
transform: Transform {
|
|
@@ -64,17 +62,16 @@ fn setup_logo(
|
|
|
}
|
|
|
|
|
|
fn resize_logo(
|
|
|
- mut query: Query<&mut Transform, With<Logo>>,
|
|
|
- filename: Option<Res<LogoFilename>>,
|
|
|
+ mut query: Query<(&mut Transform, &Logo)>,
|
|
|
windows: Res<Windows>,
|
|
|
images: Res<Assets<Image>>,
|
|
|
) {
|
|
|
- let mut logo_transform = query.single_mut();
|
|
|
+ let (mut logo_transform, logo) = query.single_mut();
|
|
|
let window = windows.primary();
|
|
|
let (win_w, win_h) = (window.width(), window.height());
|
|
|
let win_aspect = win_w / win_h;
|
|
|
|
|
|
- if let Some(logo_image) = images.get(logo_filename(filename)) {
|
|
|
+ if let Some(logo_image) = images.get(&logo.path) {
|
|
|
let size = logo_image.size();
|
|
|
let (logo_w, logo_h) = (size.x, size.y);
|
|
|
let logo_aspect = logo_w / logo_h;
|