input_manager/button/
button.rs1use change::ButtonChange;
2
3#[derive(Default, Debug, PartialEq)]
4pub struct Button {
5 pub pressed: bool,
6 pub new_event: bool,
7}
8
9pub trait IButton {
10 fn apply(&mut self, ButtonChange);
11 fn tick(&mut self);
12}
13
14impl IButton for Button {
15 fn apply(&mut self, change: ButtonChange) {
16 if self.pressed != change.0 {
17 self.new_event = true;
18 }
19 self.pressed = change.0;
20 }
21 fn tick(&mut self) {
22 self.new_event = false;
23 }
24}
25
26#[cfg(test)]
27mod tests {
28 use super::*;
29 #[test]
30 fn can_apply() {
31 let mut button = Button::default();
32 button.apply(ButtonChange(true));
33 assert_eq!(button.pressed, true);
34 button.apply(ButtonChange(false));
35 assert_eq!(button.pressed, false);
36 }
37 #[test]
38 fn new_event_on_change() {
39 let mut button = Button::default();
40 button.apply(ButtonChange(true));
41 assert_eq!(button.new_event, true);
42 button.apply(ButtonChange(false));
43 assert_eq!(button.new_event, true);
44 }
45 #[test]
46 fn new_event_only_on_change() {
47 let mut button = Button::default();
48 button.apply(ButtonChange(false));
49 assert_eq!(button.new_event, false);
50 button = Button {
51 pressed: true,
52 new_event: false,
53 };
54 button.apply(ButtonChange(true));
55 assert_eq!(button.new_event, false);
56 }
57 #[test]
58 fn new_event_cleared_by_tick() {
59 let mut button = Button {
60 pressed: true,
61 new_event: true,
62 };
63 button.tick();
64 assert_eq!(button.new_event, false);
65 }
66}