diff options
| -rw-r--r-- | src/main.rs | 35 | ||||
| -rw-r--r-- | src/state.rs | 4 |
2 files changed, 21 insertions, 18 deletions
diff --git a/src/main.rs b/src/main.rs index 0e14863..0e40fdd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,11 +13,11 @@ enum Result { Nothing, } -struct Surfaces<'a> { - player: sdl2::surface::Surface<'a>, - enemy: sdl2::surface::Surface<'a>, - pbullet: sdl2::surface::Surface<'a>, - ebullet: sdl2::surface::Surface<'a>, +struct Textures<'a> { + player: sdl2::render::Texture<'a>, + enemy: sdl2::render::Texture<'a>, + pbullet: sdl2::render::Texture<'a>, + ebullet: sdl2::render::Texture<'a>, } fn spawn(count: u64) -> Vec<state::Enemy> { @@ -28,7 +28,7 @@ fn spawn(count: u64) -> Vec<state::Enemy> { } } -fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, events: &mut sdl2::event::EventPollIterator, surfaces: &Surfaces) -> Result { +fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, events: &mut sdl2::event::EventPollIterator, textures: &Textures) -> Result { let mut new_bullets = Vec::new(); let count = state.count; for enemy in state.enemies.iter_mut() { @@ -64,14 +64,14 @@ fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, even state.bullets.append(&mut new_bullets); state.player_bullets.retain(|bullet| !state::PBullet::outside(bullet)); for bullet in state.player_bullets.iter() { - bullet.draw(canvas, &surfaces.pbullet); + bullet.draw(canvas, &textures.pbullet); } for enemy in state.enemies.iter() { - enemy.draw(canvas, &surfaces.enemy); + enemy.draw(canvas, &textures.enemy); } - state.player.draw(canvas, &surfaces.player); + state.player.draw(canvas, &textures.player); for bullet in state.bullets.iter() { - bullet.draw(canvas, &surfaces.ebullet); + bullet.draw(canvas, &textures.ebullet); } state.count += 1; Result::Nothing @@ -93,11 +93,16 @@ fn main() { let mut frame_count = 0; let mut state = state::State::new(); let mut won = false; - let player_surface = sdl2::image::LoadSurface::from_file("assets/stallman.png").unwrap(); - let enemy_surface = sdl2::image::LoadSurface::from_file("assets/gates.png").unwrap(); - let ebullet_surface = sdl2::image::LoadSurface::from_file("assets/binary_blob.png").unwrap(); - let pbullet_surface = sdl2::image::LoadSurface::from_file("assets/player_pepp.png").unwrap(); - let surfaces = Surfaces { player: player_surface, enemy: enemy_surface, pbullet: pbullet_surface, ebullet: ebullet_surface }; + let player_surface: sdl2::surface::Surface = sdl2::image::LoadSurface::from_file("assets/stallman.png").unwrap(); + let enemy_surface: sdl2::surface::Surface = sdl2::image::LoadSurface::from_file("assets/gates.png").unwrap(); + let ebullet_surface: sdl2::surface::Surface = sdl2::image::LoadSurface::from_file("assets/binary_blob.png").unwrap(); + let pbullet_surface: sdl2::surface::Surface = sdl2::image::LoadSurface::from_file("assets/player_pepp.png").unwrap(); + let texture_creator = canvas.texture_creator(); + let player_texture = texture_creator.create_texture_from_surface(player_surface).unwrap(); + let enemy_texture = texture_creator.create_texture_from_surface(enemy_surface).unwrap(); + let ebullet_texture = texture_creator.create_texture_from_surface(ebullet_surface).unwrap(); + let pbullet_texture = texture_creator.create_texture_from_surface(pbullet_surface).unwrap(); + let surfaces = Textures { player: player_texture, enemy: enemy_texture, pbullet: pbullet_texture, ebullet: ebullet_texture }; 'running: loop { if won { for event in event_pump.poll_iter() { diff --git a/src/state.rs b/src/state.rs index f70c0ba..d309862 100644 --- a/src/state.rs +++ b/src/state.rs @@ -240,9 +240,7 @@ impl Positioned for Enemy { pub trait Drawable : Positioned { fn center(&self) -> (u32, u32); - fn draw(&self, canvas: &mut sdl2::render::WindowCanvas, surface: &sdl2::surface::Surface) { - let texture_creator = canvas.texture_creator(); - let texture = texture_creator.create_texture_from_surface(surface).unwrap(); + fn draw(&self, canvas: &mut sdl2::render::WindowCanvas, texture: &sdl2::render::Texture) { let tw = texture.query().width; let th = texture.query().height; let (cx, cy) = self.center(); |
