Skip to main content

cardinal_varvara/
controller_device.rs

1use crate::{Event, Uxn};
2
3/// Trait for controller device implementations for the Varvara system.
4pub trait ControllerDevice: Send {
5    /// Returns a mutable reference to self as `Any` for downcasting.
6    fn as_any(&mut self) -> &mut dyn std::any::Any;
7    /// Handles a character input event.
8    fn char(&mut self, vm: &mut Uxn, c: u8) -> Event;
9    /// Handles a key press event.
10    fn pressed(&mut self, vm: &mut Uxn, k: super::controller::Key, repeat: bool) -> Option<Event>;
11    /// Handles a key release event.
12    fn released(&mut self, vm: &mut Uxn, k: super::controller::Key) -> Option<Event>;
13}
14
15impl ControllerDevice for super::controller::Controller {
16    fn as_any(&mut self) -> &mut dyn std::any::Any {
17        self
18    }
19    fn char(&mut self, vm: &mut Uxn, c: u8) -> Event {
20        self.char(vm, c)
21    }
22    fn pressed(&mut self, vm: &mut Uxn, k: super::controller::Key, repeat: bool) -> Option<Event> {
23        self.pressed(vm, k, repeat)
24    }
25    fn released(&mut self, vm: &mut Uxn, k: super::controller::Key) -> Option<Event> {
26        self.released(vm, k)
27    }
28}