3 use gate::{App, Audio};
4 use gate::app_info::AppInfo;
6 use gate::renderer::{Renderer, Affine};
8 mod asset_id { include!(concat!(env!("OUT_DIR"), "/asset_id.rs")); }
18 use entities::bug::Bug;
19 use entities::home::Home;
21 struct BugBasherGame {
27 impl App<AssetId> for BugBasherGame {
28 fn start(&mut self, _audio: &mut Audio<AssetId>) {
31 fn advance(&mut self, seconds: f64, _audio: &mut Audio<AssetId>) -> bool {
32 self.bugs.retain(|b| b.alive);
33 for bug in self.bugs.iter_mut() {
35 if self.home.touches_circle(bug) {
44 fn input(&mut self, evt: InputEvent, _audio: &mut Audio<AssetId>) -> bool {
46 InputEvent::MousePressed(MouseButton::Left, x, y) => {
47 for bug in self.bugs.iter_mut().filter(|bug| bug.touches_point(Vec2d { x, y })) {
57 fn render(&mut self, renderer: &mut Renderer<AssetId>) {
58 let (app_width, app_height) = (renderer.app_width(), renderer.app_height());
59 renderer.clear((255,255,255));
61 let mut renderer = renderer.tiled_mode(app_width / 2. - 50., -app_height / 2. + 50.);
63 let point_str = format!("{}", self.points);
64 for (i, c) in point_str.chars().enumerate() {
65 let affine = Affine::translate(i as f64 * spacing, 0.);
67 '-' => TileId::NumberFontR0C0,
68 '0' => TileId::NumberFontR0C1,
69 '1' => TileId::NumberFontR0C2,
70 '2' => TileId::NumberFontR0C3,
71 '3' => TileId::NumberFontR0C4,
72 '4' => TileId::NumberFontR0C5,
73 '5' => TileId::NumberFontR0C6,
74 '6' => TileId::NumberFontR0C7,
75 '7' => TileId::NumberFontR0C8,
76 '8' => TileId::NumberFontR0C9,
77 '9' => TileId::NumberFontR0C10,
78 _ => TileId::NumberFontR0C0,
80 renderer.draw(&affine, tile);
85 let mut renderer = renderer.sprite_mode();
87 &Affine::translate(self.home.pos.x, self.home.pos.y),
90 for bug in &self.bugs {
92 &Affine::translate(bug.pos.x, bug.pos.y).pre_rotate(bug.rotation),
104 let info = AppInfo::with_app_height(1000.).title("Bug Basher").build();
105 gate::run(info, BugBasherGame {
106 home: Home::new(0., 0.),
108 Bug::new(500., 200., 0.3),
109 Bug::new(-200., -200., 1.5),
110 Bug::new(-1000., 200., 0.),
111 Bug::new(1200., 0., 0.3),
112 Bug::new(-1300., 0., 1.5),
113 Bug::new(0., 1100., 0.),
114 Bug::new(0., -1500., 0.3),
115 Bug::new(300., -1200., 1.5),