diff options
author | Justin Worthe <justin@worthe-it.co.za> | 2018-03-02 20:35:40 +0200 |
---|---|---|
committer | Justin Worthe <justin@worthe-it.co.za> | 2018-03-02 20:35:40 +0200 |
commit | 30df4064646fb429568474c0cdb2ee2ee08fd22e (patch) | |
tree | 2f444247ef993f2f3a346af747199cec3f2b9b46 /src/main.rs | |
parent | e1ba5ff36cefd602e64210dcfd0c4076c871e38c (diff) |
Clickable bugs!
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/src/main.rs b/src/main.rs index 8d987a4..64ac0c2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,14 +2,20 @@ extern crate gate; use gate::{App, Audio}; use gate::app_info::AppInfo; -use gate::input::{InputEvent, KeyCode}; +use gate::input::{InputEvent, KeyCode, MouseButton}; use gate::renderer::{Renderer, Affine}; mod asset_id { include!(concat!(env!("OUT_DIR"), "/asset_id.rs")); } use asset_id::{AssetId, SpriteId, TileId, MusicId, SoundId}; +mod geometry; +use geometry::*; + +mod entities; +use entities::bug::Bug; + struct BugBasherGame { - bug_pos: (f64, f64) + bugs: Vec<Bug> } impl App<AssetId> for BugBasherGame { @@ -17,32 +23,50 @@ impl App<AssetId> for BugBasherGame { } fn advance(&mut self, seconds: f64, _audio: &mut Audio<AssetId>) -> bool { - self.bug_pos.0 = (self.bug_pos.0 + 150. * seconds) % 1000.; - self.bug_pos.1 = (self.bug_pos.0 / 150.).sin() * 500.; + self.bugs.retain(|b| b.alive); + for bug in self.bugs.iter_mut() { + bug.advance(seconds); + } true } fn input(&mut self, evt: InputEvent, _audio: &mut Audio<AssetId>) -> bool { + match evt { + InputEvent::MousePressed(MouseButton::Left, x, y) => { + for bug in self.bugs.iter_mut() { + bug.click(Vec2d { x, y }); + } + }, + _ => {} + } true } fn render(&mut self, renderer: &mut Renderer<AssetId>) { renderer.clear((255,255,255)); - { // drawing sprites + { let mut renderer = renderer.sprite_mode(); - let camera = &Affine::translate(-500., 0.); - renderer.draw( - &camera.pre_translate(self.bug_pos.0, self.bug_pos.1), - SpriteId::Bug - ); + for bug in &self.bugs { + renderer.draw( + &Affine::translate(bug.pos.x, bug.pos.y).pre_rotate(bug.rotation), + SpriteId::Bug + ); + } } } } +impl BugBasherGame { +} + fn main() { let info = AppInfo::with_app_height(1000.).title("Bug Basher").build(); gate::run(info, BugBasherGame { - bug_pos: (400., 0.) + bugs: vec!( + Bug::new(0., 0., 0.), + Bug::new(500., 200., 0.3), + Bug::new(-200., -200., 1.5), + ) }); } |