diff options
Diffstat (limited to 'pixel-client/src/main.rs')
-rw-r--r-- | pixel-client/src/main.rs | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs index 8c140fc5..05e19194 100644 --- a/pixel-client/src/main.rs +++ b/pixel-client/src/main.rs @@ -22,11 +22,7 @@ use hurrycurry_protocol::glam::Vec2; use menu::Menu; use network::Network; use render::Renderer; -use sdl2::{ - event::Event, - keyboard::{KeyboardState, Keycode}, - pixels::Color, -}; +use sdl2::{event::Event, keyboard::KeyboardState, mouse::MouseState, pixels::Color}; use std::time::{Duration, Instant}; pub mod game; @@ -35,6 +31,7 @@ pub mod menu; pub mod network; pub mod render; pub mod tilemap; +pub mod ui; #[derive(Debug, Parser)] pub struct Args { @@ -52,9 +49,10 @@ pub enum Action { }, } -enum State { +pub enum State { Ingame(Box<Game>), Menu(Menu), + Quit, } fn main() { @@ -105,18 +103,25 @@ fn main() { renderer.size = Vec2::new(width as f32, height as f32); let keyboard = KeyboardState::new(&events); + let mouse = MouseState::new(&events); + let dt = last_tick.elapsed().min(Duration::from_secs_f32(1. / 30.)); - match &mut state { + let next = match &mut state { State::Ingame(x) => x.tick(dt.as_secs_f32(), &keyboard, renderer.atlas_layout()), - State::Menu(x) => x.tick(dt.as_secs_f32(), &keyboard, renderer.atlas_layout()), + State::Menu(x) => x.tick(dt.as_secs_f32(), &keyboard, &mouse, renderer.atlas_layout()), + State::Quit => break, + }; + if let Some(next) = next { + state = *next; } last_tick += dt; - renderer.ui_scale = Vec2::new(5., 5.); + renderer.set_ui_view(4.); match &mut state { State::Ingame(x) => x.draw(&mut renderer), State::Menu(x) => x.draw(&mut renderer), + State::Quit => (), } canvas.set_draw_color(Color::BLACK); @@ -126,11 +131,23 @@ fn main() { for event in events.poll_iter() { match event { - Event::Quit { .. } - | Event::KeyDown { - keycode: Option::Some(Keycode::Escape), + Event::Quit { .. } => break 'mainloop, + Event::KeyUp { + keycode: Some(keycode), + .. + } => match &mut state { + State::Ingame(_) => (), + State::Menu(menu) => menu.keyboard_event(keycode, false), + _ => (), + }, + Event::KeyDown { + keycode: Some(keycode), .. - } => break 'mainloop, + } => match &mut state { + State::Ingame(_) => (), + State::Menu(menu) => menu.keyboard_event(keycode, true), + _ => (), + }, _ => {} } } |