1#[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}