From 15c2cdb2efdf28f54ac2a3a6b48fab59d16c6c2e Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Thu, 18 Apr 2019 11:40:29 -0600 Subject: [PATCH 1/6] Add networksettings and integrate with main menu ui Former-commit-id: f04532e03f8262b9751ae4a68259637f7de0344c --- voxygen/src/main.rs | 2 +- voxygen/src/menu/main/mod.rs | 10 ++++++++-- voxygen/src/menu/main/ui.rs | 10 ++++++---- voxygen/src/settings.rs | 13 +++++++++++++ 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/voxygen/src/main.rs b/voxygen/src/main.rs index ecd6f5224a..160bbc7914 100644 --- a/voxygen/src/main.rs +++ b/voxygen/src/main.rs @@ -100,7 +100,7 @@ fn main() { // Set up the initial play state let mut states: Vec> = vec![Box::new(MainMenuState::new( - &mut global_state.window, + &mut global_state, ))]; states.last().map(|current_state| { log::info!("Started game with state '{}'", current_state.name()) diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index 9baba60a47..058bad125a 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -21,9 +21,9 @@ pub struct MainMenuState { impl MainMenuState { /// Create a new `MainMenuState` - pub fn new(window: &mut Window) -> Self { + pub fn new(global_state: &mut GlobalState) -> Self { Self { - main_menu_ui: MainMenuUi::new(window), + main_menu_ui: MainMenuUi::new(global_state), } } } @@ -92,6 +92,12 @@ impl PlayState for MainMenuState { username, server_address, } => { + let mut net_settings = &mut global_state.settings.networking; + net_settings.username = username.clone(); + if !net_settings.servers.contains(&server_address) { + net_settings.servers.push(server_address.clone()); + } + global_state.settings.save_to_file(); const DEFAULT_PORT: u16 = 59003; // Don't try to connect if there is already a connection in progress client_init = client_init.or(Some(ClientInit::new( diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index d14e75686e..030d96360d 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -3,6 +3,7 @@ use crate::{ ui::{self, ScaleMode, Ui}, window::Window, DEFAULT_PUBLIC_SERVER, + GlobalState, }; use common::{ assets, @@ -137,7 +138,9 @@ pub struct MainMenuUi { } impl MainMenuUi { - pub fn new(window: &mut Window) -> Self { + pub fn new(global_state: &mut GlobalState) -> Self { + let mut window = &mut global_state.window; + let networking = &global_state.settings.networking; let mut ui = Ui::new(window).unwrap(); // TODO: adjust/remove this, right now it is used to demonstrate window scaling functionality ui.scaling_mode(ScaleMode::RelativeToWindow([1920.0, 1080.0].into())); @@ -162,8 +165,8 @@ impl MainMenuUi { ids, font_metamorph, font_opensans, - username: "Username".to_string(), - server_address: DEFAULT_PUBLIC_SERVER.to_string(), + username: networking.username.clone(), + server_address, login_error: None, connecting: None, } @@ -352,7 +355,6 @@ impl MainMenuUi { .was_clicked() { singleplayer!(); - login!(); } // Quit if Button::image(self.imgs.button) diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs index 86d90cb446..9b4205972b 100644 --- a/voxygen/src/settings.rs +++ b/voxygen/src/settings.rs @@ -14,6 +14,7 @@ use std::default::Default; #[serde(default)] pub struct Settings { pub controls: ControlSettings, + pub networking: NetworkingSettings, } /// ControlSettings contains keybindings @@ -37,6 +38,13 @@ pub struct ControlSettings { pub toggle_interface: VirtualKeyCode, } +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct NetworkingSettings { + pub username: String, + pub servers: Vec, + pub default_server: usize, +} + impl Default for Settings { fn default() -> Self { Settings { @@ -58,6 +66,11 @@ impl Default for Settings { help: VirtualKeyCode::F1, toggle_interface: VirtualKeyCode::F2, }, + networking: NetworkingSettings { + username: "Username".to_string(), + servers: vec!("server.veloren.net".to_string()), + default_server: 0, + }, } } From d7c80d0afc09f19ec9a98b3f842cd139f1641153 Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Fri, 19 Apr 2019 05:14:05 -0600 Subject: [PATCH 2/6] Add basic UI to view saved servers Former-commit-id: 85cc946ac3684aaba64a03997790ef5ab06dbbd7 --- voxygen/src/menu/main/mod.rs | 2 +- voxygen/src/menu/main/ui.rs | 53 ++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/voxygen/src/menu/main/mod.rs b/voxygen/src/menu/main/mod.rs index 058bad125a..ed62409f1e 100644 --- a/voxygen/src/menu/main/mod.rs +++ b/voxygen/src/menu/main/mod.rs @@ -85,7 +85,7 @@ impl PlayState for MainMenuState { // Maintain the UI for event in self .main_menu_ui - .maintain(global_state.window.renderer_mut()) + .maintain(global_state) { match event { MainMenuEvent::LoginAttempt { diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index 030d96360d..233e79a8c9 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -38,8 +38,12 @@ widget_ids! { username_field, singleplayer_button, singleplayer_text, - // Buttons + // Serverlist servers_button, + servers_frame, + servers_text, + servers_close, + // Buttons settings_button, quit_button, // Error @@ -135,6 +139,7 @@ pub struct MainMenuUi { server_address: String, login_error: Option, connecting: Option, + show_servers: bool, } impl MainMenuUi { @@ -169,10 +174,11 @@ impl MainMenuUi { server_address, login_error: None, connecting: None, + show_servers: false, } } - fn update_layout(&mut self) -> Vec { + fn update_layout(&mut self, global_state: &GlobalState) -> Vec { let mut events = Vec::new(); let ref mut ui_widgets = self.ui.set_widgets(); let version = env!("CARGO_PKG_VERSION"); @@ -276,6 +282,39 @@ impl MainMenuUi { self.login_error = None }; } + if self.show_servers { + Image::new(self.imgs.error_frame) + .top_left_with_margins_on(ui_widgets.window, 3.0, 3.0) + .w_h(400.0, 100.0) + .set(self.ids.servers_frame, ui_widgets); + let text = global_state.settings.networking.servers.iter() + .fold("".to_string(), |mut acc, x| { + acc.push_str(&x); + acc.push_str("\n"); + acc + }); + Text::new(&text) + .color(TEXT_COLOR) + .top_left_with_margins_on(self.ids.servers_frame, 20.0, 20.0) + .font_id(self.font_opensans) + .font_size(18) + .set(self.ids.servers_text, ui_widgets); + + if Button::image(self.imgs.button_dark) + .w_h(100.0, 30.0) + .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) + .hover_image(self.imgs.button_dark_hover) + .press_image(self.imgs.button_dark_press) + .label_y(Relative::Scalar(2.0)) + .label("Close") + .label_font_size(10) + .label_color(TEXT_COLOR) + .set(self.ids.servers_close, ui_widgets) + .was_clicked() + { + self.show_servers = false + }; + } // Server address Image::new(self.imgs.input_bg) .w_h(337.0, 67.0) @@ -396,7 +435,9 @@ impl MainMenuUi { .label_y(Relative::Scalar(3.0)) .set(self.ids.servers_button, ui_widgets) .was_clicked() - {}; + { + self.show_servers = true; + }; events } @@ -414,9 +455,9 @@ impl MainMenuUi { self.ui.handle_event(event); } - pub fn maintain(&mut self, renderer: &mut Renderer) -> Vec { - let events = self.update_layout(); - self.ui.maintain(renderer); + pub fn maintain(&mut self, global_state: &mut GlobalState) -> Vec { + let events = self.update_layout(global_state); + self.ui.maintain(global_state.window.renderer_mut()); events } From dadbfb9d85cbf9dcfcc128c15e8f1b1921da9546 Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Fri, 19 Apr 2019 09:27:37 -0600 Subject: [PATCH 3/6] Add clickable server buttons Former-commit-id: d56b65b83db590991a2a42a95caa7b41a216052c --- voxygen/src/menu/main/ui.rs | 46 ++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index 233e79a8c9..f5adafc102 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -15,7 +15,7 @@ use conrod_core::{ image::Id as ImgId, position::{Dimension, Relative}, text::font::Id as FontId, - widget::{text_box::Event as TextBoxEvent, Button, Image, Rectangle, Text, TextBox}, + widget::{text_box::Event as TextBoxEvent, Button, Image, Rectangle, Text, TextBox, List}, widget_ids, Borderable, Color, Colorable, Labelable, Positionable, Sizeable, Widget, }; @@ -285,21 +285,41 @@ impl MainMenuUi { if self.show_servers { Image::new(self.imgs.error_frame) .top_left_with_margins_on(ui_widgets.window, 3.0, 3.0) - .w_h(400.0, 100.0) + .w_h(400.0, 300.0) .set(self.ids.servers_frame, ui_widgets); - let text = global_state.settings.networking.servers.iter() - .fold("".to_string(), |mut acc, x| { - acc.push_str(&x); - acc.push_str("\n"); - acc - }); - Text::new(&text) - .color(TEXT_COLOR) - .top_left_with_margins_on(self.ids.servers_frame, 20.0, 20.0) - .font_id(self.font_opensans) - .font_size(18) + + let netsettings = &global_state.settings.networking; + + let (mut items, scrollbar) = List::flow_down(netsettings.servers.len()) + .top_left_with_margins_on(self.ids.servers_frame, 0.0, 5.0) + .w_h(400.0, 300.0) + .scrollbar_next_to() + .scrollbar_thickness(18.0) + .scrollbar_color(TEXT_COLOR) .set(self.ids.servers_text, ui_widgets); + while let Some(item) = items.next(ui_widgets) { + let mut text = "".to_string(); + if &netsettings.servers[item.i] == &self.server_address {text.push_str("* ")} + else {text.push_str(" ")} + text.push_str(&netsettings.servers[item.i]); + + if item.set(Button::image(self.imgs.button_dark) + .w_h(100.0, 30.0) + .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) + .hover_image(self.imgs.button_dark_hover) + .press_image(self.imgs.button_dark_press) + .label_y(Relative::Scalar(2.0)) + .label(&text) + .label_font_size(10) + .label_color(TEXT_COLOR), + ui_widgets + ).was_clicked() { + // TODO: Set as current server address + self.server_address = netsettings.servers[item.i].clone(); + } + } + if Button::image(self.imgs.button_dark) .w_h(100.0, 30.0) .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) From d7e9caf5deef19ff0116003e8543d3700f2289f9 Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Fri, 19 Apr 2019 11:15:47 -0600 Subject: [PATCH 4/6] Adjust server list UI Former-commit-id: 61587cbd540c71bc9c264a744b89b8d88ec7ac15 --- voxygen/src/menu/main/ui.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index f5adafc102..7e0e15275a 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -285,7 +285,7 @@ impl MainMenuUi { if self.show_servers { Image::new(self.imgs.error_frame) .top_left_with_margins_on(ui_widgets.window, 3.0, 3.0) - .w_h(400.0, 300.0) + .w_h(400.0, 400.0) .set(self.ids.servers_frame, ui_widgets); let netsettings = &global_state.settings.networking; @@ -305,13 +305,13 @@ impl MainMenuUi { text.push_str(&netsettings.servers[item.i]); if item.set(Button::image(self.imgs.button_dark) - .w_h(100.0, 30.0) + .w_h(100.0, 53.0) .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) .hover_image(self.imgs.button_dark_hover) .press_image(self.imgs.button_dark_press) .label_y(Relative::Scalar(2.0)) .label(&text) - .label_font_size(10) + .label_font_size(20) .label_color(TEXT_COLOR), ui_widgets ).was_clicked() { @@ -321,13 +321,13 @@ impl MainMenuUi { } if Button::image(self.imgs.button_dark) - .w_h(100.0, 30.0) + .w_h(200.0, 53.0) .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) .hover_image(self.imgs.button_dark_hover) .press_image(self.imgs.button_dark_press) .label_y(Relative::Scalar(2.0)) .label("Close") - .label_font_size(10) + .label_font_size(20) .label_color(TEXT_COLOR) .set(self.ids.servers_close, ui_widgets) .was_clicked() From feb0610448b042cab25de8e6978778f3fe474ffe Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Sat, 20 Apr 2019 10:21:12 -0600 Subject: [PATCH 5/6] Ran rustfmt on ui.rs Former-commit-id: 7ee721023ce69de122993b9c94b0bd3fa739e154 --- voxygen/src/menu/main/ui.rs | 43 ++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index 7e0e15275a..b50a75719f 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -2,20 +2,16 @@ use crate::{ render::Renderer, ui::{self, ScaleMode, Ui}, window::Window, - DEFAULT_PUBLIC_SERVER, - GlobalState, -}; -use common::{ - assets, - figure::Segment, + GlobalState, DEFAULT_PUBLIC_SERVER, }; +use common::{assets, figure::Segment}; use conrod_core::{ color, color::TRANSPARENT, image::Id as ImgId, position::{Dimension, Relative}, text::font::Id as FontId, - widget::{text_box::Event as TextBoxEvent, Button, Image, Rectangle, Text, TextBox, List}, + widget::{text_box::Event as TextBoxEvent, Button, Image, List, Rectangle, Text, TextBox}, widget_ids, Borderable, Color, Colorable, Labelable, Positionable, Sizeable, Widget, }; @@ -300,21 +296,28 @@ impl MainMenuUi { while let Some(item) = items.next(ui_widgets) { let mut text = "".to_string(); - if &netsettings.servers[item.i] == &self.server_address {text.push_str("* ")} - else {text.push_str(" ")} + if &netsettings.servers[item.i] == &self.server_address { + text.push_str("* ") + } else { + text.push_str(" ") + } text.push_str(&netsettings.servers[item.i]); - if item.set(Button::image(self.imgs.button_dark) - .w_h(100.0, 53.0) - .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) - .hover_image(self.imgs.button_dark_hover) - .press_image(self.imgs.button_dark_press) - .label_y(Relative::Scalar(2.0)) - .label(&text) - .label_font_size(20) - .label_color(TEXT_COLOR), - ui_widgets - ).was_clicked() { + if item + .set( + Button::image(self.imgs.button_dark) + .w_h(100.0, 53.0) + .mid_bottom_with_margin_on(self.ids.servers_frame, 5.0) + .hover_image(self.imgs.button_dark_hover) + .press_image(self.imgs.button_dark_press) + .label_y(Relative::Scalar(2.0)) + .label(&text) + .label_font_size(20) + .label_color(TEXT_COLOR), + ui_widgets, + ) + .was_clicked() + { // TODO: Set as current server address self.server_address = netsettings.servers[item.i].clone(); } From 2a6a0a2a3ee78f0ca0aa0b40102c839f1912ad3f Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Thu, 25 Apr 2019 02:45:01 -0600 Subject: [PATCH 6/6] Fix default server loading Former-commit-id: 2273a32327c5268e4f6d5cce97bd58792a385c71 --- voxygen/src/menu/main/ui.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/voxygen/src/menu/main/ui.rs b/voxygen/src/menu/main/ui.rs index b50a75719f..c082ec8966 100644 --- a/voxygen/src/menu/main/ui.rs +++ b/voxygen/src/menu/main/ui.rs @@ -152,10 +152,12 @@ impl MainMenuUi { // Load fonts let load_font = |filename, ui: &mut Ui| { let fullpath: String = ["/voxygen/font", filename].concat(); - ui.new_font(conrod_core::text::Font::from_bytes( - assets::load(fullpath.as_str()) - .expect("Error loading file") - ).unwrap()) + ui.new_font( + conrod_core::text::Font::from_bytes( + assets::load(fullpath.as_str()).expect("Error loading file"), + ) + .unwrap(), + ) }; let font_opensans = load_font("/OpenSans-Regular.ttf", &mut ui); let font_metamorph = load_font("/Metamorphous-Regular.ttf", &mut ui); @@ -167,7 +169,7 @@ impl MainMenuUi { font_metamorph, font_opensans, username: networking.username.clone(), - server_address, + server_address: networking.servers[networking.default_server].clone(), login_error: None, connecting: None, show_servers: false,