aboutsummaryrefslogtreecommitdiff
path: root/pixel-client/src
diff options
context:
space:
mode:
Diffstat (limited to 'pixel-client/src')
-rw-r--r--pixel-client/src/main.rs36
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();