diff options
Diffstat (limited to 'pixel-client')
| -rw-r--r-- | pixel-client/src/config.rs | 2 | ||||
| -rw-r--r-- | pixel-client/src/game.rs | 5 | ||||
| -rw-r--r-- | pixel-client/src/main.rs | 19 | ||||
| -rw-r--r-- | pixel-client/src/menu/main.rs | 6 | ||||
| -rw-r--r-- | pixel-client/src/menu/settings.rs | 40 | 
5 files changed, 56 insertions, 16 deletions
| diff --git a/pixel-client/src/config.rs b/pixel-client/src/config.rs index 8f051b99..4d50ae10 100644 --- a/pixel-client/src/config.rs +++ b/pixel-client/src/config.rs @@ -25,7 +25,7 @@ use std::{  #[derive(Serialize, Deserialize)]  pub struct Config { -    username: String, +    pub username: String,  }  impl Config { diff --git a/pixel-client/src/game.rs b/pixel-client/src/game.rs index 0a0fc22d..318b9a02 100644 --- a/pixel-client/src/game.rs +++ b/pixel-client/src/game.rs @@ -16,6 +16,7 @@  */  use crate::{ +    config::Config,      helper::InterpolateExt,      render::{          misc::MiscTextures, @@ -82,10 +83,10 @@ pub struct Item {  }  impl Game { -    pub fn new(mut network: Network, layout: &AtlasLayout) -> Self { +    pub fn new(mut network: Network, config: &Config, layout: &AtlasLayout) -> Self {          network.queue_out.push_back(PacketS::Join {              id: None, -            name: "pixel".to_string(), +            name: config.username.clone(),              character: 0,          }); diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs index 24421994..a073d0ed 100644 --- a/pixel-client/src/main.rs +++ b/pixel-client/src/main.rs @@ -16,7 +16,9 @@  */  #![feature(map_many_mut, path_add_extension)] +use anyhow::Result;  use clap::{Parser, Subcommand}; +use config::Config;  use game::Game;  use hurrycurry_client_lib::network::sync::Network;  use hurrycurry_protocol::glam::Vec2; @@ -57,10 +59,11 @@ pub enum State {      Quit,  } -fn main() { +fn main() -> Result<()> {      env_logger::init_from_env("LOG");      let args = Args::parse(); +    let mut config = Config::load()?;      rustls::crypto::ring::default_provider()          .install_default() @@ -93,6 +96,7 @@ fn main() {          Action::Menu => State::MainMenu(MainMenu::new(renderer.atlas_layout())),          Action::Join { server_address } => State::Ingame(Box::new(Game::new(              Network::connect(&server_address).unwrap(), +            &config,              renderer.atlas_layout(),          ))),      }; @@ -108,24 +112,25 @@ fn main() {          let keyboard = KeyboardState::new(&events);          let mouse = MouseState::new(&events); -        let dt = last_tick.elapsed().min(Duration::from_secs_f32(1. / 30.)); +        let actual_dt = last_tick.elapsed(); +        last_tick += actual_dt; +        let dt = actual_dt.min(Duration::from_secs_f32(1. / 30.)); +          let next = match &mut state {              State::Ingame(x) => x.tick(dt.as_secs_f32(), &keyboard, renderer.atlas_layout()),              State::MainMenu(x) => {                  x.tick(dt.as_secs_f32(), &keyboard, &mouse, renderer.atlas_layout())              } -            State::Quit => break, +            State::Quit => break Ok(()),          };          if let Some(next) = next {              state = *next;          } -        last_tick += dt; -          renderer.set_ui_view(4.);          match &mut state {              State::Ingame(x) => x.draw(&mut renderer), -            State::MainMenu(x) => x.draw(&mut renderer), +            State::MainMenu(x) => x.draw(&mut renderer, &mut config),              State::Quit => (),          } @@ -137,7 +142,7 @@ fn main() {          for event in events.poll_iter() {              match event { -                Event::Quit { .. } => break 'mainloop, +                Event::Quit { .. } => break 'mainloop Ok(()),                  Event::KeyUp {                      keycode: Some(keycode),                      .. 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;      }  } | 
