Implemented 3D support and camera
This commit is contained in:
parent
08e49e1b22
commit
7257b0a648
@ -71,7 +71,7 @@ pub async fn run() {
|
||||
|
||||
state.set_instances(instances);
|
||||
})
|
||||
.on_input(move |_state, event| {
|
||||
.on_input(move |state, event| {
|
||||
if event.state == KeyState::Pressed {
|
||||
return match event.key {
|
||||
Key::Period => {
|
||||
@ -89,6 +89,10 @@ pub async fn run() {
|
||||
sim.reset_timewarp();
|
||||
println!("Timewarp: {}", sim.get_timewarp());
|
||||
}
|
||||
Key::ArrowLeft => state.camera_mut().rotate_yaw_pitch(-5.0, 0.0),
|
||||
Key::ArrowRight => state.camera_mut().rotate_yaw_pitch(5.0, 0.0),
|
||||
Key::ArrowUp => state.camera_mut().zoom(-0.2),
|
||||
Key::ArrowDown => state.camera_mut().zoom(0.2),
|
||||
_ => {}
|
||||
};
|
||||
}
|
||||
|
||||
@ -64,9 +64,11 @@ impl<'a> ApplicationHandler for StateApplication<'a> {
|
||||
self.state.as_mut().unwrap().render().unwrap();
|
||||
}
|
||||
WindowEvent::KeyboardInput { event, .. } => {
|
||||
println!("Keyboard input event: {:?}", event);
|
||||
if let Some(state) = self.state.as_mut() {
|
||||
if let Some(input_fn) = self.input_fn.as_mut() {
|
||||
let key_event = from_winit_input(&event, self.modifiers);
|
||||
println!("Keyboard input: {:?}", key_event);
|
||||
input_fn(state, &key_event);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
use log::info;
|
||||
use winit::event::{ElementState, KeyEvent, Modifiers};
|
||||
use winit::keyboard::{Key as WinitKey, ModifiersKeyState};
|
||||
|
||||
@ -63,6 +64,7 @@ pub struct InputEvent {
|
||||
}
|
||||
|
||||
pub fn from_winit_input(event: &KeyEvent, modifiers: Modifiers) -> InputEvent {
|
||||
println!("Converting Winit key event: {:?}", event);
|
||||
InputEvent {
|
||||
key: map_winit_key(&event.logical_key),
|
||||
state: match event.state {
|
||||
@ -85,6 +87,7 @@ pub fn from_winit_input(event: &KeyEvent, modifiers: Modifiers) -> InputEvent {
|
||||
|
||||
pub fn map_winit_key(key: &WinitKey) -> Key {
|
||||
use Key::*;
|
||||
use winit::keyboard::NamedKey;
|
||||
match key {
|
||||
WinitKey::Character(s) => match s.as_str() {
|
||||
"a" | "A" => A,
|
||||
@ -137,53 +140,38 @@ pub fn map_winit_key(key: &WinitKey) -> Key {
|
||||
"=" => Equal,
|
||||
_ => Unknown,
|
||||
},
|
||||
WinitKey::Named(n) => match n.to_text().unwrap_or("") {
|
||||
"ArrowUp" => ArrowUp,
|
||||
"ArrowDown" => ArrowDown,
|
||||
"ArrowLeft" => ArrowLeft,
|
||||
"ArrowRight" => ArrowRight,
|
||||
"Escape" => Escape,
|
||||
"Enter" => Enter,
|
||||
"Tab" => Tab,
|
||||
"Space" => Space,
|
||||
"Backspace" => Backspace,
|
||||
"Insert" => Insert,
|
||||
"Delete" => Delete,
|
||||
"Home" => Home,
|
||||
"End" => End,
|
||||
"PageUp" => PageUp,
|
||||
"PageDown" => PageDown,
|
||||
"Shift" => Shift,
|
||||
"Control" => Control,
|
||||
"Alt" => Alt,
|
||||
"Super" => Super,
|
||||
"F1" => F1,
|
||||
"F2" => F2,
|
||||
"F3" => F3,
|
||||
"F4" => F4,
|
||||
"F5" => F5,
|
||||
"F6" => F6,
|
||||
"F7" => F7,
|
||||
"F8" => F8,
|
||||
"F9" => F9,
|
||||
"F10" => F10,
|
||||
"F11" => F11,
|
||||
"F12" => F12,
|
||||
"Numpad0" => Numpad0,
|
||||
"Numpad1" => Numpad1,
|
||||
"Numpad2" => Numpad2,
|
||||
"Numpad3" => Numpad3,
|
||||
"Numpad4" => Numpad4,
|
||||
"Numpad5" => Numpad5,
|
||||
"Numpad6" => Numpad6,
|
||||
"Numpad7" => Numpad7,
|
||||
"Numpad8" => Numpad8,
|
||||
"Numpad9" => Numpad9,
|
||||
"NumpadAdd" => NumpadAdd,
|
||||
"NumpadSubtract" => NumpadSubtract,
|
||||
"NumpadMultiply" => NumpadMultiply,
|
||||
"NumpadDivide" => NumpadDivide,
|
||||
"NumpadEnter" => NumpadEnter,
|
||||
WinitKey::Named(named_key) => match named_key {
|
||||
NamedKey::ArrowUp => ArrowUp,
|
||||
NamedKey::ArrowDown => ArrowDown,
|
||||
NamedKey::ArrowLeft => ArrowLeft,
|
||||
NamedKey::ArrowRight => ArrowRight,
|
||||
NamedKey::Escape => Escape,
|
||||
NamedKey::Enter => Enter,
|
||||
NamedKey::Tab => Tab,
|
||||
NamedKey::Space => Space,
|
||||
NamedKey::Backspace => Backspace,
|
||||
NamedKey::Insert => Insert,
|
||||
NamedKey::Delete => Delete,
|
||||
NamedKey::Home => Home,
|
||||
NamedKey::End => End,
|
||||
NamedKey::PageUp => PageUp,
|
||||
NamedKey::PageDown => PageDown,
|
||||
NamedKey::Shift => Shift,
|
||||
NamedKey::Control => Control,
|
||||
NamedKey::Alt => Alt,
|
||||
NamedKey::Super => Super,
|
||||
NamedKey::F1 => F1,
|
||||
NamedKey::F2 => F2,
|
||||
NamedKey::F3 => F3,
|
||||
NamedKey::F4 => F4,
|
||||
NamedKey::F5 => F5,
|
||||
NamedKey::F6 => F6,
|
||||
NamedKey::F7 => F7,
|
||||
NamedKey::F8 => F8,
|
||||
NamedKey::F9 => F9,
|
||||
NamedKey::F10 => F10,
|
||||
NamedKey::F11 => F11,
|
||||
NamedKey::F12 => F12,
|
||||
_ => Unknown,
|
||||
},
|
||||
_ => Unknown,
|
||||
|
||||
@ -327,6 +327,12 @@ impl<'a> State<'a> {
|
||||
});
|
||||
let multisampled_view = multisampled_texture.create_view(&Default::default());
|
||||
|
||||
let view_proj = self.camera.build_view_projection_matrix();
|
||||
let globals = Globals {
|
||||
view_proj: view_proj.into(),
|
||||
};
|
||||
self.queue.write_buffer(&self.global_buffer, 0, bytemuck::cast_slice(&[globals]));
|
||||
|
||||
let mut encoder = self.device.create_command_encoder(&wgpu::CommandEncoderDescriptor {
|
||||
label: Some("Render Encoder"),
|
||||
});
|
||||
@ -403,4 +409,12 @@ impl<'a> State<'a> {
|
||||
pub fn window(&self) -> &Window {
|
||||
&self.window
|
||||
}
|
||||
|
||||
pub fn camera_mut(&mut self) -> &mut crate::camera::Camera {
|
||||
&mut self.camera
|
||||
}
|
||||
|
||||
pub fn camera(&self) -> &crate::camera::Camera {
|
||||
&self.camera
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user