aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
blob: a598ebe5fd95b52f5c593895f6c3b6f36d2f9427 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
pub mod editor;
pub mod grid;
pub mod map_data;
pub mod math;
pub mod svg;
pub mod tool;
pub mod transform;

use editor::Editor;
use raylib::prelude::*;
use svg::DrawSVG;
use transform::Transform;

fn main() {
    let (mut rl, thread) = raylib::init().resizable().title("Hello there!").build();
    rl.set_target_fps(120);

    let mut editor = Editor::new();

    let mut transform = Transform::new();
    let mut last_mouse_pos = rl.get_mouse_position();
    while !rl.window_should_close() {
        let screen_width = rl.get_screen_width();
        let screen_height = rl.get_screen_height();

        // Move the canvas together with the mouse
        if rl.is_mouse_button_down(MouseButton::MOUSE_MIDDLE_BUTTON) {
            transform.move_by_px((rl.get_mouse_position() - last_mouse_pos).into());
        }

        let mouse_wheel_move = rl.get_mouse_wheel_move();
        if mouse_wheel_move != 0 {
            // Zoom in for positive and zoom out for negative mouse wheel rotations.
            let scale_factor = if mouse_wheel_move > 0 { 1.2 } else { 1. / 1.2 };
            transform.try_zoom(
                rl.get_mouse_position().into(),
                mouse_wheel_move.abs() as f32 * scale_factor,
            );
        }

        editor.update(&rl, &transform);

        // Update the last mouse position
        last_mouse_pos = rl.get_mouse_position();

        // Drawing section
        {
            let mut d = rl.begin_drawing(&thread);
            d.clear_background(Color::BLACK);
            grid::draw_grid(&mut d, screen_width, screen_height, &transform);

            editor.draw_tools(&mut d, &transform);
        }
    }
}