agb/examples/the-hat-chooses-the-wizard/src/splash_screen.rs

79 lines
1.8 KiB
Rust
Raw Normal View History

2023-02-24 08:18:29 +11:00
use super::sfx::SfxPlayer;
use agb::display::tiled::{RegularMap, TileFormat, TileSet, TiledMap, VRamManager};
2022-01-01 23:09:21 +11:00
agb::include_background_gfx!(splash_screens,
splash => deduplicate "gfx/splash.png",
thanks_for_playing => deduplicate "gfx/thanks_for_playing.png",
);
2022-01-01 23:09:21 +11:00
pub enum SplashScreen {
Start,
End,
}
pub fn show_splash_screen(
which: SplashScreen,
2023-02-24 08:18:29 +11:00
sfx: &mut SfxPlayer,
2022-02-01 09:23:53 +11:00
map: &mut RegularMap,
vram: &mut VRamManager,
2022-01-01 23:09:21 +11:00
) {
2022-10-02 01:52:23 +10:00
map.set_scroll_pos((0i16, 0i16).into());
let (tileset, settings) = match which {
SplashScreen::Start => (
TileSet::new(splash_screens::splash.tiles, TileFormat::FourBpp),
splash_screens::splash.tile_settings,
),
2022-02-01 09:23:53 +11:00
SplashScreen::End => (
TileSet::new(
splash_screens::thanks_for_playing.tiles,
TileFormat::FourBpp,
),
splash_screens::thanks_for_playing.tile_settings,
),
2022-02-01 09:23:53 +11:00
};
2022-01-01 23:09:21 +11:00
let vblank = agb::interrupt::VBlank::get();
let mut input = agb::input::ButtonController::new();
2022-02-01 09:23:53 +11:00
2023-02-24 08:18:29 +11:00
sfx.frame();
2022-02-15 09:52:10 +11:00
vblank.wait_for_vblank();
2022-02-01 09:23:53 +11:00
for y in 0..20u16 {
for x in 0..30u16 {
map.set_tile(
vram,
(x, y).into(),
2022-03-29 07:21:06 +11:00
&tileset,
settings[(y * 30 + x) as usize],
2022-02-01 09:23:53 +11:00
);
}
2023-02-24 08:18:29 +11:00
sfx.frame();
vblank.wait_for_vblank();
2022-02-01 09:23:53 +11:00
}
2022-04-24 08:03:02 +10:00
map.commit(vram);
vram.set_background_palettes(splash_screens::PALETTES);
2022-02-01 09:23:53 +11:00
map.show();
2022-01-01 23:09:21 +11:00
loop {
input.update();
if input.is_just_pressed(
agb::input::Button::A
| agb::input::Button::B
| agb::input::Button::START
| agb::input::Button::SELECT,
) {
break;
}
2023-02-24 08:18:29 +11:00
sfx.frame();
vblank.wait_for_vblank();
2022-01-01 23:09:21 +11:00
}
2022-02-01 09:23:53 +11:00
map.hide();
map.clear(vram);
2022-01-01 23:09:21 +11:00
}