diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-23 00:36:25 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-23 00:36:25 +0200 |
commit | e00fa55e4984377956a50ad980c53b43715bea6c (patch) | |
tree | fbeca868906397c5f0d6fef189899458e67512c7 /pixel-client/src/menu.rs | |
parent | ebc77dc48ef7f97ab946f334f642da9bf69a7e99 (diff) | |
download | hurrycurry-e00fa55e4984377956a50ad980c53b43715bea6c.tar hurrycurry-e00fa55e4984377956a50ad980c53b43715bea6c.tar.bz2 hurrycurry-e00fa55e4984377956a50ad980c53b43715bea6c.tar.zst |
pc: menu background
Diffstat (limited to 'pixel-client/src/menu.rs')
-rw-r--r-- | pixel-client/src/menu.rs | 57 |
1 files changed, 47 insertions, 10 deletions
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!"); } } |