Bugs walking to the middle of the screen slowly
[bug-basher.git] / src / main.rs
1 extern crate gate;
2
3 use gate::{App, Audio};
4 use gate::app_info::AppInfo;
5 use gate::input::*;
6 use gate::renderer::{Renderer, Affine};
7
8 mod asset_id { include!(concat!(env!("OUT_DIR"), "/asset_id.rs")); }
9 use asset_id::*;
10
11 mod geometry;
12 use geometry::*;
13
14 mod entities;
15 use entities::bug::Bug;
16
17 struct BugBasherGame {
18     bugs: Vec<Bug>
19 }
20
21 impl App<AssetId> for BugBasherGame {
22     fn start(&mut self, _audio: &mut Audio<AssetId>) {
23     }
24
25     fn advance(&mut self, seconds: f64, _audio: &mut Audio<AssetId>) -> bool {
26         self.bugs.retain(|b| b.alive);
27         for bug in self.bugs.iter_mut() {
28             bug.advance(seconds);
29         }
30         
31         true
32     }
33
34     fn input(&mut self, evt: InputEvent, _audio: &mut Audio<AssetId>) -> bool {
35         match evt {
36             InputEvent::MousePressed(MouseButton::Left, x, y) => {
37                 for bug in self.bugs.iter_mut() {
38                     bug.click(Vec2d { x, y });
39                 }
40             },
41             _ => {}
42         }
43         true
44     }
45
46     fn render(&mut self, renderer: &mut Renderer<AssetId>) {
47         renderer.clear((255,255,255));
48         {
49             let mut renderer = renderer.sprite_mode();
50             for bug in &self.bugs {
51                 renderer.draw(
52                     &Affine::translate(bug.pos.x, bug.pos.y).pre_rotate(bug.rotation),
53                     SpriteId::Bug
54                 );
55             }
56         }
57     }
58 }
59
60 impl BugBasherGame {
61 }
62
63 fn main() {
64     let info = AppInfo::with_app_height(1000.).title("Bug Basher").build();
65     gate::run(info, BugBasherGame {
66         bugs: vec!(
67             Bug::new(500., 200., 0.3),
68             Bug::new(-200., -200., 1.5),
69             Bug::new(-1000., 200., 0.),
70             Bug::new(1200., 0., 0.3),
71             Bug::new(-1300., 0., 1.5),
72             Bug::new(0., 1100., 0.),
73             Bug::new(0., -1500., 0.3),
74             Bug::new(300., -1200., 1.5),
75         )
76     });
77 }