Skip to content
Snippets Groups Projects
startup.rs 3.27 KiB
Newer Older
Louis's avatar
Louis committed
use bevy::asset::LoadState;
use bevy::prelude::*;

use crate::assets::{AssetTypeLoader, SpriteSheetConfig};
use crate::system::AppState;

pub fn start_preload_resources(
	mut _commands: Commands,
	mut next_state: ResMut<NextState<AppState>>,
) {
	// TODO: Add preload commands here
	next_state.set(AppState::Setup);
}

pub fn start_load_resources(mut loader: AssetTypeLoader) {
	loader.load_images(&[
		("splash.png", "splash"),
		("cresthollow.png", "menu_bg"),
		("interface/basic_frame.png", "basic_frame"),
		("interface/banner.png", "banner"),
		("interface/button_pressed.png", "button_down"),
		("interface/button_raised.png", "button_up"),
		("interface/button_hover.png", "button_over"),
		("interface/vertical_bar.png", "resource_bar"),
		("interface/vertical_bar_bg.png", "resource_bar_bg"),
		("interface/vertical_bar_fg.png", "resource_bar_fg"),
		("interface/health_bar.png", "bar_red"),
		("interface/mana_bar.png", "bar_blue"),
		("interface/stamina_bar.png", "bar_yellow"),
		("interface/energy_bar.png", "bar_green"),
	]);

	loader.load_audio(&[
		("splash_sting.ogg", "splash_sting"),
		("music/menu.ogg", "menu_track"),
		("effects/running_001.ogg", "running_001"),
		("effects/fire_crackle_001.ogg", "fire_crackle_001"),
		("effects/cave_ambience.ogg", "cave_ambience"),
		("effects/ui_confirm.ogg", "ui_confirm"),
		("effects/ui_ping.ogg", "ui_ping"),
	]);

	loader.load_font(&[
		("fonts/royal.ttf", "royal"),
		("fonts/equipe.ttf", "equipe"),
		("fonts/cursed.ttf", "cursed"),
		("fonts/cursed_bold.ttf", "cursed_bold"),
	]);

	loader.load_spritesheet(
		&SpriteSheetConfig::squares(16, 32, 64),
		&[
			("sheets/items.png", "items"),
			("sheets/fx.png", "fx"),
			("sheets/or_interface.png", "interface"),
			("sheets/projectiles.png", "projectiles"),
		],
	);

	loader.load_spritesheet(
		&SpriteSheetConfig::squares(32, 16, 32),
		&[
			("sheets/creatures/town_guard_human.png", "town_guard_human"),
			("sheets/creatures/town_guard_orc.png", "town_guard_orc"),
			("sheets/creatures/town_guard_dwarf.png", "town_guard_dwarf"),
			("sheets/creatures/town_guard_elf.png", "town_guard_elf"),
		],
	);

	loader.load_spritesheet(
		&SpriteSheetConfig::squares(32, 32, 32),
		&[
			("sheets/creatures/human_base.png", "human_base"),
			("sheets/creatures/goblin_base.png", "goblin_base"),
			("sheets/creatures/skeleton.png", "skeleton"),
			("sheets/creatures/flame_acolyte.png", "flame_acolyte"),
			("sheets/creatures/divine_warrior.png", "divine_warrior"),
		],
	);

	loader.load_spritesheet(
		&SpriteSheetConfig::squares(16, 64, 64),
		&[
			("sheets/world_dawn.png", "world"),
			("sheets/characters.png", "characters"),
		],
	);

	loader.load_animation(&[
		("animations/humanoid.anim.json", "humanoid"),
		("animations/skeleton.anim.json", "skeleton"),
		("animations/flame_acolyte.anim.json", "flame_acolyte"),
		("animations/guards.anim.json", "town_guards"),
	]);

	loader.load_ldtk(&[
		("ldtk/dawnish.ldtk", "tile_data"),
		("ldtk/cresthollow_world.ldtk", "cresthollow_world"),
	]);
}

pub fn check_load_resources(
	mut commands: Commands,
	loader: AssetTypeLoader,
	mut next_state: ResMut<NextState<AppState>>,
) {
	let load_states = loader.get_all_load_state();
	if load_states.iter().all(|state| *state == LoadState::Loaded) {
		info!("Assets loaded successfully");
		next_state.set(AppState::Splash);
	}
}