cotis_raylib/
interactivity.rs1use crate::interactivity::keyboard::{collect_pressed_chars, into_raylib_key};
13use crate::interactivity::mouse::into_raylib_mouse;
14use crate::renderer::{RayRenderHandle, RaylibRender};
15use cotis_utils::interactivity::keyboard::{
16 KEYBOARD_LIST, KeyboardKey, SimpleKeyboardProvider, SimpleTextProvider,
17};
18use cotis_utils::interactivity::mouse::{MouseButton, MouseProvider};
19use cotis_utils::math::Vector2;
20use indexmap::IndexSet;
21
22mod keyboard;
23mod mouse;
24
25impl MouseProvider for RayRenderHandle {
26 fn get_mouse_position(&self) -> Vector2 {
27 let pos = self.0.get_mouse_position();
28 (pos.x, pos.y).into()
29 }
30
31 fn mouse_button_down(&self, button: MouseButton) -> bool {
32 !self.0.is_mouse_button_up(into_raylib_mouse(button))
33 }
34
35 fn get_mouse_wheel_move_v(&self) -> Vector2 {
36 let pos = self.0.get_mouse_wheel_move_v();
37 (pos.x, pos.y).into()
38 }
39}
40
41impl SimpleKeyboardProvider for RayRenderHandle {
42 fn get_pressed_keys(&self) -> IndexSet<KeyboardKey> {
43 let mut keys = IndexSet::new();
44 for &key in &KEYBOARD_LIST {
45 if key != KeyboardKey::KeyNull && self.0.is_key_down(into_raylib_key(key)) {
46 keys.insert(key);
47 }
48 }
49 keys
50 }
51}
52
53impl SimpleTextProvider for RayRenderHandle {
54 fn get_pressed_chars(&self) -> Vec<char> {
55 collect_pressed_chars()
56 }
57}
58
59impl MouseProvider for RaylibRender {
60 fn get_mouse_position(&self) -> Vector2 {
61 self.lock_handle().get_mouse_position()
62 }
63
64 fn mouse_button_down(&self, button: MouseButton) -> bool {
65 self.lock_handle().mouse_button_down(button)
66 }
67
68 fn get_mouse_wheel_move_v(&self) -> Vector2 {
69 self.lock_handle().get_mouse_wheel_move_v()
70 }
71}
72
73impl SimpleKeyboardProvider for RaylibRender {
74 fn get_pressed_keys(&self) -> IndexSet<KeyboardKey> {
75 self.lock_handle().get_pressed_keys()
76 }
77}
78
79impl SimpleTextProvider for RaylibRender {
80 fn get_pressed_chars(&self) -> Vec<char> {
81 collect_pressed_chars()
82 }
83}