use prometeu_abi::model::Button; use prometeu_hardware_contract::{InputSignals, PadBridge}; #[derive(Default, Clone, Copy, Debug)] pub struct Pad { pub up: Button, pub down: Button, pub left: Button, pub right: Button, pub a: Button, // ps: square pub b: Button, // ps: circle pub x: Button, // ps: triangle pub y: Button, // ps: cross pub l: Button, // ps: R pub r: Button, // ps: L pub start: Button, pub select: Button, } impl PadBridge for Pad { fn begin_frame(&mut self, signals: &InputSignals) { self.begin_frame(signals) } fn any(&self) -> bool { self.any() } fn up(&self) -> &Button { &self.up } fn down(&self) -> &Button { &self.down } fn left(&self) -> &Button { &self.left } fn right(&self) -> &Button { &self.right } fn a(&self) -> &Button { &self.a } fn b(&self) -> &Button { &self.b } fn x(&self) -> &Button { &self.x } fn y(&self) -> &Button { &self.y } fn l(&self) -> &Button { &self.l } fn r(&self) -> &Button { &self.r } fn start(&self) -> &Button { &self.start } fn select(&self) -> &Button { &self.select } } impl Pad { pub fn begin_frame(&mut self, signals: &InputSignals) { self.up.begin_frame(signals.up_signal); self.down.begin_frame(signals.down_signal); self.left.begin_frame(signals.left_signal); self.right.begin_frame(signals.right_signal); self.a.begin_frame(signals.a_signal); self.b.begin_frame(signals.b_signal); self.x.begin_frame(signals.x_signal); self.y.begin_frame(signals.y_signal); self.l.begin_frame(signals.l_signal); self.r.begin_frame(signals.r_signal); self.start.begin_frame(signals.start_signal); self.select.begin_frame(signals.select_signal); } pub fn any(&self) -> bool { self.a.down || self.b.down || self.x.down || self.y.down || self.l.down || self.r.down || self.start.down || self.select.down } }