simple_render/
simple_render.rs1use ggez::{
2 conf::WindowMode,
3 event::{self, EventHandler, MouseButton},
4 glam::*,
5 graphics::{Canvas, Color},
6 Context, ContextBuilder, GameResult,
7};
8
9use pixel_handler::{
10 pixel_handler::PixelHandler,
11 structs::{grid_position::GridPosition, pixel::Pixel},
12};
13
14const CELL_SIZE: (f32, f32) = (15.0, 15.0);
15
16struct MainState {
17 pixel_handler: PixelHandler,
18}
19
20impl MainState {
21 pub fn new(_ctx: &mut Context) -> MainState {
22 let pixel_handler = PixelHandler::new(CELL_SIZE);
23 MainState { pixel_handler }
24 }
25}
26
27impl EventHandler for MainState {
28 fn update(&mut self, _ctx: &mut Context) -> GameResult {
29 Ok(())
30 }
31
32 fn draw(&mut self, ctx: &mut Context) -> GameResult {
33 let mut canvas = Canvas::from_frame(ctx, Color::WHITE);
34 let pixel_handler = &mut self.pixel_handler;
35
36 pixel_handler.draw_grid(ctx, Color::BLACK);
37 pixel_handler.display_fps(ctx);
38
39 pixel_handler.update(&mut canvas, ctx);
40 canvas.finish(ctx)
41 }
42
43 fn mouse_button_down_event(
44 &mut self,
45 _ctx: &mut Context,
46 _button: MouseButton,
47 x: f32,
48 y: f32,
49 ) -> GameResult {
50 let position = GridPosition::from_vec2(Vec2::new(x, y), CELL_SIZE);
51
52 println!("Adding pixel at {:?}", position);
53
54 let pixel = Pixel::new(position, Color::new(0.0, 0.0, 0.0, 1.0));
55 self.pixel_handler.pixels.insert(position, pixel);
56
57 Ok(())
58 }
59}
60
61fn main() {
62 let (mut ctx, event_loop) = ContextBuilder::new("Simple Render", "")
63 .window_setup(ggez::conf::WindowSetup::default().title("Pixel Handler"))
64 .build()
65 .expect("Could not create ggez context");
66
67 let state = MainState::new(&mut ctx);
68
69 ctx.gfx
70 .set_mode(WindowMode {
71 resizable: true,
72 min_height: 280.0,
73 min_width: 350.0,
74
75 ..Default::default()
76 })
77 .unwrap();
78
79 event::run(ctx, event_loop, state);
80}