1#![warn(missing_docs)]
22
23pub mod astar;
26pub mod behavior;
27pub mod lightmap;
28pub mod navmesh;
29pub mod raw_mesh;
30pub mod uvgen;
31
32use crate::{
33 core::algebra::{Vector2, Vector3},
34 event::{ElementState, MouseScrollDelta, WindowEvent},
35 gui::{
36 message,
37 message::{ButtonState, KeyboardModifiers, OsEvent},
38 },
39 keyboard::{KeyCode, ModifiersState},
40};
41use fyrox_ui::message::CursorIcon;
42use half::f16;
43use std::{any::Any, sync::Arc};
44use winit::{event::Touch, keyboard::PhysicalKey};
45
46pub fn translate_key_to_ui(key: KeyCode) -> message::KeyCode {
48 match key {
49 KeyCode::Backquote => message::KeyCode::Backquote,
50 KeyCode::Backslash => message::KeyCode::Backslash,
51 KeyCode::BracketLeft => message::KeyCode::BracketLeft,
52 KeyCode::BracketRight => message::KeyCode::BracketRight,
53 KeyCode::Comma => message::KeyCode::Comma,
54 KeyCode::Digit0 => message::KeyCode::Digit0,
55 KeyCode::Digit1 => message::KeyCode::Digit1,
56 KeyCode::Digit2 => message::KeyCode::Digit2,
57 KeyCode::Digit3 => message::KeyCode::Digit3,
58 KeyCode::Digit4 => message::KeyCode::Digit4,
59 KeyCode::Digit5 => message::KeyCode::Digit5,
60 KeyCode::Digit6 => message::KeyCode::Digit6,
61 KeyCode::Digit7 => message::KeyCode::Digit7,
62 KeyCode::Digit8 => message::KeyCode::Digit8,
63 KeyCode::Digit9 => message::KeyCode::Digit9,
64 KeyCode::Equal => message::KeyCode::Equal,
65 KeyCode::IntlBackslash => message::KeyCode::IntlBackslash,
66 KeyCode::IntlRo => message::KeyCode::IntlRo,
67 KeyCode::IntlYen => message::KeyCode::IntlYen,
68 KeyCode::KeyA => message::KeyCode::KeyA,
69 KeyCode::KeyB => message::KeyCode::KeyB,
70 KeyCode::KeyC => message::KeyCode::KeyC,
71 KeyCode::KeyD => message::KeyCode::KeyD,
72 KeyCode::KeyE => message::KeyCode::KeyE,
73 KeyCode::KeyF => message::KeyCode::KeyF,
74 KeyCode::KeyG => message::KeyCode::KeyG,
75 KeyCode::KeyH => message::KeyCode::KeyH,
76 KeyCode::KeyI => message::KeyCode::KeyI,
77 KeyCode::KeyJ => message::KeyCode::KeyJ,
78 KeyCode::KeyK => message::KeyCode::KeyK,
79 KeyCode::KeyL => message::KeyCode::KeyL,
80 KeyCode::KeyM => message::KeyCode::KeyM,
81 KeyCode::KeyN => message::KeyCode::KeyN,
82 KeyCode::KeyO => message::KeyCode::KeyO,
83 KeyCode::KeyP => message::KeyCode::KeyP,
84 KeyCode::KeyQ => message::KeyCode::KeyQ,
85 KeyCode::KeyR => message::KeyCode::KeyR,
86 KeyCode::KeyS => message::KeyCode::KeyS,
87 KeyCode::KeyT => message::KeyCode::KeyT,
88 KeyCode::KeyU => message::KeyCode::KeyU,
89 KeyCode::KeyV => message::KeyCode::KeyV,
90 KeyCode::KeyW => message::KeyCode::KeyW,
91 KeyCode::KeyX => message::KeyCode::KeyX,
92 KeyCode::KeyY => message::KeyCode::KeyY,
93 KeyCode::KeyZ => message::KeyCode::KeyZ,
94 KeyCode::Minus => message::KeyCode::Minus,
95 KeyCode::Period => message::KeyCode::Period,
96 KeyCode::Quote => message::KeyCode::Quote,
97 KeyCode::Semicolon => message::KeyCode::Semicolon,
98 KeyCode::Slash => message::KeyCode::Slash,
99 KeyCode::AltLeft => message::KeyCode::AltLeft,
100 KeyCode::AltRight => message::KeyCode::AltRight,
101 KeyCode::Backspace => message::KeyCode::Backspace,
102 KeyCode::CapsLock => message::KeyCode::CapsLock,
103 KeyCode::ContextMenu => message::KeyCode::ContextMenu,
104 KeyCode::ControlLeft => message::KeyCode::ControlLeft,
105 KeyCode::ControlRight => message::KeyCode::ControlRight,
106 KeyCode::Enter => message::KeyCode::Enter,
107 KeyCode::SuperLeft => message::KeyCode::SuperLeft,
108 KeyCode::SuperRight => message::KeyCode::SuperRight,
109 KeyCode::ShiftLeft => message::KeyCode::ShiftLeft,
110 KeyCode::ShiftRight => message::KeyCode::ShiftRight,
111 KeyCode::Space => message::KeyCode::Space,
112 KeyCode::Tab => message::KeyCode::Tab,
113 KeyCode::Convert => message::KeyCode::Convert,
114 KeyCode::KanaMode => message::KeyCode::KanaMode,
115 KeyCode::Lang1 => message::KeyCode::Lang1,
116 KeyCode::Lang2 => message::KeyCode::Lang2,
117 KeyCode::Lang3 => message::KeyCode::Lang3,
118 KeyCode::Lang4 => message::KeyCode::Lang4,
119 KeyCode::Lang5 => message::KeyCode::Lang5,
120 KeyCode::NonConvert => message::KeyCode::NonConvert,
121 KeyCode::Delete => message::KeyCode::Delete,
122 KeyCode::End => message::KeyCode::End,
123 KeyCode::Help => message::KeyCode::Help,
124 KeyCode::Home => message::KeyCode::Home,
125 KeyCode::Insert => message::KeyCode::Insert,
126 KeyCode::PageDown => message::KeyCode::PageDown,
127 KeyCode::PageUp => message::KeyCode::PageUp,
128 KeyCode::ArrowDown => message::KeyCode::ArrowDown,
129 KeyCode::ArrowLeft => message::KeyCode::ArrowLeft,
130 KeyCode::ArrowRight => message::KeyCode::ArrowRight,
131 KeyCode::ArrowUp => message::KeyCode::ArrowUp,
132 KeyCode::NumLock => message::KeyCode::NumLock,
133 KeyCode::Numpad0 => message::KeyCode::Numpad0,
134 KeyCode::Numpad1 => message::KeyCode::Numpad1,
135 KeyCode::Numpad2 => message::KeyCode::Numpad2,
136 KeyCode::Numpad3 => message::KeyCode::Numpad3,
137 KeyCode::Numpad4 => message::KeyCode::Numpad4,
138 KeyCode::Numpad5 => message::KeyCode::Numpad5,
139 KeyCode::Numpad6 => message::KeyCode::Numpad6,
140 KeyCode::Numpad7 => message::KeyCode::Numpad7,
141 KeyCode::Numpad8 => message::KeyCode::Numpad8,
142 KeyCode::Numpad9 => message::KeyCode::Numpad9,
143 KeyCode::NumpadAdd => message::KeyCode::NumpadAdd,
144 KeyCode::NumpadBackspace => message::KeyCode::NumpadBackspace,
145 KeyCode::NumpadClear => message::KeyCode::NumpadClear,
146 KeyCode::NumpadClearEntry => message::KeyCode::NumpadClearEntry,
147 KeyCode::NumpadComma => message::KeyCode::NumpadComma,
148 KeyCode::NumpadDecimal => message::KeyCode::NumpadDecimal,
149 KeyCode::NumpadDivide => message::KeyCode::NumpadDivide,
150 KeyCode::NumpadEnter => message::KeyCode::NumpadEnter,
151 KeyCode::NumpadEqual => message::KeyCode::NumpadEqual,
152 KeyCode::NumpadHash => message::KeyCode::NumpadHash,
153 KeyCode::NumpadMemoryAdd => message::KeyCode::NumpadMemoryAdd,
154 KeyCode::NumpadMemoryClear => message::KeyCode::NumpadMemoryClear,
155 KeyCode::NumpadMemoryRecall => message::KeyCode::NumpadMemoryRecall,
156 KeyCode::NumpadMemoryStore => message::KeyCode::NumpadMemoryStore,
157 KeyCode::NumpadMemorySubtract => message::KeyCode::NumpadMemorySubtract,
158 KeyCode::NumpadMultiply => message::KeyCode::NumpadMultiply,
159 KeyCode::NumpadParenLeft => message::KeyCode::NumpadParenLeft,
160 KeyCode::NumpadParenRight => message::KeyCode::NumpadParenRight,
161 KeyCode::NumpadStar => message::KeyCode::NumpadStar,
162 KeyCode::NumpadSubtract => message::KeyCode::NumpadSubtract,
163 KeyCode::Escape => message::KeyCode::Escape,
164 KeyCode::Fn => message::KeyCode::Fn,
165 KeyCode::FnLock => message::KeyCode::FnLock,
166 KeyCode::PrintScreen => message::KeyCode::PrintScreen,
167 KeyCode::ScrollLock => message::KeyCode::ScrollLock,
168 KeyCode::Pause => message::KeyCode::Pause,
169 KeyCode::BrowserBack => message::KeyCode::BrowserBack,
170 KeyCode::BrowserFavorites => message::KeyCode::BrowserFavorites,
171 KeyCode::BrowserForward => message::KeyCode::BrowserForward,
172 KeyCode::BrowserHome => message::KeyCode::BrowserHome,
173 KeyCode::BrowserRefresh => message::KeyCode::BrowserRefresh,
174 KeyCode::BrowserSearch => message::KeyCode::BrowserSearch,
175 KeyCode::BrowserStop => message::KeyCode::BrowserStop,
176 KeyCode::Eject => message::KeyCode::Eject,
177 KeyCode::LaunchApp1 => message::KeyCode::LaunchApp1,
178 KeyCode::LaunchApp2 => message::KeyCode::LaunchApp2,
179 KeyCode::LaunchMail => message::KeyCode::LaunchMail,
180 KeyCode::MediaPlayPause => message::KeyCode::MediaPlayPause,
181 KeyCode::MediaSelect => message::KeyCode::MediaSelect,
182 KeyCode::MediaStop => message::KeyCode::MediaStop,
183 KeyCode::MediaTrackNext => message::KeyCode::MediaTrackNext,
184 KeyCode::MediaTrackPrevious => message::KeyCode::MediaTrackPrevious,
185 KeyCode::Power => message::KeyCode::Power,
186 KeyCode::Sleep => message::KeyCode::Sleep,
187 KeyCode::AudioVolumeDown => message::KeyCode::AudioVolumeDown,
188 KeyCode::AudioVolumeMute => message::KeyCode::AudioVolumeMute,
189 KeyCode::AudioVolumeUp => message::KeyCode::AudioVolumeUp,
190 KeyCode::WakeUp => message::KeyCode::WakeUp,
191 KeyCode::Meta => message::KeyCode::Meta,
192 KeyCode::Hyper => message::KeyCode::Hyper,
193 KeyCode::Turbo => message::KeyCode::Turbo,
194 KeyCode::Abort => message::KeyCode::Abort,
195 KeyCode::Resume => message::KeyCode::Resume,
196 KeyCode::Suspend => message::KeyCode::Suspend,
197 KeyCode::Again => message::KeyCode::Again,
198 KeyCode::Copy => message::KeyCode::Copy,
199 KeyCode::Cut => message::KeyCode::Cut,
200 KeyCode::Find => message::KeyCode::Find,
201 KeyCode::Open => message::KeyCode::Open,
202 KeyCode::Paste => message::KeyCode::Paste,
203 KeyCode::Props => message::KeyCode::Props,
204 KeyCode::Select => message::KeyCode::Select,
205 KeyCode::Undo => message::KeyCode::Undo,
206 KeyCode::Hiragana => message::KeyCode::Hiragana,
207 KeyCode::Katakana => message::KeyCode::Katakana,
208 KeyCode::F1 => message::KeyCode::F1,
209 KeyCode::F2 => message::KeyCode::F2,
210 KeyCode::F3 => message::KeyCode::F3,
211 KeyCode::F4 => message::KeyCode::F4,
212 KeyCode::F5 => message::KeyCode::F5,
213 KeyCode::F6 => message::KeyCode::F6,
214 KeyCode::F7 => message::KeyCode::F7,
215 KeyCode::F8 => message::KeyCode::F8,
216 KeyCode::F9 => message::KeyCode::F9,
217 KeyCode::F10 => message::KeyCode::F10,
218 KeyCode::F11 => message::KeyCode::F11,
219 KeyCode::F12 => message::KeyCode::F12,
220 KeyCode::F13 => message::KeyCode::F13,
221 KeyCode::F14 => message::KeyCode::F14,
222 KeyCode::F15 => message::KeyCode::F15,
223 KeyCode::F16 => message::KeyCode::F16,
224 KeyCode::F17 => message::KeyCode::F17,
225 KeyCode::F18 => message::KeyCode::F18,
226 KeyCode::F19 => message::KeyCode::F19,
227 KeyCode::F20 => message::KeyCode::F20,
228 KeyCode::F21 => message::KeyCode::F21,
229 KeyCode::F22 => message::KeyCode::F22,
230 KeyCode::F23 => message::KeyCode::F23,
231 KeyCode::F24 => message::KeyCode::F24,
232 KeyCode::F25 => message::KeyCode::F25,
233 KeyCode::F26 => message::KeyCode::F26,
234 KeyCode::F27 => message::KeyCode::F27,
235 KeyCode::F28 => message::KeyCode::F28,
236 KeyCode::F29 => message::KeyCode::F29,
237 KeyCode::F30 => message::KeyCode::F30,
238 KeyCode::F31 => message::KeyCode::F31,
239 KeyCode::F32 => message::KeyCode::F32,
240 KeyCode::F33 => message::KeyCode::F33,
241 KeyCode::F34 => message::KeyCode::F34,
242 KeyCode::F35 => message::KeyCode::F35,
243 _ => message::KeyCode::Unknown,
244 }
245}
246
247pub fn translate_key_from_ui(key: message::KeyCode) -> KeyCode {
249 match key {
250 message::KeyCode::Backquote => KeyCode::Backquote,
251 message::KeyCode::Backslash => KeyCode::Backslash,
252 message::KeyCode::BracketLeft => KeyCode::BracketLeft,
253 message::KeyCode::BracketRight => KeyCode::BracketRight,
254 message::KeyCode::Comma => KeyCode::Comma,
255 message::KeyCode::Digit0 => KeyCode::Digit0,
256 message::KeyCode::Digit1 => KeyCode::Digit1,
257 message::KeyCode::Digit2 => KeyCode::Digit2,
258 message::KeyCode::Digit3 => KeyCode::Digit3,
259 message::KeyCode::Digit4 => KeyCode::Digit4,
260 message::KeyCode::Digit5 => KeyCode::Digit5,
261 message::KeyCode::Digit6 => KeyCode::Digit6,
262 message::KeyCode::Digit7 => KeyCode::Digit7,
263 message::KeyCode::Digit8 => KeyCode::Digit8,
264 message::KeyCode::Digit9 => KeyCode::Digit9,
265 message::KeyCode::Equal => KeyCode::Equal,
266 message::KeyCode::IntlBackslash => KeyCode::IntlBackslash,
267 message::KeyCode::IntlRo => KeyCode::IntlRo,
268 message::KeyCode::IntlYen => KeyCode::IntlYen,
269 message::KeyCode::KeyA => KeyCode::KeyA,
270 message::KeyCode::KeyB => KeyCode::KeyB,
271 message::KeyCode::KeyC => KeyCode::KeyC,
272 message::KeyCode::KeyD => KeyCode::KeyD,
273 message::KeyCode::KeyE => KeyCode::KeyE,
274 message::KeyCode::KeyF => KeyCode::KeyF,
275 message::KeyCode::KeyG => KeyCode::KeyG,
276 message::KeyCode::KeyH => KeyCode::KeyH,
277 message::KeyCode::KeyI => KeyCode::KeyI,
278 message::KeyCode::KeyJ => KeyCode::KeyJ,
279 message::KeyCode::KeyK => KeyCode::KeyK,
280 message::KeyCode::KeyL => KeyCode::KeyL,
281 message::KeyCode::KeyM => KeyCode::KeyM,
282 message::KeyCode::KeyN => KeyCode::KeyN,
283 message::KeyCode::KeyO => KeyCode::KeyO,
284 message::KeyCode::KeyP => KeyCode::KeyP,
285 message::KeyCode::KeyQ => KeyCode::KeyQ,
286 message::KeyCode::KeyR => KeyCode::KeyR,
287 message::KeyCode::KeyS => KeyCode::KeyS,
288 message::KeyCode::KeyT => KeyCode::KeyT,
289 message::KeyCode::KeyU => KeyCode::KeyU,
290 message::KeyCode::KeyV => KeyCode::KeyV,
291 message::KeyCode::KeyW => KeyCode::KeyW,
292 message::KeyCode::KeyX => KeyCode::KeyX,
293 message::KeyCode::KeyY => KeyCode::KeyY,
294 message::KeyCode::KeyZ => KeyCode::KeyZ,
295 message::KeyCode::Minus => KeyCode::Minus,
296 message::KeyCode::Period => KeyCode::Period,
297 message::KeyCode::Quote => KeyCode::Quote,
298 message::KeyCode::Semicolon => KeyCode::Semicolon,
299 message::KeyCode::Slash => KeyCode::Slash,
300 message::KeyCode::AltLeft => KeyCode::AltLeft,
301 message::KeyCode::AltRight => KeyCode::AltRight,
302 message::KeyCode::Backspace => KeyCode::Backspace,
303 message::KeyCode::CapsLock => KeyCode::CapsLock,
304 message::KeyCode::ContextMenu => KeyCode::ContextMenu,
305 message::KeyCode::ControlLeft => KeyCode::ControlLeft,
306 message::KeyCode::ControlRight => KeyCode::ControlRight,
307 message::KeyCode::Enter => KeyCode::Enter,
308 message::KeyCode::SuperLeft => KeyCode::SuperLeft,
309 message::KeyCode::SuperRight => KeyCode::SuperRight,
310 message::KeyCode::ShiftLeft => KeyCode::ShiftLeft,
311 message::KeyCode::ShiftRight => KeyCode::ShiftRight,
312 message::KeyCode::Space => KeyCode::Space,
313 message::KeyCode::Tab => KeyCode::Tab,
314 message::KeyCode::Convert => KeyCode::Convert,
315 message::KeyCode::KanaMode => KeyCode::KanaMode,
316 message::KeyCode::Lang1 => KeyCode::Lang1,
317 message::KeyCode::Lang2 => KeyCode::Lang2,
318 message::KeyCode::Lang3 => KeyCode::Lang3,
319 message::KeyCode::Lang4 => KeyCode::Lang4,
320 message::KeyCode::Lang5 => KeyCode::Lang5,
321 message::KeyCode::NonConvert => KeyCode::NonConvert,
322 message::KeyCode::Delete => KeyCode::Delete,
323 message::KeyCode::End => KeyCode::End,
324 message::KeyCode::Help => KeyCode::Help,
325 message::KeyCode::Home => KeyCode::Home,
326 message::KeyCode::Insert => KeyCode::Insert,
327 message::KeyCode::PageDown => KeyCode::PageDown,
328 message::KeyCode::PageUp => KeyCode::PageUp,
329 message::KeyCode::ArrowDown => KeyCode::ArrowDown,
330 message::KeyCode::ArrowLeft => KeyCode::ArrowLeft,
331 message::KeyCode::ArrowRight => KeyCode::ArrowRight,
332 message::KeyCode::ArrowUp => KeyCode::ArrowUp,
333 message::KeyCode::NumLock => KeyCode::NumLock,
334 message::KeyCode::Numpad0 => KeyCode::Numpad0,
335 message::KeyCode::Numpad1 => KeyCode::Numpad1,
336 message::KeyCode::Numpad2 => KeyCode::Numpad2,
337 message::KeyCode::Numpad3 => KeyCode::Numpad3,
338 message::KeyCode::Numpad4 => KeyCode::Numpad4,
339 message::KeyCode::Numpad5 => KeyCode::Numpad5,
340 message::KeyCode::Numpad6 => KeyCode::Numpad6,
341 message::KeyCode::Numpad7 => KeyCode::Numpad7,
342 message::KeyCode::Numpad8 => KeyCode::Numpad8,
343 message::KeyCode::Numpad9 => KeyCode::Numpad9,
344 message::KeyCode::NumpadAdd => KeyCode::NumpadAdd,
345 message::KeyCode::NumpadBackspace => KeyCode::NumpadBackspace,
346 message::KeyCode::NumpadClear => KeyCode::NumpadClear,
347 message::KeyCode::NumpadClearEntry => KeyCode::NumpadClearEntry,
348 message::KeyCode::NumpadComma => KeyCode::NumpadComma,
349 message::KeyCode::NumpadDecimal => KeyCode::NumpadDecimal,
350 message::KeyCode::NumpadDivide => KeyCode::NumpadDivide,
351 message::KeyCode::NumpadEnter => KeyCode::NumpadEnter,
352 message::KeyCode::NumpadEqual => KeyCode::NumpadEqual,
353 message::KeyCode::NumpadHash => KeyCode::NumpadHash,
354 message::KeyCode::NumpadMemoryAdd => KeyCode::NumpadMemoryAdd,
355 message::KeyCode::NumpadMemoryClear => KeyCode::NumpadMemoryClear,
356 message::KeyCode::NumpadMemoryRecall => KeyCode::NumpadMemoryRecall,
357 message::KeyCode::NumpadMemoryStore => KeyCode::NumpadMemoryStore,
358 message::KeyCode::NumpadMemorySubtract => KeyCode::NumpadMemorySubtract,
359 message::KeyCode::NumpadMultiply => KeyCode::NumpadMultiply,
360 message::KeyCode::NumpadParenLeft => KeyCode::NumpadParenLeft,
361 message::KeyCode::NumpadParenRight => KeyCode::NumpadParenRight,
362 message::KeyCode::NumpadStar => KeyCode::NumpadStar,
363 message::KeyCode::NumpadSubtract => KeyCode::NumpadSubtract,
364 message::KeyCode::Escape => KeyCode::Escape,
365 message::KeyCode::Fn => KeyCode::Fn,
366 message::KeyCode::FnLock => KeyCode::FnLock,
367 message::KeyCode::PrintScreen => KeyCode::PrintScreen,
368 message::KeyCode::ScrollLock => KeyCode::ScrollLock,
369 message::KeyCode::Pause => KeyCode::Pause,
370 message::KeyCode::BrowserBack => KeyCode::BrowserBack,
371 message::KeyCode::BrowserFavorites => KeyCode::BrowserFavorites,
372 message::KeyCode::BrowserForward => KeyCode::BrowserForward,
373 message::KeyCode::BrowserHome => KeyCode::BrowserHome,
374 message::KeyCode::BrowserRefresh => KeyCode::BrowserRefresh,
375 message::KeyCode::BrowserSearch => KeyCode::BrowserSearch,
376 message::KeyCode::BrowserStop => KeyCode::BrowserStop,
377 message::KeyCode::Eject => KeyCode::Eject,
378 message::KeyCode::LaunchApp1 => KeyCode::LaunchApp1,
379 message::KeyCode::LaunchApp2 => KeyCode::LaunchApp2,
380 message::KeyCode::LaunchMail => KeyCode::LaunchMail,
381 message::KeyCode::MediaPlayPause => KeyCode::MediaPlayPause,
382 message::KeyCode::MediaSelect => KeyCode::MediaSelect,
383 message::KeyCode::MediaStop => KeyCode::MediaStop,
384 message::KeyCode::MediaTrackNext => KeyCode::MediaTrackNext,
385 message::KeyCode::MediaTrackPrevious => KeyCode::MediaTrackPrevious,
386 message::KeyCode::Power => KeyCode::Power,
387 message::KeyCode::Sleep => KeyCode::Sleep,
388 message::KeyCode::AudioVolumeDown => KeyCode::AudioVolumeDown,
389 message::KeyCode::AudioVolumeMute => KeyCode::AudioVolumeMute,
390 message::KeyCode::AudioVolumeUp => KeyCode::AudioVolumeUp,
391 message::KeyCode::WakeUp => KeyCode::WakeUp,
392 message::KeyCode::Meta => KeyCode::Meta,
393 message::KeyCode::Hyper => KeyCode::Hyper,
394 message::KeyCode::Turbo => KeyCode::Turbo,
395 message::KeyCode::Abort => KeyCode::Abort,
396 message::KeyCode::Resume => KeyCode::Resume,
397 message::KeyCode::Suspend => KeyCode::Suspend,
398 message::KeyCode::Again => KeyCode::Again,
399 message::KeyCode::Copy => KeyCode::Copy,
400 message::KeyCode::Cut => KeyCode::Cut,
401 message::KeyCode::Find => KeyCode::Find,
402 message::KeyCode::Open => KeyCode::Open,
403 message::KeyCode::Paste => KeyCode::Paste,
404 message::KeyCode::Props => KeyCode::Props,
405 message::KeyCode::Select => KeyCode::Select,
406 message::KeyCode::Undo => KeyCode::Undo,
407 message::KeyCode::Hiragana => KeyCode::Hiragana,
408 message::KeyCode::Katakana => KeyCode::Katakana,
409 message::KeyCode::F1 => KeyCode::F1,
410 message::KeyCode::F2 => KeyCode::F2,
411 message::KeyCode::F3 => KeyCode::F3,
412 message::KeyCode::F4 => KeyCode::F4,
413 message::KeyCode::F5 => KeyCode::F5,
414 message::KeyCode::F6 => KeyCode::F6,
415 message::KeyCode::F7 => KeyCode::F7,
416 message::KeyCode::F8 => KeyCode::F8,
417 message::KeyCode::F9 => KeyCode::F9,
418 message::KeyCode::F10 => KeyCode::F10,
419 message::KeyCode::F11 => KeyCode::F11,
420 message::KeyCode::F12 => KeyCode::F12,
421 message::KeyCode::F13 => KeyCode::F13,
422 message::KeyCode::F14 => KeyCode::F14,
423 message::KeyCode::F15 => KeyCode::F15,
424 message::KeyCode::F16 => KeyCode::F16,
425 message::KeyCode::F17 => KeyCode::F17,
426 message::KeyCode::F18 => KeyCode::F18,
427 message::KeyCode::F19 => KeyCode::F19,
428 message::KeyCode::F20 => KeyCode::F20,
429 message::KeyCode::F21 => KeyCode::F21,
430 message::KeyCode::F22 => KeyCode::F22,
431 message::KeyCode::F23 => KeyCode::F23,
432 message::KeyCode::F24 => KeyCode::F24,
433 message::KeyCode::F25 => KeyCode::F25,
434 message::KeyCode::F26 => KeyCode::F26,
435 message::KeyCode::F27 => KeyCode::F27,
436 message::KeyCode::F28 => KeyCode::F28,
437 message::KeyCode::F29 => KeyCode::F29,
438 message::KeyCode::F30 => KeyCode::F30,
439 message::KeyCode::F31 => KeyCode::F31,
440 message::KeyCode::F32 => KeyCode::F32,
441 message::KeyCode::F33 => KeyCode::F33,
442 message::KeyCode::F34 => KeyCode::F34,
443 message::KeyCode::F35 => KeyCode::F35,
444 _ => KeyCode::Fn,
445 }
446}
447
448pub fn translate_cursor_icon(icon: CursorIcon) -> crate::window::CursorIcon {
450 match icon {
451 CursorIcon::Default => crate::window::CursorIcon::Default,
452 CursorIcon::Crosshair => crate::window::CursorIcon::Crosshair,
453 CursorIcon::Move => crate::window::CursorIcon::Move,
454 CursorIcon::Text => crate::window::CursorIcon::Text,
455 CursorIcon::Wait => crate::window::CursorIcon::Wait,
456 CursorIcon::Help => crate::window::CursorIcon::Help,
457 CursorIcon::Progress => crate::window::CursorIcon::Progress,
458 CursorIcon::NotAllowed => crate::window::CursorIcon::NotAllowed,
459 CursorIcon::ContextMenu => crate::window::CursorIcon::ContextMenu,
460 CursorIcon::Cell => crate::window::CursorIcon::Cell,
461 CursorIcon::VerticalText => crate::window::CursorIcon::VerticalText,
462 CursorIcon::Alias => crate::window::CursorIcon::Alias,
463 CursorIcon::Copy => crate::window::CursorIcon::Copy,
464 CursorIcon::NoDrop => crate::window::CursorIcon::NoDrop,
465 CursorIcon::Grab => crate::window::CursorIcon::Grab,
466 CursorIcon::Grabbing => crate::window::CursorIcon::Grabbing,
467 CursorIcon::AllScroll => crate::window::CursorIcon::AllScroll,
468 CursorIcon::ZoomIn => crate::window::CursorIcon::ZoomIn,
469 CursorIcon::ZoomOut => crate::window::CursorIcon::ZoomOut,
470 CursorIcon::EResize => crate::window::CursorIcon::EResize,
471 CursorIcon::NResize => crate::window::CursorIcon::NResize,
472 CursorIcon::NeResize => crate::window::CursorIcon::NeResize,
473 CursorIcon::NwResize => crate::window::CursorIcon::NwResize,
474 CursorIcon::SResize => crate::window::CursorIcon::SResize,
475 CursorIcon::SeResize => crate::window::CursorIcon::SeResize,
476 CursorIcon::SwResize => crate::window::CursorIcon::SwResize,
477 CursorIcon::WResize => crate::window::CursorIcon::WResize,
478 CursorIcon::EwResize => crate::window::CursorIcon::EwResize,
479 CursorIcon::NsResize => crate::window::CursorIcon::NsResize,
480 CursorIcon::NeswResize => crate::window::CursorIcon::NeswResize,
481 CursorIcon::NwseResize => crate::window::CursorIcon::NwseResize,
482 CursorIcon::ColResize => crate::window::CursorIcon::ColResize,
483 CursorIcon::RowResize => crate::window::CursorIcon::RowResize,
484 CursorIcon::Pointer => crate::window::CursorIcon::Pointer,
485 }
486}
487
488pub fn translate_button(button: crate::event::MouseButton) -> crate::gui::message::MouseButton {
490 match button {
491 crate::event::MouseButton::Left => crate::gui::message::MouseButton::Left,
492 crate::event::MouseButton::Right => crate::gui::message::MouseButton::Right,
493 crate::event::MouseButton::Middle => crate::gui::message::MouseButton::Middle,
494 crate::event::MouseButton::Forward => crate::gui::message::MouseButton::Forward,
495 crate::event::MouseButton::Back => crate::gui::message::MouseButton::Back,
496 crate::event::MouseButton::Other(i) => crate::gui::message::MouseButton::Other(i),
497 }
498}
499
500pub fn translate_state(state: ElementState) -> ButtonState {
502 match state {
503 ElementState::Pressed => ButtonState::Pressed,
504 ElementState::Released => ButtonState::Released,
505 }
506}
507
508pub fn translate_event(event: &WindowEvent) -> Option<OsEvent> {
510 match event {
511 WindowEvent::KeyboardInput { event, .. } => {
512 if let PhysicalKey::Code(key) = event.physical_key {
513 Some(OsEvent::KeyboardInput {
514 button: translate_key_to_ui(key),
515 state: translate_state(event.state),
516 text: event
517 .text
518 .as_ref()
519 .map(|s| s.to_string())
520 .unwrap_or_default(),
521 })
522 } else {
523 None
524 }
525 }
526 WindowEvent::CursorMoved { position, .. } => Some(OsEvent::CursorMoved {
527 position: Vector2::new(position.x as f32, position.y as f32),
528 }),
529 WindowEvent::MouseWheel { delta, .. } => match delta {
530 MouseScrollDelta::LineDelta(x, y) => Some(OsEvent::MouseWheel(*x, *y)),
531 MouseScrollDelta::PixelDelta(pos) => {
532 Some(OsEvent::MouseWheel(pos.x as f32, pos.y as f32))
533 }
534 },
535 WindowEvent::MouseInput { state, button, .. } => Some(OsEvent::MouseInput {
536 button: translate_button(*button),
537 state: translate_state(*state),
538 }),
539 &WindowEvent::ModifiersChanged(modifiers) => Some(OsEvent::KeyboardModifiers(
540 translate_keyboard_modifiers(modifiers.state()),
541 )),
542 WindowEvent::Touch(Touch {
543 phase,
544 location,
545 force,
546 id,
547 ..
548 }) => Some(OsEvent::Touch {
549 phase: match phase {
550 winit::event::TouchPhase::Started => fyrox_ui::message::TouchPhase::Started,
551 winit::event::TouchPhase::Moved => fyrox_ui::message::TouchPhase::Moved,
552 winit::event::TouchPhase::Ended => fyrox_ui::message::TouchPhase::Ended,
553 winit::event::TouchPhase::Cancelled => fyrox_ui::message::TouchPhase::Cancelled,
554 },
555 location: Vector2::new(location.x as f32, location.y as f32),
556 force: match force {
557 Some(force) => match force {
558 winit::event::Force::Calibrated {
559 force,
560 max_possible_force,
561 altitude_angle,
562 } => Some(fyrox_ui::message::Force::Calibrated {
563 force: force.to_be_bytes(),
564 max_possible_force: max_possible_force.to_be_bytes(),
565 altitude_angle: altitude_angle
566 .as_ref()
567 .map(|altitude_angle| altitude_angle.to_be_bytes()),
568 }),
569 winit::event::Force::Normalized(value) => {
570 Some(fyrox_ui::message::Force::Normalized(value.to_be_bytes()))
571 }
572 },
573 None => None,
574 },
575 id: *id,
576 }),
577 _ => None,
578 }
579}
580
581pub fn translate_keyboard_modifiers(modifiers: ModifiersState) -> KeyboardModifiers {
583 KeyboardModifiers {
584 alt: modifiers.alt_key(),
585 shift: modifiers.shift_key(),
586 control: modifiers.control_key(),
587 system: modifiers.super_key(),
588 }
589}
590
591pub fn virtual_key_code_name(code: KeyCode) -> &'static str {
594 match code {
595 KeyCode::Backquote => "Backquote",
596 KeyCode::Backslash => "Backslash",
597 KeyCode::BracketLeft => "BracketLeft",
598 KeyCode::BracketRight => "BracketRight",
599 KeyCode::Comma => "Comma",
600 KeyCode::Digit0 => "0",
601 KeyCode::Digit1 => "1",
602 KeyCode::Digit2 => "2",
603 KeyCode::Digit3 => "3",
604 KeyCode::Digit4 => "4",
605 KeyCode::Digit5 => "5",
606 KeyCode::Digit6 => "6",
607 KeyCode::Digit7 => "7",
608 KeyCode::Digit8 => "8",
609 KeyCode::Digit9 => "9",
610 KeyCode::Equal => "Equal",
611 KeyCode::IntlBackslash => "IntlBackslash",
612 KeyCode::IntlRo => "IntlRo",
613 KeyCode::IntlYen => "IntlYen",
614 KeyCode::KeyA => "A",
615 KeyCode::KeyB => "B",
616 KeyCode::KeyC => "C",
617 KeyCode::KeyD => "D",
618 KeyCode::KeyE => "E",
619 KeyCode::KeyF => "F",
620 KeyCode::KeyG => "G",
621 KeyCode::KeyH => "H",
622 KeyCode::KeyI => "I",
623 KeyCode::KeyJ => "J",
624 KeyCode::KeyK => "K",
625 KeyCode::KeyL => "L",
626 KeyCode::KeyM => "M",
627 KeyCode::KeyN => "N",
628 KeyCode::KeyO => "O",
629 KeyCode::KeyP => "P",
630 KeyCode::KeyQ => "Q",
631 KeyCode::KeyR => "R",
632 KeyCode::KeyS => "S",
633 KeyCode::KeyT => "T",
634 KeyCode::KeyU => "U",
635 KeyCode::KeyV => "V",
636 KeyCode::KeyW => "W",
637 KeyCode::KeyX => "X",
638 KeyCode::KeyY => "Y",
639 KeyCode::KeyZ => "Z",
640 KeyCode::Minus => "Minus",
641 KeyCode::Period => "Period",
642 KeyCode::Quote => "Quote",
643 KeyCode::Semicolon => "Semicolon",
644 KeyCode::Slash => "Slash",
645 KeyCode::AltLeft => "AltLeft",
646 KeyCode::AltRight => "AltRight",
647 KeyCode::Backspace => "Backspace",
648 KeyCode::CapsLock => "CapsLock",
649 KeyCode::ContextMenu => "ContextMenu",
650 KeyCode::ControlLeft => "ControlLeft",
651 KeyCode::ControlRight => "ControlRight",
652 KeyCode::Enter => "Enter",
653 KeyCode::SuperLeft => "SuperLeft",
654 KeyCode::SuperRight => "SuperRight",
655 KeyCode::ShiftLeft => "ShiftLeft",
656 KeyCode::ShiftRight => "ShiftRight",
657 KeyCode::Space => "Space",
658 KeyCode::Tab => "Tab",
659 KeyCode::Convert => "Convert",
660 KeyCode::KanaMode => "KanaMode",
661 KeyCode::Lang1 => "Lang1",
662 KeyCode::Lang2 => "Lang2",
663 KeyCode::Lang3 => "Lang3",
664 KeyCode::Lang4 => "Lang4",
665 KeyCode::Lang5 => "Lang5",
666 KeyCode::NonConvert => "NonConvert",
667 KeyCode::Delete => "Delete",
668 KeyCode::End => "End",
669 KeyCode::Help => "Help",
670 KeyCode::Home => "Home",
671 KeyCode::Insert => "Insert",
672 KeyCode::PageDown => "PageDown",
673 KeyCode::PageUp => "PageUp",
674 KeyCode::ArrowDown => "ArrowDown",
675 KeyCode::ArrowLeft => "ArrowLeft",
676 KeyCode::ArrowRight => "ArrowRight",
677 KeyCode::ArrowUp => "ArrowUp",
678 KeyCode::NumLock => "NumLock",
679 KeyCode::Numpad0 => "Numpad0",
680 KeyCode::Numpad1 => "Numpad1",
681 KeyCode::Numpad2 => "Numpad2",
682 KeyCode::Numpad3 => "Numpad3",
683 KeyCode::Numpad4 => "Numpad4",
684 KeyCode::Numpad5 => "Numpad5",
685 KeyCode::Numpad6 => "Numpad6",
686 KeyCode::Numpad7 => "Numpad7",
687 KeyCode::Numpad8 => "Numpad8",
688 KeyCode::Numpad9 => "Numpad9",
689 KeyCode::NumpadAdd => "NumpadAdd",
690 KeyCode::NumpadBackspace => "NumpadBackspace",
691 KeyCode::NumpadClear => "NumpadClear",
692 KeyCode::NumpadClearEntry => "NumpadClearEntry",
693 KeyCode::NumpadComma => "NumpadComma",
694 KeyCode::NumpadDecimal => "NumpadDecimal",
695 KeyCode::NumpadDivide => "NumpadDivide",
696 KeyCode::NumpadEnter => "NumpadEnter",
697 KeyCode::NumpadEqual => "NumpadEqual",
698 KeyCode::NumpadHash => "NumpadHash",
699 KeyCode::NumpadMemoryAdd => "NumpadMemoryAdd",
700 KeyCode::NumpadMemoryClear => "NumpadMemoryClear",
701 KeyCode::NumpadMemoryRecall => "NumpadMemoryRecall",
702 KeyCode::NumpadMemoryStore => "NumpadMemoryStore",
703 KeyCode::NumpadMemorySubtract => "NumpadMemorySubtract",
704 KeyCode::NumpadMultiply => "NumpadMultiply",
705 KeyCode::NumpadParenLeft => "NumpadParenLeft",
706 KeyCode::NumpadParenRight => "NumpadParenRight",
707 KeyCode::NumpadStar => "NumpadStar",
708 KeyCode::NumpadSubtract => "NumpadSubtract",
709 KeyCode::Escape => "Escape",
710 KeyCode::Fn => "Fn",
711 KeyCode::FnLock => "FnLock",
712 KeyCode::PrintScreen => "PrintScreen",
713 KeyCode::ScrollLock => "ScrollLock",
714 KeyCode::Pause => "Pause",
715 KeyCode::BrowserBack => "BrowserBack",
716 KeyCode::BrowserFavorites => "BrowserFavorites",
717 KeyCode::BrowserForward => "BrowserForward",
718 KeyCode::BrowserHome => "BrowserHome",
719 KeyCode::BrowserRefresh => "BrowserRefresh",
720 KeyCode::BrowserSearch => "BrowserSearch",
721 KeyCode::BrowserStop => "BrowserStop",
722 KeyCode::Eject => "Eject",
723 KeyCode::LaunchApp1 => "LaunchApp1",
724 KeyCode::LaunchApp2 => "LaunchApp2",
725 KeyCode::LaunchMail => "LaunchMail",
726 KeyCode::MediaPlayPause => "MediaPlayPause",
727 KeyCode::MediaSelect => "MediaSelect",
728 KeyCode::MediaStop => "MediaStop",
729 KeyCode::MediaTrackNext => "MediaTrackNext",
730 KeyCode::MediaTrackPrevious => "MediaTrackPrevious",
731 KeyCode::Power => "Power",
732 KeyCode::Sleep => "Sleep",
733 KeyCode::AudioVolumeDown => "AudioVolumeDown",
734 KeyCode::AudioVolumeMute => "AudioVolumeMute",
735 KeyCode::AudioVolumeUp => "AudioVolumeUp",
736 KeyCode::WakeUp => "WakeUp",
737 KeyCode::Meta => "Meta",
738 KeyCode::Hyper => "Hyper",
739 KeyCode::Turbo => "Turbo",
740 KeyCode::Abort => "Abort",
741 KeyCode::Resume => "Resume",
742 KeyCode::Suspend => "Suspend",
743 KeyCode::Again => "Again",
744 KeyCode::Copy => "Copy",
745 KeyCode::Cut => "Cut",
746 KeyCode::Find => "Find",
747 KeyCode::Open => "Open",
748 KeyCode::Paste => "Paste",
749 KeyCode::Props => "Props",
750 KeyCode::Select => "Select",
751 KeyCode::Undo => "Undo",
752 KeyCode::Hiragana => "Hiragana",
753 KeyCode::Katakana => "Katakana",
754 KeyCode::F1 => "F1",
755 KeyCode::F2 => "F2",
756 KeyCode::F3 => "F3",
757 KeyCode::F4 => "F4",
758 KeyCode::F5 => "F5",
759 KeyCode::F6 => "F6",
760 KeyCode::F7 => "F7",
761 KeyCode::F8 => "F8",
762 KeyCode::F9 => "F9",
763 KeyCode::F10 => "F10",
764 KeyCode::F11 => "F11",
765 KeyCode::F12 => "F12",
766 KeyCode::F13 => "F13",
767 KeyCode::F14 => "F14",
768 KeyCode::F15 => "F15",
769 KeyCode::F16 => "F16",
770 KeyCode::F17 => "F17",
771 KeyCode::F18 => "F18",
772 KeyCode::F19 => "F19",
773 KeyCode::F20 => "F20",
774 KeyCode::F21 => "F21",
775 KeyCode::F22 => "F22",
776 KeyCode::F23 => "F23",
777 KeyCode::F24 => "F24",
778 KeyCode::F25 => "F25",
779 KeyCode::F26 => "F26",
780 KeyCode::F27 => "F27",
781 KeyCode::F28 => "F28",
782 KeyCode::F29 => "F29",
783 KeyCode::F30 => "F30",
784 KeyCode::F31 => "F31",
785 KeyCode::F32 => "F32",
786 KeyCode::F33 => "F33",
787 KeyCode::F34 => "F34",
788 KeyCode::F35 => "F35",
789 _ => "Unknown",
790 }
791}
792
793#[allow(clippy::manual_map)]
795pub fn into_any_arc<T: Any + Send + Sync>(
796 opt: Option<Arc<T>>,
797) -> Option<Arc<dyn Any + Send + Sync>> {
798 match opt {
799 Some(r) => Some(r),
800 None => None,
801 }
802}
803
804pub fn vec3_f16_from_f32(v: Vector3<f32>) -> Vector3<f16> {
806 v.map(f16::from_f32)
807}
808
809pub fn vec3_f32_from_f16(v: Vector3<f16>) -> Vector3<f32> {
811 v.map(|v| v.to_f32())
812}