diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 24 |
1 files changed, 9 insertions, 15 deletions
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<state::Enemy> { - 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<T: state::Enemy<U>, U: state::Bullet>(canvas: &mut sdl2::render::WindowCanvas, state: &mut state::State<T, U>, 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<gates::Gates, gates::GatesBullet> = 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(); |
