bones_bevy_renderer/
convert.rs

1use bevy::{
2    input::{mouse::MouseScrollUnit, ButtonState},
3    prelude::*,
4    render::camera::Viewport,
5};
6use bones_framework::prelude as bones;
7
8/// Trait for converting types similar to bevy into their bevy compatible
9/// versions.
10pub trait IntoBevy<T> {
11    /// Converts this type into its bevy compatible equivalent.
12    fn into_bevy(self) -> T;
13}
14/// Trait for converting types similar to bones into their bones compatible
15/// versions.
16pub trait IntoBones<T> {
17    /// Converts this type into its bones compatible equivalent.
18    fn into_bones(self) -> T;
19}
20
21impl IntoBevy<Viewport> for bones::Viewport {
22    fn into_bevy(self) -> Viewport {
23        Viewport {
24            physical_position: self.position,
25            physical_size: self.size,
26            depth: self.depth_min..self.depth_max,
27        }
28    }
29}
30
31impl IntoBevy<Color> for bones::Color {
32    fn into_bevy(self) -> Color {
33        Color::Rgba {
34            red: self.r(),
35            green: self.g(),
36            blue: self.b(),
37            alpha: self.a(),
38        }
39    }
40}
41
42impl IntoBevy<Transform> for bones::Transform {
43    fn into_bevy(self) -> Transform {
44        Transform {
45            translation: self.translation,
46            rotation: self.rotation,
47            scale: self.scale,
48        }
49    }
50}
51
52impl IntoBones<bones::MouseScrollUnit> for MouseScrollUnit {
53    fn into_bones(self) -> bones::MouseScrollUnit {
54        match self {
55            MouseScrollUnit::Line => bones::MouseScrollUnit::Lines,
56            MouseScrollUnit::Pixel => bones::MouseScrollUnit::Pixels,
57        }
58    }
59}
60
61impl IntoBones<bones::ButtonState> for ButtonState {
62    fn into_bones(self) -> bones::ButtonState {
63        match self {
64            ButtonState::Pressed => bones::ButtonState::Pressed,
65            ButtonState::Released => bones::ButtonState::Released,
66        }
67    }
68}
69
70impl IntoBones<bones::MouseButton> for MouseButton {
71    fn into_bones(self) -> bones::MouseButton {
72        match self {
73            MouseButton::Left => bones::MouseButton::Left,
74            MouseButton::Right => bones::MouseButton::Right,
75            MouseButton::Middle => bones::MouseButton::Middle,
76            MouseButton::Other(i) => bones::MouseButton::Other(i),
77        }
78    }
79}
80
81impl IntoBones<bones::KeyCode> for KeyCode {
82    fn into_bones(self) -> bones::KeyCode {
83        match self {
84            KeyCode::Key1 => bones::KeyCode::Key1,
85            KeyCode::Key2 => bones::KeyCode::Key2,
86            KeyCode::Key3 => bones::KeyCode::Key3,
87            KeyCode::Key4 => bones::KeyCode::Key4,
88            KeyCode::Key5 => bones::KeyCode::Key5,
89            KeyCode::Key6 => bones::KeyCode::Key6,
90            KeyCode::Key7 => bones::KeyCode::Key7,
91            KeyCode::Key8 => bones::KeyCode::Key8,
92            KeyCode::Key9 => bones::KeyCode::Key9,
93            KeyCode::Key0 => bones::KeyCode::Key0,
94            KeyCode::A => bones::KeyCode::A,
95            KeyCode::B => bones::KeyCode::B,
96            KeyCode::C => bones::KeyCode::C,
97            KeyCode::D => bones::KeyCode::D,
98            KeyCode::E => bones::KeyCode::E,
99            KeyCode::F => bones::KeyCode::F,
100            KeyCode::G => bones::KeyCode::G,
101            KeyCode::H => bones::KeyCode::H,
102            KeyCode::I => bones::KeyCode::I,
103            KeyCode::J => bones::KeyCode::J,
104            KeyCode::K => bones::KeyCode::K,
105            KeyCode::L => bones::KeyCode::L,
106            KeyCode::M => bones::KeyCode::M,
107            KeyCode::N => bones::KeyCode::N,
108            KeyCode::O => bones::KeyCode::O,
109            KeyCode::P => bones::KeyCode::P,
110            KeyCode::Q => bones::KeyCode::Q,
111            KeyCode::R => bones::KeyCode::R,
112            KeyCode::S => bones::KeyCode::S,
113            KeyCode::T => bones::KeyCode::T,
114            KeyCode::U => bones::KeyCode::U,
115            KeyCode::V => bones::KeyCode::V,
116            KeyCode::W => bones::KeyCode::W,
117            KeyCode::X => bones::KeyCode::X,
118            KeyCode::Y => bones::KeyCode::Y,
119            KeyCode::Z => bones::KeyCode::Z,
120            KeyCode::Escape => bones::KeyCode::Escape,
121            KeyCode::F1 => bones::KeyCode::F1,
122            KeyCode::F2 => bones::KeyCode::F2,
123            KeyCode::F3 => bones::KeyCode::F3,
124            KeyCode::F4 => bones::KeyCode::F4,
125            KeyCode::F5 => bones::KeyCode::F5,
126            KeyCode::F6 => bones::KeyCode::F6,
127            KeyCode::F7 => bones::KeyCode::F7,
128            KeyCode::F8 => bones::KeyCode::F8,
129            KeyCode::F9 => bones::KeyCode::F9,
130            KeyCode::F10 => bones::KeyCode::F10,
131            KeyCode::F11 => bones::KeyCode::F11,
132            KeyCode::F12 => bones::KeyCode::F12,
133            KeyCode::F13 => bones::KeyCode::F13,
134            KeyCode::F14 => bones::KeyCode::F14,
135            KeyCode::F15 => bones::KeyCode::F15,
136            KeyCode::F16 => bones::KeyCode::F16,
137            KeyCode::F17 => bones::KeyCode::F17,
138            KeyCode::F18 => bones::KeyCode::F18,
139            KeyCode::F19 => bones::KeyCode::F19,
140            KeyCode::F20 => bones::KeyCode::F20,
141            KeyCode::F21 => bones::KeyCode::F21,
142            KeyCode::F22 => bones::KeyCode::F22,
143            KeyCode::F23 => bones::KeyCode::F23,
144            KeyCode::F24 => bones::KeyCode::F24,
145            KeyCode::Snapshot => bones::KeyCode::Snapshot,
146            KeyCode::Scroll => bones::KeyCode::Scroll,
147            KeyCode::Pause => bones::KeyCode::Pause,
148            KeyCode::Insert => bones::KeyCode::Insert,
149            KeyCode::Home => bones::KeyCode::Home,
150            KeyCode::Delete => bones::KeyCode::Delete,
151            KeyCode::End => bones::KeyCode::End,
152            KeyCode::PageDown => bones::KeyCode::PageDown,
153            KeyCode::PageUp => bones::KeyCode::PageUp,
154            KeyCode::Left => bones::KeyCode::Left,
155            KeyCode::Up => bones::KeyCode::Up,
156            KeyCode::Right => bones::KeyCode::Right,
157            KeyCode::Down => bones::KeyCode::Down,
158            KeyCode::Back => bones::KeyCode::Back,
159            KeyCode::Return => bones::KeyCode::Return,
160            KeyCode::Space => bones::KeyCode::Space,
161            KeyCode::Compose => bones::KeyCode::Compose,
162            KeyCode::Caret => bones::KeyCode::Caret,
163            KeyCode::Numlock => bones::KeyCode::Numlock,
164            KeyCode::Numpad0 => bones::KeyCode::Numpad0,
165            KeyCode::Numpad1 => bones::KeyCode::Numpad1,
166            KeyCode::Numpad2 => bones::KeyCode::Numpad2,
167            KeyCode::Numpad3 => bones::KeyCode::Numpad3,
168            KeyCode::Numpad4 => bones::KeyCode::Numpad4,
169            KeyCode::Numpad5 => bones::KeyCode::Numpad5,
170            KeyCode::Numpad6 => bones::KeyCode::Numpad6,
171            KeyCode::Numpad7 => bones::KeyCode::Numpad7,
172            KeyCode::Numpad8 => bones::KeyCode::Numpad8,
173            KeyCode::Numpad9 => bones::KeyCode::Numpad9,
174            KeyCode::AbntC1 => bones::KeyCode::AbntC1,
175            KeyCode::AbntC2 => bones::KeyCode::AbntC2,
176            KeyCode::NumpadAdd => bones::KeyCode::NumpadAdd,
177            KeyCode::Apostrophe => bones::KeyCode::Apostrophe,
178            KeyCode::Apps => bones::KeyCode::Apps,
179            KeyCode::Asterisk => bones::KeyCode::Asterisk,
180            KeyCode::Plus => bones::KeyCode::Plus,
181            KeyCode::At => bones::KeyCode::At,
182            KeyCode::Ax => bones::KeyCode::Ax,
183            KeyCode::Backslash => bones::KeyCode::Backslash,
184            KeyCode::Calculator => bones::KeyCode::Calculator,
185            KeyCode::Capital => bones::KeyCode::Capital,
186            KeyCode::Colon => bones::KeyCode::Colon,
187            KeyCode::Comma => bones::KeyCode::Comma,
188            KeyCode::Convert => bones::KeyCode::Convert,
189            KeyCode::NumpadDecimal => bones::KeyCode::NumpadDecimal,
190            KeyCode::NumpadDivide => bones::KeyCode::NumpadDivide,
191            KeyCode::Equals => bones::KeyCode::Equals,
192            KeyCode::Grave => bones::KeyCode::Grave,
193            KeyCode::Kana => bones::KeyCode::Kana,
194            KeyCode::Kanji => bones::KeyCode::Kanji,
195            KeyCode::AltLeft => bones::KeyCode::AltLeft,
196            KeyCode::BracketLeft => bones::KeyCode::BracketLeft,
197            KeyCode::ControlLeft => bones::KeyCode::ControlLeft,
198            KeyCode::ShiftLeft => bones::KeyCode::ShiftLeft,
199            KeyCode::SuperLeft => bones::KeyCode::SuperLeft,
200            KeyCode::Mail => bones::KeyCode::Mail,
201            KeyCode::MediaSelect => bones::KeyCode::MediaSelect,
202            KeyCode::MediaStop => bones::KeyCode::MediaStop,
203            KeyCode::Minus => bones::KeyCode::Minus,
204            KeyCode::NumpadMultiply => bones::KeyCode::NumpadMultiply,
205            KeyCode::Mute => bones::KeyCode::Mute,
206            KeyCode::MyComputer => bones::KeyCode::MyComputer,
207            KeyCode::NavigateForward => bones::KeyCode::NavigateForward,
208            KeyCode::NavigateBackward => bones::KeyCode::NavigateBackward,
209            KeyCode::NextTrack => bones::KeyCode::NextTrack,
210            KeyCode::NoConvert => bones::KeyCode::NoConvert,
211            KeyCode::NumpadComma => bones::KeyCode::NumpadComma,
212            KeyCode::NumpadEnter => bones::KeyCode::NumpadEnter,
213            KeyCode::NumpadEquals => bones::KeyCode::NumpadEquals,
214            KeyCode::Oem102 => bones::KeyCode::Oem102,
215            KeyCode::Period => bones::KeyCode::Period,
216            KeyCode::PlayPause => bones::KeyCode::PlayPause,
217            KeyCode::Power => bones::KeyCode::Power,
218            KeyCode::PrevTrack => bones::KeyCode::PrevTrack,
219            KeyCode::AltRight => bones::KeyCode::AltRight,
220            KeyCode::BracketRight => bones::KeyCode::BracketRight,
221            KeyCode::ControlRight => bones::KeyCode::ControlRight,
222            KeyCode::ShiftRight => bones::KeyCode::ShiftRight,
223            KeyCode::SuperRight => bones::KeyCode::SuperRight,
224            KeyCode::Semicolon => bones::KeyCode::Semicolon,
225            KeyCode::Slash => bones::KeyCode::Slash,
226            KeyCode::Sleep => bones::KeyCode::Sleep,
227            KeyCode::Stop => bones::KeyCode::Stop,
228            KeyCode::NumpadSubtract => bones::KeyCode::NumpadSubtract,
229            KeyCode::Sysrq => bones::KeyCode::Sysrq,
230            KeyCode::Tab => bones::KeyCode::Tab,
231            KeyCode::Underline => bones::KeyCode::Underline,
232            KeyCode::Unlabeled => bones::KeyCode::Unlabeled,
233            KeyCode::VolumeDown => bones::KeyCode::VolumeDown,
234            KeyCode::VolumeUp => bones::KeyCode::VolumeUp,
235            KeyCode::Wake => bones::KeyCode::Wake,
236            KeyCode::WebBack => bones::KeyCode::WebBack,
237            KeyCode::WebFavorites => bones::KeyCode::WebFavorites,
238            KeyCode::WebForward => bones::KeyCode::WebForward,
239            KeyCode::WebHome => bones::KeyCode::WebHome,
240            KeyCode::WebRefresh => bones::KeyCode::WebRefresh,
241            KeyCode::WebSearch => bones::KeyCode::WebSearch,
242            KeyCode::WebStop => bones::KeyCode::WebStop,
243            KeyCode::Yen => bones::KeyCode::Yen,
244            KeyCode::Copy => bones::KeyCode::Copy,
245            KeyCode::Paste => bones::KeyCode::Paste,
246            KeyCode::Cut => bones::KeyCode::Cut,
247        }
248    }
249}
250
251impl IntoBones<bones::GamepadButton> for bevy::input::gamepad::GamepadButtonType {
252    fn into_bones(self) -> bones::GamepadButton {
253        match self {
254            GamepadButtonType::South => bones::GamepadButton::South,
255            GamepadButtonType::East => bones::GamepadButton::East,
256            GamepadButtonType::North => bones::GamepadButton::North,
257            GamepadButtonType::West => bones::GamepadButton::West,
258            GamepadButtonType::C => bones::GamepadButton::C,
259            GamepadButtonType::Z => bones::GamepadButton::Z,
260            GamepadButtonType::LeftTrigger => bones::GamepadButton::LeftTrigger,
261            GamepadButtonType::LeftTrigger2 => bones::GamepadButton::LeftTrigger2,
262            GamepadButtonType::RightTrigger => bones::GamepadButton::RightTrigger,
263            GamepadButtonType::RightTrigger2 => bones::GamepadButton::RightTrigger2,
264            GamepadButtonType::Select => bones::GamepadButton::Select,
265            GamepadButtonType::Start => bones::GamepadButton::Start,
266            GamepadButtonType::Mode => bones::GamepadButton::Mode,
267            GamepadButtonType::LeftThumb => bones::GamepadButton::LeftThumb,
268            GamepadButtonType::RightThumb => bones::GamepadButton::RightThumb,
269            GamepadButtonType::DPadUp => bones::GamepadButton::DPadUp,
270            GamepadButtonType::DPadDown => bones::GamepadButton::DPadDown,
271            GamepadButtonType::DPadLeft => bones::GamepadButton::DPadLeft,
272            GamepadButtonType::DPadRight => bones::GamepadButton::DPadRight,
273            GamepadButtonType::Other(x) => bones::GamepadButton::Other(x),
274        }
275    }
276}
277
278impl IntoBones<bones::GamepadAxis> for bevy::input::gamepad::GamepadAxisType {
279    fn into_bones(self) -> bones::GamepadAxis {
280        match self {
281            GamepadAxisType::LeftStickX => bones::GamepadAxis::LeftStickX,
282            GamepadAxisType::LeftStickY => bones::GamepadAxis::LeftStickY,
283            GamepadAxisType::LeftZ => bones::GamepadAxis::LeftZ,
284            GamepadAxisType::RightStickX => bones::GamepadAxis::RightStickX,
285            GamepadAxisType::RightStickY => bones::GamepadAxis::RightStickY,
286            GamepadAxisType::RightZ => bones::GamepadAxis::RightZ,
287            GamepadAxisType::Other(x) => bones::GamepadAxis::Other(x),
288        }
289    }
290}