parent
							
								
									7ba45849f3
								
							
						
					
					
						commit
						d004bce0c9
					
				@ -293,3 +293,4 @@ required-features = ["bevy_winit"]
 | 
				
			|||||||
name = "assets_wasm"
 | 
					name = "assets_wasm"
 | 
				
			||||||
path = "examples/wasm/assets_wasm.rs"
 | 
					path = "examples/wasm/assets_wasm.rs"
 | 
				
			||||||
required-features = ["bevy_winit"]
 | 
					required-features = ["bevy_winit"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -40,6 +40,8 @@ pub struct Window {
 | 
				
			|||||||
    vsync: bool,
 | 
					    vsync: bool,
 | 
				
			||||||
    resizable: bool,
 | 
					    resizable: bool,
 | 
				
			||||||
    decorations: bool,
 | 
					    decorations: bool,
 | 
				
			||||||
 | 
					    cursor_visible: bool,
 | 
				
			||||||
 | 
					    cursor_locked: bool,
 | 
				
			||||||
    mode: WindowMode,
 | 
					    mode: WindowMode,
 | 
				
			||||||
    #[cfg(target_arch = "wasm32")]
 | 
					    #[cfg(target_arch = "wasm32")]
 | 
				
			||||||
    pub canvas: Option<String>,
 | 
					    pub canvas: Option<String>,
 | 
				
			||||||
@ -68,6 +70,12 @@ pub enum WindowCommand {
 | 
				
			|||||||
    SetDecorations {
 | 
					    SetDecorations {
 | 
				
			||||||
        decorations: bool,
 | 
					        decorations: bool,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    SetCursorLockMode {
 | 
				
			||||||
 | 
					        locked: bool,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    SetCursorVisibility {
 | 
				
			||||||
 | 
					        visible: bool,
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Defines the way a window is displayed
 | 
					/// Defines the way a window is displayed
 | 
				
			||||||
@ -92,6 +100,8 @@ impl Window {
 | 
				
			|||||||
            vsync: window_descriptor.vsync,
 | 
					            vsync: window_descriptor.vsync,
 | 
				
			||||||
            resizable: window_descriptor.resizable,
 | 
					            resizable: window_descriptor.resizable,
 | 
				
			||||||
            decorations: window_descriptor.decorations,
 | 
					            decorations: window_descriptor.decorations,
 | 
				
			||||||
 | 
					            cursor_visible: window_descriptor.cursor_visible,
 | 
				
			||||||
 | 
					            cursor_locked: window_descriptor.cursor_locked,
 | 
				
			||||||
            mode: window_descriptor.mode,
 | 
					            mode: window_descriptor.mode,
 | 
				
			||||||
            #[cfg(target_arch = "wasm32")]
 | 
					            #[cfg(target_arch = "wasm32")]
 | 
				
			||||||
            canvas: window_descriptor.canvas.clone(),
 | 
					            canvas: window_descriptor.canvas.clone(),
 | 
				
			||||||
@ -165,6 +175,27 @@ impl Window {
 | 
				
			|||||||
            .push(WindowCommand::SetDecorations { decorations });
 | 
					            .push(WindowCommand::SetDecorations { decorations });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn cursor_locked(&self) -> bool {
 | 
				
			||||||
 | 
					        self.cursor_locked
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn set_cursor_lock_mode(&mut self, lock_mode: bool) {
 | 
				
			||||||
 | 
					        self.cursor_locked = lock_mode;
 | 
				
			||||||
 | 
					        self.command_queue
 | 
				
			||||||
 | 
					            .push(WindowCommand::SetCursorLockMode { locked: lock_mode });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn cursor_visible(&self) -> bool {
 | 
				
			||||||
 | 
					        self.cursor_visible
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn set_cursor_visibility(&mut self, visibile_mode: bool) {
 | 
				
			||||||
 | 
					        self.cursor_visible = visibile_mode;
 | 
				
			||||||
 | 
					        self.command_queue.push(WindowCommand::SetCursorVisibility {
 | 
				
			||||||
 | 
					            visible: visibile_mode,
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn mode(&self) -> WindowMode {
 | 
					    pub fn mode(&self) -> WindowMode {
 | 
				
			||||||
        self.mode
 | 
					        self.mode
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -191,6 +222,8 @@ pub struct WindowDescriptor {
 | 
				
			|||||||
    pub vsync: bool,
 | 
					    pub vsync: bool,
 | 
				
			||||||
    pub resizable: bool,
 | 
					    pub resizable: bool,
 | 
				
			||||||
    pub decorations: bool,
 | 
					    pub decorations: bool,
 | 
				
			||||||
 | 
					    pub cursor_visible: bool,
 | 
				
			||||||
 | 
					    pub cursor_locked: bool,
 | 
				
			||||||
    pub mode: WindowMode,
 | 
					    pub mode: WindowMode,
 | 
				
			||||||
    #[cfg(target_arch = "wasm32")]
 | 
					    #[cfg(target_arch = "wasm32")]
 | 
				
			||||||
    pub canvas: Option<String>,
 | 
					    pub canvas: Option<String>,
 | 
				
			||||||
@ -210,6 +243,8 @@ impl Default for WindowDescriptor {
 | 
				
			|||||||
            vsync: true,
 | 
					            vsync: true,
 | 
				
			||||||
            resizable: true,
 | 
					            resizable: true,
 | 
				
			||||||
            decorations: true,
 | 
					            decorations: true,
 | 
				
			||||||
 | 
					            cursor_locked: false,
 | 
				
			||||||
 | 
					            cursor_visible: true,
 | 
				
			||||||
            mode: WindowMode::Windowed,
 | 
					            mode: WindowMode::Windowed,
 | 
				
			||||||
            #[cfg(target_arch = "wasm32")]
 | 
					            #[cfg(target_arch = "wasm32")]
 | 
				
			||||||
            canvas: None,
 | 
					            canvas: None,
 | 
				
			||||||
 | 
				
			|||||||
@ -84,6 +84,14 @@ fn change_window(_: &mut World, resources: &mut Resources) {
 | 
				
			|||||||
                    let window = winit_windows.get_window(id).unwrap();
 | 
					                    let window = winit_windows.get_window(id).unwrap();
 | 
				
			||||||
                    window.set_decorations(decorations);
 | 
					                    window.set_decorations(decorations);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					                bevy_window::WindowCommand::SetCursorLockMode { locked } => {
 | 
				
			||||||
 | 
					                    let window = winit_windows.get_window(id).unwrap();
 | 
				
			||||||
 | 
					                    window.set_cursor_grab(locked).unwrap();
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                bevy_window::WindowCommand::SetCursorVisibility { visible } => {
 | 
				
			||||||
 | 
					                    let window = winit_windows.get_window(id).unwrap();
 | 
				
			||||||
 | 
					                    window.set_cursor_visible(visible);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,11 @@ impl WinitWindows {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        let winit_window = winit_window_builder.build(&event_loop).unwrap();
 | 
					        let winit_window = winit_window_builder.build(&event_loop).unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        winit_window
 | 
				
			||||||
 | 
					            .set_cursor_grab(window.cursor_locked())
 | 
				
			||||||
 | 
					            .unwrap();
 | 
				
			||||||
 | 
					        winit_window.set_cursor_visible(window.cursor_visible());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.window_id_to_winit
 | 
					        self.window_id_to_winit
 | 
				
			||||||
            .insert(window.id(), winit_window.id());
 | 
					            .insert(window.id(), winit_window.id());
 | 
				
			||||||
        self.winit_to_window_id
 | 
					        self.winit_to_window_id
 | 
				
			||||||
 | 
				
			|||||||
@ -13,6 +13,7 @@ fn main() {
 | 
				
			|||||||
        })
 | 
					        })
 | 
				
			||||||
        .add_default_plugins()
 | 
					        .add_default_plugins()
 | 
				
			||||||
        .add_system(change_title.system())
 | 
					        .add_system(change_title.system())
 | 
				
			||||||
 | 
					        .add_system(toggle_cursor.system())
 | 
				
			||||||
        .run();
 | 
					        .run();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,3 +25,12 @@ fn change_title(time: Res<Time>, mut windows: ResMut<Windows>) {
 | 
				
			|||||||
        time.seconds_since_startup.round()
 | 
					        time.seconds_since_startup.round()
 | 
				
			||||||
    ));
 | 
					    ));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// This system toggles the cursor's visibility when the space bar is pressed
 | 
				
			||||||
 | 
					fn toggle_cursor(input: Res<Input<KeyCode>>, mut windows: ResMut<Windows>) {
 | 
				
			||||||
 | 
					    let window = windows.get_primary_mut().unwrap();
 | 
				
			||||||
 | 
					    if input.just_pressed(KeyCode::Space) {
 | 
				
			||||||
 | 
					        window.set_cursor_lock_mode(!window.cursor_locked());
 | 
				
			||||||
 | 
					        window.set_cursor_visibility(!window.cursor_visible());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user