summaryrefslogtreecommitdiff
path: root/pixel-client/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'pixel-client/src/main.rs')
-rw-r--r--pixel-client/src/main.rs43
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),
+ _ => (),
+ },
_ => {}
}
}