1extern crate gust_render as gust;
2
3use gust::prelude::*;
4use gust::texture::RgbMode;
5use std::rc::Rc;
6
7fn main() {
8 let mut window = Window::new(gust::WIDTH, gust::HEIGHT, "Hello");
9 let mut pixels: Vec<u8> = vec![125; 200 * 200 * 4];
10 let pix: Vec<u8> = vec![255; 100 * 100 * 3];
11 let mut my_tex = Texture::from_path("examples/texture/New.png").unwrap();
12 let blank;
13
14 unsafe {
15 use std::os::raw::c_void;
16 blank = Texture::from_data(pixels.as_mut_ptr() as *mut c_void, RgbMode::RGBA, 200, 200);
17 }
18
19 my_tex
20 .update_block(
21 pix.as_slice(),
22 Vector::new(100, 100),
23 Vector::new(10, 10),
24 None,
25 )
26 .unwrap();
27
28 let blank_rc = Rc::new(blank);
29 let tex_dirt = Rc::new(my_tex);
30 let event_handler = EventHandler::new(&window);
31 let mut sprite = Sprite::from(&tex_dirt);
32 let mut leave = Sprite::from(&blank_rc);
33 let mut sprite2 = Sprite::from(&tex_dirt);
34
35 leave.set_position(Point::new(600.0, 100.0));
36 sprite.set_position(Vector::new(100.0, 100.0));
37 sprite2.set_position(Point::new(1000.0, 100.0));
38 sprite.update();
39 sprite2.update();
40 leave.update();
41
42 window.poll(None);
43 window.enable_cursor();
44 window.set_clear_color(Color::new(0.0, 0.0, 1.0));
45 while window.is_open() {
46 window.poll_events();
47
48 for event in event_handler.fetch() {
49 event_process(event, &mut window, &tex_dirt, &mut sprite);
50 }
51
52 window.clear();
53 window.draw(&sprite);
54 window.draw(&leave);
55 window.draw(&sprite2);
56 window.display();
57 }
58}
59
60fn event_process(event: Event, window: &mut Window, texture: &Texture, sprite: &mut Sprite) {
61 match event.1 {
62 Events::Key(Key::Escape, _, _, _) => {
63 window.close();
64 }
65 Events::MouseButton(_, _, _) => {
66 println!("Dumping texture to test.png");
67 texture.to_file("test.png").unwrap();
68 }
69 Events::CursorPos(x, y) => {
70 sprite.set_position(Vector::new(x as f32, y as f32));
71 }
72 _ => {}
73 }
74}