Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update winit to 0.29.10 #356

Merged
merged 1 commit into from
Feb 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ server = { path = "../server" }
tracing = "0.1.10"
ash = { version = "0.37.1", features = ["loaded"] }
lahar = { git = "https://github.com/Ralith/lahar", rev = "88abd75e41d04c3a4199d95f581cb135f5962844" }
winit = "0.28.1"
winit = { version = "0.29.10", features = ["rwh_05"] }
ash-window = "0.12.0"
raw-window-handle = "0.5.0"
raw-window-handle = { version = "0.5.0", features = ["std"] }
directories = "5.0.1"
vk-shader-macros = "0.2.5"
nalgebra = { workspace = true }
Expand Down
128 changes: 66 additions & 62 deletions client/src/graphics/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ use ash::{extensions::khr, vk};
use lahar::DedicatedImage;
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle};
use tracing::{error, info};
use winit::event::KeyEvent;
use winit::keyboard::{KeyCode, PhysicalKey};
use winit::{
dpi::PhysicalSize,
event::{
DeviceEvent, ElementState, Event, KeyboardInput, MouseButton, VirtualKeyCode, WindowEvent,
},
event_loop::{ControlFlow, EventLoop},
event::{DeviceEvent, ElementState, Event, MouseButton, WindowEvent},
event_loop::EventLoop,
window::{CursorGrabMode, Window as WinitWindow, WindowBuilder},
};

Expand All @@ -27,7 +27,7 @@ pub struct EarlyWindow {

impl EarlyWindow {
pub fn new() -> Self {
let event_loop = EventLoop::new();
let event_loop = EventLoop::new().unwrap();
let window = WindowBuilder::new()
.with_title("hypermine")
.build(&event_loop)
Expand Down Expand Up @@ -105,7 +105,7 @@ impl Window {
}

/// Run the event loop until process exit
pub fn run(mut self, gfx: Arc<Base>) -> ! {
pub fn run(mut self, gfx: Arc<Base>) {
// Allocate the presentable images we'll be rendering to
self.swapchain = Some(SwapchainMgr::new(
&self,
Expand All @@ -128,34 +128,9 @@ impl Window {
self.event_loop
.take()
.unwrap()
.run(move |event, _, control_flow| match event {
Event::MainEventsCleared => {
while let Ok(msg) = self.net.incoming.try_recv() {
self.handle_net(msg);
}

if let Some(sim) = self.sim.as_mut() {
let this_frame = Instant::now();
let dt = this_frame - last_frame;
sim.set_movement_input(na::Vector3::new(
right as u8 as f32 - left as u8 as f32,
up as u8 as f32 - down as u8 as f32,
back as u8 as f32 - forward as u8 as f32,
));
sim.set_jump_held(jump);

sim.look(
0.0,
0.0,
2.0 * (anticlockwise as u8 as f32 - clockwise as u8 as f32)
* dt.as_secs_f32(),
);

sim.step(dt, &mut self.net);
last_frame = this_frame;
}

self.draw();
.run(move |event, window_target| match event {
Event::AboutToWait => {
self.window.request_redraw();
}
Event::DeviceEvent { event, .. } => match event {
DeviceEvent::MouseMotion { delta } if mouse_captured => {
Expand All @@ -171,6 +146,34 @@ impl Window {
_ => {}
},
Event::WindowEvent { event, .. } => match event {
WindowEvent::RedrawRequested => {
while let Ok(msg) = self.net.incoming.try_recv() {
self.handle_net(msg);
}

if let Some(sim) = self.sim.as_mut() {
let this_frame = Instant::now();
let dt = this_frame - last_frame;
sim.set_movement_input(na::Vector3::new(
right as u8 as f32 - left as u8 as f32,
up as u8 as f32 - down as u8 as f32,
back as u8 as f32 - forward as u8 as f32,
));
sim.set_jump_held(jump);

sim.look(
0.0,
0.0,
2.0 * (anticlockwise as u8 as f32 - clockwise as u8 as f32)
* dt.as_secs_f32(),
);

sim.step(dt, &mut self.net);
last_frame = this_frame;
}

self.draw();
}
WindowEvent::Resized(_) => {
// Some environments may not emit the vulkan signals that recommend or
// require surface reconstruction, so we need to check for messages from the
Expand All @@ -180,7 +183,7 @@ impl Window {
}
WindowEvent::CloseRequested => {
info!("exiting due to closed window");
*control_flow = ControlFlow::Exit;
window_target.exit();
}
WindowEvent::MouseInput {
button: MouseButton::Left,
Expand Down Expand Up @@ -211,52 +214,52 @@ impl Window {
}
}
WindowEvent::KeyboardInput {
input:
KeyboardInput {
event:
KeyEvent {
state,
virtual_keycode: Some(key),
physical_key: PhysicalKey::Code(key),
..
},
..
} => match key {
VirtualKeyCode::W => {
KeyCode::KeyW => {
forward = state == ElementState::Pressed;
}
VirtualKeyCode::A => {
KeyCode::KeyA => {
left = state == ElementState::Pressed;
}
VirtualKeyCode::S => {
KeyCode::KeyS => {
back = state == ElementState::Pressed;
}
VirtualKeyCode::D => {
KeyCode::KeyD => {
right = state == ElementState::Pressed;
}
VirtualKeyCode::Q => {
KeyCode::KeyQ => {
anticlockwise = state == ElementState::Pressed;
}
VirtualKeyCode::E => {
KeyCode::KeyE => {
clockwise = state == ElementState::Pressed;
}
VirtualKeyCode::R => {
KeyCode::KeyR => {
up = state == ElementState::Pressed;
}
VirtualKeyCode::F => {
KeyCode::KeyF => {
down = state == ElementState::Pressed;
}
VirtualKeyCode::Space => {
KeyCode::Space => {
if let Some(sim) = self.sim.as_mut() {
if !jump && state == ElementState::Pressed {
sim.set_jump_pressed_true();
}
jump = state == ElementState::Pressed;
}
}
VirtualKeyCode::V if state == ElementState::Pressed => {
KeyCode::KeyV if state == ElementState::Pressed => {
if let Some(sim) = self.sim.as_mut() {
sim.toggle_no_clip();
}
}
VirtualKeyCode::Escape => {
KeyCode::Escape => {
let _ = self.window.set_cursor_grab(CursorGrabMode::None);
self.window.set_cursor_visible(true);
mouse_captured = false;
Expand All @@ -280,11 +283,12 @@ impl Window {
}
_ => {}
},
Event::LoopDestroyed => {
Event::LoopExiting => {
self.metrics.report();
}
_ => {}
});
})
.unwrap();
}

fn handle_net(&mut self, msg: net::Message) {
Expand Down Expand Up @@ -364,18 +368,18 @@ impl Window {
}
}

fn number_key_to_index(key: VirtualKeyCode) -> Option<usize> {
fn number_key_to_index(key: KeyCode) -> Option<usize> {
match key {
VirtualKeyCode::Key1 => Some(0),
VirtualKeyCode::Key2 => Some(1),
VirtualKeyCode::Key3 => Some(2),
VirtualKeyCode::Key4 => Some(3),
VirtualKeyCode::Key5 => Some(4),
VirtualKeyCode::Key6 => Some(5),
VirtualKeyCode::Key7 => Some(6),
VirtualKeyCode::Key8 => Some(7),
VirtualKeyCode::Key9 => Some(8),
VirtualKeyCode::Key0 => Some(9),
KeyCode::Digit1 => Some(0),
KeyCode::Digit2 => Some(1),
KeyCode::Digit3 => Some(2),
KeyCode::Digit4 => Some(3),
KeyCode::Digit5 => Some(4),
KeyCode::Digit6 => Some(5),
KeyCode::Digit7 => Some(6),
KeyCode::Digit8 => Some(7),
KeyCode::Digit9 => Some(8),
KeyCode::Digit0 => Some(9),
_ => None,
}
}
Expand Down
Loading