cotis-raylib 0.1.0-alpha

Raylib-backed renderer for Cotis
Documentation
//! Input polling: maps raylib keyboard/mouse state to `cotis-utils` interactivity traits.
//!
//! `MouseProvider`, `SimpleKeyboardProvider`, and `SimpleTextProvider` (from `cotis_utils::interactivity`)
//! are implemented for:
//!
//! - [`crate::renderer::RayRenderHandle`] — direct handle access (e.g. while holding a mutex guard).
//! - [`crate::renderer::RaylibRender`] — delegates through the shared mutex.
//! - `RayTestRender` (feature `test-render`) — scales mouse position.
//!
//! Key and button mapping lives in the `keyboard` and `mouse` submodules.

use crate::interactivity::keyboard::{collect_pressed_chars, into_raylib_key};
use crate::interactivity::mouse::into_raylib_mouse;
use crate::renderer::{RayRenderHandle, RaylibRender};
use cotis_utils::interactivity::keyboard::{
    KEYBOARD_LIST, KeyboardKey, SimpleKeyboardProvider, SimpleTextProvider,
};
use cotis_utils::interactivity::mouse::{MouseButton, MouseProvider};
use cotis_utils::math::Vector2;
use indexmap::IndexSet;

mod keyboard;
mod mouse;

impl MouseProvider for RayRenderHandle {
    fn get_mouse_position(&self) -> Vector2 {
        let pos = self.0.get_mouse_position();
        (pos.x, pos.y).into()
    }

    fn mouse_button_down(&self, button: MouseButton) -> bool {
        !self.0.is_mouse_button_up(into_raylib_mouse(button))
    }

    fn get_mouse_wheel_move_v(&self) -> Vector2 {
        let pos = self.0.get_mouse_wheel_move_v();
        (pos.x, pos.y).into()
    }
}

impl SimpleKeyboardProvider for RayRenderHandle {
    fn get_pressed_keys(&self) -> IndexSet<KeyboardKey> {
        let mut keys = IndexSet::new();
        for &key in &KEYBOARD_LIST {
            if key != KeyboardKey::KeyNull && self.0.is_key_down(into_raylib_key(key)) {
                keys.insert(key);
            }
        }
        keys
    }
}

impl SimpleTextProvider for RayRenderHandle {
    fn get_pressed_chars(&self) -> Vec<char> {
        collect_pressed_chars()
    }
}

impl MouseProvider for RaylibRender {
    fn get_mouse_position(&self) -> Vector2 {
        self.lock_handle().get_mouse_position()
    }

    fn mouse_button_down(&self, button: MouseButton) -> bool {
        self.lock_handle().mouse_button_down(button)
    }

    fn get_mouse_wheel_move_v(&self) -> Vector2 {
        self.lock_handle().get_mouse_wheel_move_v()
    }
}

impl SimpleKeyboardProvider for RaylibRender {
    fn get_pressed_keys(&self) -> IndexSet<KeyboardKey> {
        self.lock_handle().get_pressed_keys()
    }
}

impl SimpleTextProvider for RaylibRender {
    fn get_pressed_chars(&self) -> Vec<char> {
        collect_pressed_chars()
    }
}