Early commit: both desktop and wasm support
[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::{InputEvent, KeyCode};
6 use gate::renderer::{Renderer, Affine};
7
8 mod asset_id { include!(concat!(env!("OUT_DIR"), "/asset_id.rs")); }
9 use asset_id::{AssetId, SpriteId, TileId, MusicId, SoundId};
10
11 struct BugBasherGame {
12     bug_pos: (f64, f64)
13 }
14
15 impl App<AssetId> for BugBasherGame {
16     fn start(&mut self, _audio: &mut Audio<AssetId>) {
17     }
18
19     fn advance(&mut self, seconds: f64, _audio: &mut Audio<AssetId>) -> bool {
20         self.bug_pos.0 = (self.bug_pos.0 + 150. * seconds) % 1000.;
21         self.bug_pos.1 = (self.bug_pos.0 / 150.).sin() * 500.;
22         
23         true
24     }
25
26     fn input(&mut self, evt: InputEvent, _audio: &mut Audio<AssetId>) -> bool {
27         true
28     }
29
30     fn render(&mut self, renderer: &mut Renderer<AssetId>) {
31         renderer.clear((255,255,255));
32         { // drawing sprites
33             let mut renderer = renderer.sprite_mode();
34             let camera = &Affine::translate(-500., 0.);
35             renderer.draw(
36                 &camera.pre_translate(self.bug_pos.0, self.bug_pos.1),
37                 SpriteId::Bug
38             );
39         }
40     }
41 }
42
43 fn main() {
44     let info = AppInfo::with_app_height(1000.).title("Bug Basher").build();
45     gate::run(info, BugBasherGame {
46         bug_pos: (400., 0.)
47     });
48 }