Skip to main content

event/
event.rs

1//
2//  Rust file | 2018
3//  Author: Alexandre Fourcat
4//  event.rs
5//  module:
6//! event example
7#[macro_use]
8extern crate gust_render as gust;
9extern crate glfw;
10
11use gust::prelude::*;
12use std::collections::HashMap;
13use std::rc::Rc;
14
15fn main() {
16    let mut window = Window::new(gust::WIDTH, gust::HEIGHT, "Hello");
17    let tex_dirt = Rc::new(Texture::from_path("examples/texture/Dirt.png").unwrap());
18    let event_handler = EventHandler::new(&window);
19    let mut sprites = HashMap::new();
20    sprites.insert("dirt_1", Sprite::from(&tex_dirt));
21    sprites.insert("dirt_2", Sprite::from(&tex_dirt));
22
23    window.set_clear_color(Color::new(0.0, 0.0, 1.0));
24    window.enable_cursor();
25    window.poll(None);
26    while window.is_open() {
27        window.poll_events();
28
29        for event in event_handler.fetch() {
30            event_process(event, &mut window, &mut sprites);
31        }
32
33        draw(&mut window, &mut sprites);
34    }
35}
36
37fn draw(window: &mut Window, sprites: &mut HashMap<&'static str, Sprite>) {
38    for (_name, sprite) in sprites.iter_mut() {
39        sprite.update();
40    }
41
42    window.clear();
43    window.draw(&sprites["dirt_1"]);
44    window.draw(&sprites["dirt_2"]);
45    window.display();
46}
47
48fn event_process(event: Event, window: &mut Window, sprites: &mut HashMap<&'static str, Sprite>) {
49    match event.1 {
50        pressed!(Escape) => window.close(),
51        pressed!(Space) => {
52            sprites.get_mut("dirt_1").unwrap().rotate(45.0);
53        }
54        pressed!(W) => {
55            sprites
56                .get_mut("dirt_2")
57                .unwrap()
58                .translate(Vector::new(0.0, -10.0));
59        }
60        pressed!(A) => {
61            sprites
62                .get_mut("dirt_2")
63                .unwrap()
64                .translate(Vector::new(-10.0, 0.0));
65        }
66        pressed!(S) => {
67            sprites
68                .get_mut("dirt_2")
69                .unwrap()
70                .translate(Vector::new(0.0, 10.0));
71        }
72        pressed!(D) => {
73            sprites
74                .get_mut("dirt_2")
75                .unwrap()
76                .translate(Vector::new(10.0, 0.0));
77        }
78        Events::MouseButton(glfw::MouseButtonLeft, Action::Press, _) => {
79            let mouse_pos = window.mouse_pos();
80
81            if let Some(sprite) = sprites.get_mut("dirt_1") {
82                if sprite.contain(mouse_pos) {
83                    sprite.set_color(&Color::blue());
84                }
85            }
86        }
87        _ => {}
88    }
89}