mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
feat: add some basic settings
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
use log::error;
|
||||
use macroquad::{
|
||||
color::GRAY,
|
||||
math::vec2,
|
||||
@@ -6,9 +7,23 @@ use macroquad::{
|
||||
window::{screen_height, screen_width},
|
||||
};
|
||||
|
||||
use crate::ui::{macroquad::menu_builder::MenuBuilder, state::GuiState};
|
||||
use crate::{
|
||||
settings::{
|
||||
client_settings::ClientSettings, general_settings::SettingsLike,
|
||||
server_settings::ServerSettings,
|
||||
},
|
||||
ui::{
|
||||
macroquad::menu_builder::MenuBuilder,
|
||||
state::{GameContext, GuiState},
|
||||
},
|
||||
};
|
||||
|
||||
pub async fn draw_settings(state: &mut GuiState) {
|
||||
pub async fn draw_settings(
|
||||
state: &mut GuiState,
|
||||
context: &mut GameContext,
|
||||
client_settings: &mut ClientSettings,
|
||||
server_settings: &mut ServerSettings,
|
||||
) {
|
||||
let menu_size = vec2(screen_width() * 0.5, screen_height() * 0.5);
|
||||
let menu_pos = vec2(
|
||||
screen_width() / 2.0 - menu_size.x / 2.0,
|
||||
@@ -21,11 +36,50 @@ pub async fn draw_settings(state: &mut GuiState) {
|
||||
Group::new(hash!(), menu_size)
|
||||
.position(menu_pos)
|
||||
.ui(&mut root_ui(), |ui| {
|
||||
// Client
|
||||
menu_builder.label(ui, "Game settings");
|
||||
|
||||
menu_builder.label(ui, "Server settings");
|
||||
menu_builder.label(ui, "Name");
|
||||
menu_builder.text_input(ui, "name input", &mut client_settings.name);
|
||||
|
||||
if menu_builder.button(ui, "Go back") {
|
||||
menu_builder.label(ui, "Default server url");
|
||||
menu_builder.text_input(ui, "url input", &mut context.server_url_buffer);
|
||||
|
||||
menu_builder.label(ui, "");
|
||||
|
||||
// Server
|
||||
menu_builder.label(ui, "Server settings");
|
||||
menu_builder.label(ui, "TODO");
|
||||
|
||||
if let Some(error_msg) = &context.latest_error_message {
|
||||
menu_builder.label(ui, &error_msg);
|
||||
}
|
||||
|
||||
// Exit
|
||||
if menu_builder.button(ui, "Save and back") {
|
||||
client_settings.server_url = match context.server_url_buffer.parse() {
|
||||
Ok(result) => result,
|
||||
|
||||
Err(e) => {
|
||||
context.latest_error_message =
|
||||
Some(format!("Error while parsing url: {}", e));
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
if let Err(e) = client_settings.save_to_file() {
|
||||
context.latest_error_message = Some(format!("Error: {}", e));
|
||||
error!("Error while saving client settings to file: {}", e);
|
||||
return;
|
||||
}
|
||||
|
||||
if let Err(e) = server_settings.save_to_file() {
|
||||
context.latest_error_message = Some(format!("Error: {}", e));
|
||||
error!("Error while saving server settings to file: {}", e);
|
||||
return;
|
||||
}
|
||||
|
||||
context.latest_error_message = None;
|
||||
*state = GuiState::MainMenu;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user