summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.rs35
-rw-r--r--src/state.rs4
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();