use crate::device::Device;
use crate::event::InputKind;
#[derive(Default)]
pub struct VirtualDevice {
id: String,
name: String,
events: Vec<InputKind>,
}
impl VirtualDevice {
pub fn new(id: &str, name: &str) -> Self {
Self {
id: id.to_string(),
name: name.to_string(),
events: Vec::new(),
}
}
pub fn feed(&mut self, event: InputKind) {
self.events.push(event);
}
pub fn set_axis(&mut self, axis: u8, value: f32) {
self.feed(InputKind::AxisMoved { axis, value });
}
pub fn press_button(&mut self, button: u8) {
self.feed(InputKind::ButtonPressed { button });
}
pub fn release_button(&mut self, button: u8) {
self.feed(InputKind::ButtonReleased { button });
}
}
impl Device for VirtualDevice {
fn poll(&mut self) -> Vec<InputKind> {
let events = self.events.clone();
self.events.clear();
events
}
fn name(&self) -> &str {
&self.name
}
fn id(&self) -> &str {
&self.id
}
}
pub fn create_virtual_devices() -> Vec<Box<dyn Device>> {
vec![Box::new(VirtualDevice::new("virtual:0", "Virtual Input 0"))]
}