diff options
Diffstat (limited to 'pixel-client/src/menu')
-rw-r--r-- | pixel-client/src/menu/main.rs | 6 | ||||
-rw-r--r-- | pixel-client/src/menu/settings.rs | 40 |
2 files changed, 40 insertions, 6 deletions
diff --git a/pixel-client/src/menu/main.rs b/pixel-client/src/menu/main.rs index 54b0fe9c..7045931e 100644 --- a/pixel-client/src/menu/main.rs +++ b/pixel-client/src/menu/main.rs @@ -17,6 +17,7 @@ */ use super::{background::MenuBackground, credits::CreditsMenu, settings::SettingsMenu}; use crate::{ + config::Config, game::Game, render::{sprite::SpriteDraw, AtlasLayout, Renderer}, ui::UiState, @@ -66,12 +67,12 @@ impl MainMenu { pub fn keyboard_event(&mut self, keycode: Keycode, down: bool) { self.ui_state.keyboard_event(keycode, down); } - pub fn draw(&mut self, ctx: &mut Renderer) { + pub fn draw(&mut self, ctx: &mut Renderer, config: &mut Config) { self.background.draw(ctx); self.ui_state.draw(ctx, |ui| { if let Some(settings) = &mut self.settings { - if settings.draw(ui) { + if settings.draw(ui, config) { self.settings = None; } return; @@ -85,6 +86,7 @@ impl MainMenu { if ui.button(80., "Join") { self.next_state = Some(Box::new(State::Ingame(Box::new(Game::new( Network::connect(&self.server_address).unwrap(), + &config, ui.renderer.atlas_layout(), ))))) } diff --git a/pixel-client/src/menu/settings.rs b/pixel-client/src/menu/settings.rs index 90668039..aef56f2f 100644 --- a/pixel-client/src/menu/settings.rs +++ b/pixel-client/src/menu/settings.rs @@ -15,7 +15,9 @@ along with this program. If not, see <https://www.gnu.org/licenses/>. */ -use crate::ui::Ui; +use crate::{config::Config, render::sprite::SpriteDraw, ui::Ui}; +use hurrycurry_protocol::glam::Vec2; +use log::warn; pub struct Settings { pub username: String, @@ -25,9 +27,39 @@ pub struct Settings { pub struct SettingsMenu {} impl SettingsMenu { - pub fn draw(&mut self, ui: &mut Ui) -> bool { - ui.text("Settings placeholder"); + pub fn draw(&mut self, ui: &mut Ui, config: &mut Config) -> bool { + ui.renderer.draw_ui(SpriteDraw::overlay( + ui.renderer.misc_textures.solid, + Vec2::ZERO, + ui.renderer.ui_size, + Some([0, 0, 0, 150]), + )); - return ui.button(80., "Back"); + let mut back = false; + + ui.horizontal(|ui| { + ui.advance(Vec2::splat(20.)); + ui.vertical(|ui| { + ui.advance(Vec2::splat(10.)); + ui.text("Settings"); + + ui.horizontal(|ui| { + ui.text("Username: "); + ui.textedit(100., &mut config.username); + }); + + ui.advance(ui.get_remaining() - Vec2::Y * 30.); + + if ui.button(80., "Back") { + if let Err(e) = config.save() { + warn!("cannot save config: {e}"); + } else { + back = true + } + } + }); + }); + + return back; } } |