summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gfx.rs56
-rw-r--r--src/gfx/map.rs19
2 files changed, 46 insertions, 29 deletions
diff --git a/src/gfx.rs b/src/gfx.rs
index e3fb073..c86b351 100644
--- a/src/gfx.rs
+++ b/src/gfx.rs
@@ -22,11 +22,6 @@ pub async fn run(
.build(&event_loop)
.unwrap();
- window
- .set_cursor_grab(CursorGrabMode::Locked)
- .or_else(|_e| window.set_cursor_grab(CursorGrabMode::Confined))
- .unwrap();
-
window.set_cursor_visible(false);
let mut state = state::State::new(&window).await;
@@ -37,6 +32,8 @@ pub async fn run(
let mut last_frame = Instant::now();
+ let mut game_paused = false;
+
event_loop.run_return(move |event, _, flow| match event {
MainEventsCleared => window.request_redraw(),
RedrawRequested(id) if id == window.id() => {
@@ -78,21 +75,28 @@ pub async fn run(
..
} => {
use fps_camera::Actions;
- use winit::event::{ElementState::*, VirtualKeyCode as Key};
+ use winit::event::{ElementState, VirtualKeyCode as Key};
+
+ if key == &Key::Escape && key_state == &ElementState::Pressed {
+ game_paused = !game_paused;
+ window.set_cursor_visible(game_paused);
+ }
- let actions = match key {
- Key::W => Actions::MOVE_FORWARD,
- Key::A => Actions::STRAFE_LEFT,
- Key::S => Actions::MOVE_BACKWARD,
- Key::D => Actions::STRAFE_RIGHT,
- Key::Space => Actions::FLY_UP,
- Key::LShift => Actions::FLY_DOWN,
- _ => Actions::empty(),
- };
+ if !game_paused {
+ let actions = match key {
+ Key::W => Actions::MOVE_FORWARD,
+ Key::A => Actions::STRAFE_LEFT,
+ Key::S => Actions::MOVE_BACKWARD,
+ Key::D => Actions::STRAFE_RIGHT,
+ Key::Space => Actions::FLY_UP,
+ Key::LShift => Actions::FLY_DOWN,
+ _ => Actions::empty(),
+ };
- match key_state {
- Pressed => state.camera.enable_actions(actions),
- Released => state.camera.disable_action(actions),
+ match key_state {
+ ElementState::Pressed => state.camera.enable_actions(actions),
+ ElementState::Released => state.camera.disable_action(actions),
+ }
}
}
_ => {}
@@ -101,13 +105,15 @@ pub async fn run(
event: MouseMotion { delta },
..
} => {
- state.camera.update_mouse(delta.0 as f32, delta.1 as f32);
- window
- .set_cursor_position(winit::dpi::PhysicalPosition::new(
- state.config.width / 2,
- state.config.height / 2,
- ))
- .ok();
+ if !game_paused {
+ state.camera.update_mouse(delta.0 as f32, delta.1 as f32);
+ window
+ .set_cursor_position(winit::dpi::PhysicalPosition::new(
+ state.config.width / 2,
+ state.config.height / 2,
+ ))
+ .ok();
+ }
}
UserEvent(event) => match event {
Close => *flow = ExitWithCode(0),
diff --git a/src/gfx/map.rs b/src/gfx/map.rs
index d95a4d2..dbedb77 100644
--- a/src/gfx/map.rs
+++ b/src/gfx/map.rs
@@ -19,11 +19,12 @@ pub struct MapRender {
struct Vertex {
pos: [f32; 3],
tex_coords: [f32; 2],
+ light: f32,
}
impl Vertex {
- const ATTRIBS: [wgpu::VertexAttribute; 2] =
- wgpu::vertex_attr_array![0 => Float32x3, 1 => Float32x2];
+ const ATTRIBS: [wgpu::VertexAttribute; 3] =
+ wgpu::vertex_attr_array![0 => Float32x3, 1 => Float32x2, 2 => Float32];
fn desc<'a>() -> wgpu::VertexBufferLayout<'a> {
wgpu::VertexBufferLayout {
@@ -62,11 +63,20 @@ impl MapRender {
};
use lerp::Lerp;
- use mt_net::DrawType;
+ use mt_net::{DrawType, Param1Type};
use std::array::from_fn as array;
match def.draw_type {
- DrawType::Cube => {
+ DrawType::Cube | DrawType::AllFaces | DrawType::AllFacesOpt => {
+ let light = match def.param1_type {
+ Param1Type::Light => {
+ println!("{}", block.param_1[index]);
+
+ block.param_1[index] as f32 / 15.0
+ }
+ _ => 1.0,
+ };
+
let pos: [i16; 3] = array(|i| ((index >> (4 * i)) & 0xf) as i16);
for (f, face) in CUBE.iter().enumerate() {
let dir = FACE_DIR[f];
@@ -98,6 +108,7 @@ impl MapRender {
vertices.push(Vertex {
pos: array(|i| pos[i] as f32 - 8.5 + vertex.0[i]),
tex_coords: array(|i| rect[i].start.lerp(rect[i].end, vertex.1[i])),
+ light,
})
}
}