chaos-framework 0.1.2

Game framework for creating games!
Documentation
use std::collections::{HashMap, HashSet};

use glfw::Key;

use glam::Vec2;

pub struct EventHandler {
    pub keys_pressed: HashMap<Key, usize>,
    pub keys_pressed_last_frame: HashSet<Key>,

    pub keys_released: HashMap<Key, usize>,
    pub keys_released_last_frame: HashSet<Key>,

    pub mouse_pos: Vec2,
    pub scroll: Vec2,

    pub width: f32,
    pub height: f32,
    
    pub lmb: bool,
    pub rmb: bool,
}
impl EventHandler {
    pub fn new() -> Self {
        Self { 
            keys_pressed: HashMap::new(),
            keys_pressed_last_frame: HashSet::new(),

            keys_released: HashMap::new(),
            keys_released_last_frame: HashSet::new(),
            
            mouse_pos: Vec2::ONE,

            width: 1.0,
            height: 1.0,

            scroll: Vec2::ZERO,

            lmb: false,
            rmb: false,
        }
    }

    pub fn on_key_press(&mut self, key: Key) {
        self.keys_released.remove(&key);

        let key_handle = self.keys_pressed.len();
        self.keys_pressed.insert(key, key_handle);
    }

    pub fn on_key_release(&mut self, key: Key) {
        self.keys_pressed.remove(&key);

        let key_handle = self.keys_released.len();
        self.keys_released.insert(key, key_handle);
    }

    pub fn on_mouse_move(&mut self, x: f64, y: f64) {
        self.mouse_pos.x =  x as f32 - self.width / 2.0;
        self.mouse_pos.y = -y as f32 + self.height / 2.0;
    }

    pub fn on_lmb_press(&mut self) {
        self.lmb = true;
    } 
    pub fn on_lmb_release(&mut self) {
        self.lmb = false;
    } 

    pub fn on_rmb_press(&mut self) {
        self.rmb = true;
    } 
    pub fn on_rmb_release(&mut self) {
        self.rmb = false;
    } 

    pub fn on_scroll_change(&mut self, change: Vec2){
        self.scroll = change;
    }

    pub fn on_window_resize(&mut self, w: i32, h: i32) {
        self.width = w as f32;
        self.height = h as f32;
    }

    pub fn update(&mut self) {
        self.keys_pressed_last_frame.clear();
        self.keys_released_last_frame.clear();

        self.scroll = Vec2::ZERO;
        for &key in self.keys_pressed.keys() {
            self.keys_pressed_last_frame.insert(key);
        }

        for &key in self.keys_released.keys() {
            self.keys_released_last_frame.insert(key);
        }
    }

    pub fn key_just_pressed(&self, key: Key) -> bool {
        self.keys_pressed.contains_key(&key) && !self.keys_pressed_last_frame.contains(&key)
    }
    pub fn key_just_released(&self, key: Key) -> bool {
        self.keys_released.contains_key(&key) && !self.keys_released_last_frame.contains(&key)
    }
}