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()
}
}