From 5846773a84b629765b6a7236bb6363bc4e34ab94 Mon Sep 17 00:00:00 2001 From: Raymond Hogenson Date: Sun, 19 Aug 2018 00:45:11 -0400 Subject: Move some code around and improve abstraction This doesn't change the functionality of the game at all (ideally), but makes it easier to refactor and to add new enemies and new stages, which is really the end-goal of this whole thing. --- src/main.rs | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index ca1bdd8..6e1322a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,9 +3,11 @@ extern crate sdl2; mod state; mod player; mod constants; +mod gates; use state::Positioned; use state::Drawable; +use state::Bullet; enum Result { Win, @@ -20,15 +22,7 @@ struct Textures<'a> { ebullet: sdl2::render::Texture<'a>, } -fn spawn(count: u64) -> Vec { - if count == 0 { - vec![state::Enemy::new()] - } else { - Vec::new() - } -} - -fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, events: &mut sdl2::event::EventPollIterator, textures: &Textures) -> Result { +fn frame, U: state::Bullet>(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() { @@ -51,16 +45,16 @@ fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, even for bullet in state.player_bullets.iter_mut() { if enemy.overlaps(bullet) { bullet.delete(); - enemy.health -= 1; + let health = enemy.health(); + enemy.set_health(health - state::PBullet::damage()); } } } - state.enemies.retain(|enemy| state::Enemy::health(enemy) > 0); - state.enemies.append(&mut spawn(count)); + state.enemies.retain(|enemy| state::Enemy::health(enemy) > 0.); if state.enemies.len() == 0 { return Result::Win; } - state.bullets.retain(|bullet| !state::EBullet::outside(bullet)); + state.bullets.retain(|bullet| !U::outside(bullet)); state.bullets.append(&mut new_bullets); state.player_bullets.retain(|bullet| !state::PBullet::outside(bullet)); for bullet in state.player_bullets.iter() { @@ -74,7 +68,7 @@ fn frame(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State, even bullet.draw(canvas, &textures.ebullet); } canvas.set_draw_color(sdl2::pixels::Color::RGB(255, 0, 0)); - canvas.draw_rect(sdl2::rect::Rect::new(0, 0, (state.enemies[0].health as f64 / state::STARTING_HEALTH as f64 * constants::X_DIM as f64).round() as u32, 20)).unwrap(); + canvas.draw_rect(sdl2::rect::Rect::new(0, 0, (state.enemies[0].health() * constants::X_DIM as f64).round() as u32, 20)).unwrap(); state.count += 1; Result::Nothing } @@ -93,7 +87,7 @@ fn main() { let start = std::time::Instant::now(); let frame_duration = std::time::Duration::new(0, 1_000_000_000u32 / 60); let mut frame_count = 0; - let mut state = state::State::new(); + let mut state: state::State = state::State::new(); let mut won = false; 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(); -- cgit v1.3.1