summaryrefslogtreecommitdiff
path: root/pixel-client
diff options
context:
space:
mode:
Diffstat (limited to 'pixel-client')
-rw-r--r--pixel-client/Cargo.toml1
-rw-r--r--pixel-client/src/main.rs2
-rw-r--r--pixel-client/src/menu.rs57
-rw-r--r--pixel-client/src/tilemap.rs2
4 files changed, 50 insertions, 12 deletions
diff --git a/pixel-client/Cargo.toml b/pixel-client/Cargo.toml
index dd46a9b6..b3daf9b0 100644
--- a/pixel-client/Cargo.toml
+++ b/pixel-client/Cargo.toml
@@ -14,3 +14,4 @@ env_logger = "0.11.3"
anyhow = "1.0.86"
clap = { version = "4.5.9", features = ["derive"] }
rustls = { version = "0.23.10", features = ["ring"] }
+rand = "0.9.0-alpha.1"
diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs
index 68c5b66a..0ebe7b44 100644
--- a/pixel-client/src/main.rs
+++ b/pixel-client/src/main.rs
@@ -88,7 +88,7 @@ fn main() {
let mut renderer = Renderer::init(&texture_creator);
let mut state = match args.action.unwrap_or_default() {
- Action::Menu => State::Menu(Menu::new()),
+ Action::Menu => State::Menu(Menu::new(renderer.atlas_layout())),
Action::Join { server_address } => State::Ingame(Box::new(Game::new(
Network::connect(&server_address).unwrap(),
renderer.atlas_layout(),
diff --git a/pixel-client/src/menu.rs b/pixel-client/src/menu.rs
index d9396e49..0fc0e880 100644
--- a/pixel-client/src/menu.rs
+++ b/pixel-client/src/menu.rs
@@ -1,21 +1,58 @@
-use crate::render::{AtlasLayout, Renderer};
-use hurrycurry_protocol::glam::Vec2;
+use crate::{
+ render::{AtlasLayout, Renderer},
+ tilemap::Tilemap,
+};
+use hurrycurry_protocol::{
+ glam::{IVec2, Vec2},
+ TileIndex,
+};
+use rand::{random, seq::IndexedRandom, thread_rng};
use sdl2::keyboard::KeyboardState;
-pub struct Menu {}
-
-impl Default for Menu {
- fn default() -> Self {
- Self::new()
- }
+#[derive(Debug)]
+pub struct Menu {
+ map: Tilemap,
}
impl Menu {
- pub fn new() -> Self {
- Self {}
+ pub fn new(layout: &AtlasLayout) -> Self {
+ let mut map = Tilemap::default();
+ map.init(
+ &[
+ "floor",
+ "tomato-crate",
+ "raw-steak-crate",
+ "table",
+ "chair",
+ "counter",
+ "sink",
+ "stove",
+ ]
+ .map(String::from),
+ layout,
+ );
+ static BUCKETS: &[&[usize]] = &[&[], &[0, 0, 0, 0, 1, 2], &[3, 4, 5], &[6, 7, 8]];
+
+ for x in -10..11 {
+ for y in -10..11 {
+ let p = Vec2::new(x as f32, y as f32);
+ let w = (-p.length() * 0.15).exp();
+ let k = ((random::<f32>() * w) * BUCKETS.len() as f32) as usize;
+ if let Some(ti) = BUCKETS[k.min(BUCKETS.len())].choose(&mut thread_rng()) {
+ map.set(IVec2::new(x, y), Some(TileIndex(*ti)), [None; 4])
+ }
+ }
+ }
+
+ Self { map }
}
pub fn tick(&mut self, _dt: f32, _keyboard: &KeyboardState, _layout: &AtlasLayout) {}
pub fn draw(&self, ctx: &mut Renderer) {
+ ctx.set_world_view(
+ ctx.size / ctx.get_world_scale() * Vec2::new(0.8, 0.2),
+ ctx.size.max_element() / 32. / 15.,
+ );
+ self.map.draw(ctx);
ctx.draw_text(Vec2::new(1., 1.), "Hello world!");
}
}
diff --git a/pixel-client/src/tilemap.rs b/pixel-client/src/tilemap.rs
index f52ffc1c..edab8b61 100644
--- a/pixel-client/src/tilemap.rs
+++ b/pixel-client/src/tilemap.rs
@@ -25,7 +25,7 @@ use crate::render::{
Renderer,
};
-#[derive(Default)]
+#[derive(Default, Debug)]
pub struct Tilemap {
connect_group_by_tile: Vec<Option<usize>>,
connect_members_by_group: Vec<HashSet<Option<TileIndex>>>,