1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
use bevy::{
    input::{mouse::MouseScrollUnit, ButtonState},
    prelude::*,
    render::camera::Viewport,
};
use bones_framework::prelude as bones;

pub trait IntoBevy<T> {
    fn into_bevy(self) -> T;
}
pub trait IntoBones<T> {
    fn into_bones(self) -> T;
}

impl IntoBevy<Viewport> for bones::Viewport {
    fn into_bevy(self) -> Viewport {
        Viewport {
            physical_position: self.position,
            physical_size: self.size,
            depth: self.depth_min..self.depth_max,
        }
    }
}

impl IntoBevy<Color> for bones::Color {
    fn into_bevy(self) -> Color {
        Color::Rgba {
            red: self.r(),
            green: self.g(),
            blue: self.b(),
            alpha: self.a(),
        }
    }
}

impl IntoBevy<Transform> for bones::Transform {
    fn into_bevy(self) -> Transform {
        Transform {
            translation: self.translation,
            rotation: self.rotation,
            scale: self.scale,
        }
    }
}

impl IntoBones<bones::MouseScrollUnit> for MouseScrollUnit {
    fn into_bones(self) -> bones::MouseScrollUnit {
        match self {
            MouseScrollUnit::Line => bones::MouseScrollUnit::Lines,
            MouseScrollUnit::Pixel => bones::MouseScrollUnit::Pixels,
        }
    }
}

impl IntoBones<bones::ButtonState> for ButtonState {
    fn into_bones(self) -> bones::ButtonState {
        match self {
            ButtonState::Pressed => bones::ButtonState::Pressed,
            ButtonState::Released => bones::ButtonState::Released,
        }
    }
}

impl IntoBones<bones::MouseButton> for MouseButton {
    fn into_bones(self) -> bones::MouseButton {
        match self {
            MouseButton::Left => bones::MouseButton::Left,
            MouseButton::Right => bones::MouseButton::Right,
            MouseButton::Middle => bones::MouseButton::Middle,
            MouseButton::Other(i) => bones::MouseButton::Other(i),
        }
    }
}

impl IntoBones<bones::KeyCode> for KeyCode {
    fn into_bones(self) -> bones::KeyCode {
        match self {
            KeyCode::Key1 => bones::KeyCode::Key1,
            KeyCode::Key2 => bones::KeyCode::Key2,
            KeyCode::Key3 => bones::KeyCode::Key3,
            KeyCode::Key4 => bones::KeyCode::Key4,
            KeyCode::Key5 => bones::KeyCode::Key5,
            KeyCode::Key6 => bones::KeyCode::Key6,
            KeyCode::Key7 => bones::KeyCode::Key7,
            KeyCode::Key8 => bones::KeyCode::Key8,
            KeyCode::Key9 => bones::KeyCode::Key9,
            KeyCode::Key0 => bones::KeyCode::Key0,
            KeyCode::A => bones::KeyCode::A,
            KeyCode::B => bones::KeyCode::B,
            KeyCode::C => bones::KeyCode::C,
            KeyCode::D => bones::KeyCode::D,
            KeyCode::E => bones::KeyCode::E,
            KeyCode::F => bones::KeyCode::F,
            KeyCode::G => bones::KeyCode::G,
            KeyCode::H => bones::KeyCode::H,
            KeyCode::I => bones::KeyCode::I,
            KeyCode::J => bones::KeyCode::J,
            KeyCode::K => bones::KeyCode::K,
            KeyCode::L => bones::KeyCode::L,
            KeyCode::M => bones::KeyCode::M,
            KeyCode::N => bones::KeyCode::N,
            KeyCode::O => bones::KeyCode::O,
            KeyCode::P => bones::KeyCode::P,
            KeyCode::Q => bones::KeyCode::Q,
            KeyCode::R => bones::KeyCode::R,
            KeyCode::S => bones::KeyCode::S,
            KeyCode::T => bones::KeyCode::T,
            KeyCode::U => bones::KeyCode::U,
            KeyCode::V => bones::KeyCode::V,
            KeyCode::W => bones::KeyCode::W,
            KeyCode::X => bones::KeyCode::X,
            KeyCode::Y => bones::KeyCode::Y,
            KeyCode::Z => bones::KeyCode::Z,
            KeyCode::Escape => bones::KeyCode::Escape,
            KeyCode::F1 => bones::KeyCode::F1,
            KeyCode::F2 => bones::KeyCode::F2,
            KeyCode::F3 => bones::KeyCode::F3,
            KeyCode::F4 => bones::KeyCode::F4,
            KeyCode::F5 => bones::KeyCode::F5,
            KeyCode::F6 => bones::KeyCode::F6,
            KeyCode::F7 => bones::KeyCode::F7,
            KeyCode::F8 => bones::KeyCode::F8,
            KeyCode::F9 => bones::KeyCode::F9,
            KeyCode::F10 => bones::KeyCode::F10,
            KeyCode::F11 => bones::KeyCode::F11,
            KeyCode::F12 => bones::KeyCode::F12,
            KeyCode::F13 => bones::KeyCode::F13,
            KeyCode::F14 => bones::KeyCode::F14,
            KeyCode::F15 => bones::KeyCode::F15,
            KeyCode::F16 => bones::KeyCode::F16,
            KeyCode::F17 => bones::KeyCode::F17,
            KeyCode::F18 => bones::KeyCode::F18,
            KeyCode::F19 => bones::KeyCode::F19,
            KeyCode::F20 => bones::KeyCode::F20,
            KeyCode::F21 => bones::KeyCode::F21,
            KeyCode::F22 => bones::KeyCode::F22,
            KeyCode::F23 => bones::KeyCode::F23,
            KeyCode::F24 => bones::KeyCode::F24,
            KeyCode::Snapshot => bones::KeyCode::Snapshot,
            KeyCode::Scroll => bones::KeyCode::Scroll,
            KeyCode::Pause => bones::KeyCode::Pause,
            KeyCode::Insert => bones::KeyCode::Insert,
            KeyCode::Home => bones::KeyCode::Home,
            KeyCode::Delete => bones::KeyCode::Delete,
            KeyCode::End => bones::KeyCode::End,
            KeyCode::PageDown => bones::KeyCode::PageDown,
            KeyCode::PageUp => bones::KeyCode::PageUp,
            KeyCode::Left => bones::KeyCode::Left,
            KeyCode::Up => bones::KeyCode::Up,
            KeyCode::Right => bones::KeyCode::Right,
            KeyCode::Down => bones::KeyCode::Down,
            KeyCode::Back => bones::KeyCode::Back,
            KeyCode::Return => bones::KeyCode::Return,
            KeyCode::Space => bones::KeyCode::Space,
            KeyCode::Compose => bones::KeyCode::Compose,
            KeyCode::Caret => bones::KeyCode::Caret,
            KeyCode::Numlock => bones::KeyCode::Numlock,
            KeyCode::Numpad0 => bones::KeyCode::Numpad0,
            KeyCode::Numpad1 => bones::KeyCode::Numpad1,
            KeyCode::Numpad2 => bones::KeyCode::Numpad2,
            KeyCode::Numpad3 => bones::KeyCode::Numpad3,
            KeyCode::Numpad4 => bones::KeyCode::Numpad4,
            KeyCode::Numpad5 => bones::KeyCode::Numpad5,
            KeyCode::Numpad6 => bones::KeyCode::Numpad6,
            KeyCode::Numpad7 => bones::KeyCode::Numpad7,
            KeyCode::Numpad8 => bones::KeyCode::Numpad8,
            KeyCode::Numpad9 => bones::KeyCode::Numpad9,
            KeyCode::AbntC1 => bones::KeyCode::AbntC1,
            KeyCode::AbntC2 => bones::KeyCode::AbntC2,
            KeyCode::NumpadAdd => bones::KeyCode::NumpadAdd,
            KeyCode::Apostrophe => bones::KeyCode::Apostrophe,
            KeyCode::Apps => bones::KeyCode::Apps,
            KeyCode::Asterisk => bones::KeyCode::Asterisk,
            KeyCode::Plus => bones::KeyCode::Plus,
            KeyCode::At => bones::KeyCode::At,
            KeyCode::Ax => bones::KeyCode::Ax,
            KeyCode::Backslash => bones::KeyCode::Backslash,
            KeyCode::Calculator => bones::KeyCode::Calculator,
            KeyCode::Capital => bones::KeyCode::Capital,
            KeyCode::Colon => bones::KeyCode::Colon,
            KeyCode::Comma => bones::KeyCode::Comma,
            KeyCode::Convert => bones::KeyCode::Convert,
            KeyCode::NumpadDecimal => bones::KeyCode::NumpadDecimal,
            KeyCode::NumpadDivide => bones::KeyCode::NumpadDivide,
            KeyCode::Equals => bones::KeyCode::Equals,
            KeyCode::Grave => bones::KeyCode::Grave,
            KeyCode::Kana => bones::KeyCode::Kana,
            KeyCode::Kanji => bones::KeyCode::Kanji,
            KeyCode::AltLeft => bones::KeyCode::AltLeft,
            KeyCode::BracketLeft => bones::KeyCode::BracketLeft,
            KeyCode::ControlLeft => bones::KeyCode::ControlLeft,
            KeyCode::ShiftLeft => bones::KeyCode::ShiftLeft,
            KeyCode::SuperLeft => bones::KeyCode::SuperLeft,
            KeyCode::Mail => bones::KeyCode::Mail,
            KeyCode::MediaSelect => bones::KeyCode::MediaSelect,
            KeyCode::MediaStop => bones::KeyCode::MediaStop,
            KeyCode::Minus => bones::KeyCode::Minus,
            KeyCode::NumpadMultiply => bones::KeyCode::NumpadMultiply,
            KeyCode::Mute => bones::KeyCode::Mute,
            KeyCode::MyComputer => bones::KeyCode::MyComputer,
            KeyCode::NavigateForward => bones::KeyCode::NavigateForward,
            KeyCode::NavigateBackward => bones::KeyCode::NavigateBackward,
            KeyCode::NextTrack => bones::KeyCode::NextTrack,
            KeyCode::NoConvert => bones::KeyCode::NoConvert,
            KeyCode::NumpadComma => bones::KeyCode::NumpadComma,
            KeyCode::NumpadEnter => bones::KeyCode::NumpadEnter,
            KeyCode::NumpadEquals => bones::KeyCode::NumpadEquals,
            KeyCode::Oem102 => bones::KeyCode::Oem102,
            KeyCode::Period => bones::KeyCode::Period,
            KeyCode::PlayPause => bones::KeyCode::PlayPause,
            KeyCode::Power => bones::KeyCode::Power,
            KeyCode::PrevTrack => bones::KeyCode::PrevTrack,
            KeyCode::AltRight => bones::KeyCode::AltRight,
            KeyCode::BracketRight => bones::KeyCode::BracketRight,
            KeyCode::ControlRight => bones::KeyCode::ControlRight,
            KeyCode::ShiftRight => bones::KeyCode::ShiftRight,
            KeyCode::SuperRight => bones::KeyCode::SuperRight,
            KeyCode::Semicolon => bones::KeyCode::Semicolon,
            KeyCode::Slash => bones::KeyCode::Slash,
            KeyCode::Sleep => bones::KeyCode::Sleep,
            KeyCode::Stop => bones::KeyCode::Stop,
            KeyCode::NumpadSubtract => bones::KeyCode::NumpadSubtract,
            KeyCode::Sysrq => bones::KeyCode::Sysrq,
            KeyCode::Tab => bones::KeyCode::Tab,
            KeyCode::Underline => bones::KeyCode::Underline,
            KeyCode::Unlabeled => bones::KeyCode::Unlabeled,
            KeyCode::VolumeDown => bones::KeyCode::VolumeDown,
            KeyCode::VolumeUp => bones::KeyCode::VolumeUp,
            KeyCode::Wake => bones::KeyCode::Wake,
            KeyCode::WebBack => bones::KeyCode::WebBack,
            KeyCode::WebFavorites => bones::KeyCode::WebFavorites,
            KeyCode::WebForward => bones::KeyCode::WebForward,
            KeyCode::WebHome => bones::KeyCode::WebHome,
            KeyCode::WebRefresh => bones::KeyCode::WebRefresh,
            KeyCode::WebSearch => bones::KeyCode::WebSearch,
            KeyCode::WebStop => bones::KeyCode::WebStop,
            KeyCode::Yen => bones::KeyCode::Yen,
            KeyCode::Copy => bones::KeyCode::Copy,
            KeyCode::Paste => bones::KeyCode::Paste,
            KeyCode::Cut => bones::KeyCode::Cut,
        }
    }
}

impl IntoBones<bones::GamepadButton> for bevy::input::gamepad::GamepadButtonType {
    fn into_bones(self) -> bones::GamepadButton {
        match self {
            GamepadButtonType::South => bones::GamepadButton::South,
            GamepadButtonType::East => bones::GamepadButton::East,
            GamepadButtonType::North => bones::GamepadButton::North,
            GamepadButtonType::West => bones::GamepadButton::West,
            GamepadButtonType::C => bones::GamepadButton::C,
            GamepadButtonType::Z => bones::GamepadButton::Z,
            GamepadButtonType::LeftTrigger => bones::GamepadButton::LeftTrigger,
            GamepadButtonType::LeftTrigger2 => bones::GamepadButton::LeftTrigger2,
            GamepadButtonType::RightTrigger => bones::GamepadButton::RightTrigger,
            GamepadButtonType::RightTrigger2 => bones::GamepadButton::RightTrigger2,
            GamepadButtonType::Select => bones::GamepadButton::Select,
            GamepadButtonType::Start => bones::GamepadButton::Start,
            GamepadButtonType::Mode => bones::GamepadButton::Mode,
            GamepadButtonType::LeftThumb => bones::GamepadButton::LeftThumb,
            GamepadButtonType::RightThumb => bones::GamepadButton::RightThumb,
            GamepadButtonType::DPadUp => bones::GamepadButton::DPadUp,
            GamepadButtonType::DPadDown => bones::GamepadButton::DPadDown,
            GamepadButtonType::DPadLeft => bones::GamepadButton::DPadLeft,
            GamepadButtonType::DPadRight => bones::GamepadButton::DPadRight,
            GamepadButtonType::Other(x) => bones::GamepadButton::Other(x),
        }
    }
}

impl IntoBones<bones::GamepadAxis> for bevy::input::gamepad::GamepadAxisType {
    fn into_bones(self) -> bones::GamepadAxis {
        match self {
            GamepadAxisType::LeftStickX => bones::GamepadAxis::LeftStickX,
            GamepadAxisType::LeftStickY => bones::GamepadAxis::LeftStickY,
            GamepadAxisType::LeftZ => bones::GamepadAxis::LeftZ,
            GamepadAxisType::RightStickX => bones::GamepadAxis::RightStickX,
            GamepadAxisType::RightStickY => bones::GamepadAxis::RightStickY,
            GamepadAxisType::RightZ => bones::GamepadAxis::RightZ,
            GamepadAxisType::Other(x) => bones::GamepadAxis::Other(x),
        }
    }
}