diff options
-rw-r--r-- | pixel-client/src/main.rs | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs index e3aaa5cc..a70dca04 100644 --- a/pixel-client/src/main.rs +++ b/pixel-client/src/main.rs @@ -1,3 +1,5 @@ +use anyhow::anyhow; +use clap::Parser; /* Hurry Curry! - a game about cooking Copyright 2024 metamuffin @@ -16,7 +18,7 @@ */ use game::Game; -use hurrycurry_protocol::glam::Vec2; +use hurrycurry_protocol::glam::{UVec2, Vec2}; use network::Network; use render::SpriteRenderer; use sdl2::{ @@ -24,7 +26,10 @@ use sdl2::{ keyboard::{KeyboardState, Keycode}, pixels::Color, }; -use std::time::{Duration, Instant}; +use std::{ + str::FromStr, + time::{Duration, Instant}, +}; pub mod game; pub mod helper; @@ -32,9 +37,30 @@ pub mod network; pub mod render; pub mod tilemap; +#[derive(Debug, Parser)] +pub struct Args { + #[arg(default_value = "ws://127.0.0.1/")] + server_address: String, + + #[arg(short = 'r', long, default_value = "320x240")] + logical_resolution: Resolution, +} + +#[derive(Debug, Clone)] +struct Resolution(UVec2); +impl FromStr for Resolution { + type Err = anyhow::Error; + fn from_str(s: &str) -> Result<Self, Self::Err> { + let (x, y) = s.split_once("x").ok_or(anyhow!("sep missing"))?; + Ok(Resolution(UVec2::new(x.parse()?, y.parse()?))) + } +} + fn main() { env_logger::init_from_env("LOG"); + let args = Args::parse(); + let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); @@ -54,7 +80,7 @@ fn main() { .unwrap(); let texture_creator = canvas.texture_creator(); - let mut net = Network::connect("ws://127.0.0.1/").unwrap(); + let mut net = Network::connect(&args.server_address).unwrap(); let mut renderer = SpriteRenderer::init(&texture_creator); let mut game = Game::new(&renderer.atlas_layout()); @@ -67,7 +93,9 @@ fn main() { let mut last_tick = Instant::now(); - canvas.set_logical_size(320, 240).unwrap(); + canvas + .set_logical_size(args.logical_resolution.0.x, args.logical_resolution.0.y) + .unwrap(); 'mainloop: loop { net.poll(); |