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,10 +1,16 @@
|
|||||||
use checkers::ui::{
|
use checkers::{
|
||||||
|
settings::{
|
||||||
|
client_settings::ClientSettings, general_settings::SettingsLike,
|
||||||
|
server_settings::ServerSettings,
|
||||||
|
},
|
||||||
|
ui::{
|
||||||
macroquad::{
|
macroquad::{
|
||||||
difficulty_selection::draw_dificulty_selection, game::game::GameClient,
|
difficulty_selection::draw_dificulty_selection, game::game::GameClient,
|
||||||
main_menu::draw_main_menu, mode_selection::draw_mode_selection,
|
main_menu::draw_main_menu, mode_selection::draw_mode_selection,
|
||||||
server_selection::draw_server_selection, settings::draw_settings,
|
server_selection::draw_server_selection, settings::draw_settings,
|
||||||
},
|
},
|
||||||
state::{GameContext, GuiState},
|
state::{GameContext, GuiState},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
use macroquad::{
|
use macroquad::{
|
||||||
color::{BLACK, WHITE},
|
color::{BLACK, WHITE},
|
||||||
@@ -62,6 +68,9 @@ pub async fn main() {
|
|||||||
let mut state = Default::default();
|
let mut state = Default::default();
|
||||||
let mut context = GameContext::default();
|
let mut context = GameContext::default();
|
||||||
|
|
||||||
|
let mut client_settings = ClientSettings::new();
|
||||||
|
let mut server_settings = ServerSettings::new();
|
||||||
|
|
||||||
let background = load_texture("assets/background.png").await.unwrap();
|
let background = load_texture("assets/background.png").await.unwrap();
|
||||||
|
|
||||||
let main_menu_style = get_general_style().await;
|
let main_menu_style = get_general_style().await;
|
||||||
@@ -121,7 +130,13 @@ pub async fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GuiState::Settings => {
|
GuiState::Settings => {
|
||||||
draw_settings(&mut state).await;
|
draw_settings(
|
||||||
|
&mut state,
|
||||||
|
&mut context,
|
||||||
|
&mut client_settings,
|
||||||
|
&mut server_settings,
|
||||||
|
)
|
||||||
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiState::Game(client) => {
|
GuiState::Game(client) => {
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ impl MenuBuilder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn text_input(&mut self, ui: &mut Ui, buffer: &mut String) {
|
pub fn text_input(&mut self, ui: &mut Ui, id: &str, buffer: &mut String) {
|
||||||
InputText::new(hash!())
|
InputText::new(hash!(id))
|
||||||
.position(vec2(self.center_x, self.current_y))
|
.position(vec2(self.center_x, self.current_y))
|
||||||
.size(self.button_size)
|
.size(self.button_size)
|
||||||
.ui(ui, buffer);
|
.ui(ui, buffer);
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ pub async fn draw_server_selection(state: &mut GuiState, context: &mut GameConte
|
|||||||
|
|
||||||
menu_builder.label(ui, "Server selection");
|
menu_builder.label(ui, "Server selection");
|
||||||
|
|
||||||
menu_builder.text_input(ui, &mut context.server_url_buffer);
|
menu_builder.text_input(ui, "server url", &mut context.server_url_buffer);
|
||||||
//context.normalise_url();
|
//context.normalise_url();
|
||||||
|
|
||||||
if menu_builder.button(ui, "Connect") {
|
if menu_builder.button(ui, "Connect") {
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
use log::error;
|
||||||
use macroquad::{
|
use macroquad::{
|
||||||
color::GRAY,
|
color::GRAY,
|
||||||
math::vec2,
|
math::vec2,
|
||||||
@@ -6,9 +7,23 @@ use macroquad::{
|
|||||||
window::{screen_height, screen_width},
|
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_size = vec2(screen_width() * 0.5, screen_height() * 0.5);
|
||||||
let menu_pos = vec2(
|
let menu_pos = vec2(
|
||||||
screen_width() / 2.0 - menu_size.x / 2.0,
|
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)
|
Group::new(hash!(), menu_size)
|
||||||
.position(menu_pos)
|
.position(menu_pos)
|
||||||
.ui(&mut root_ui(), |ui| {
|
.ui(&mut root_ui(), |ui| {
|
||||||
|
// Client
|
||||||
menu_builder.label(ui, "Game settings");
|
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;
|
*state = GuiState::MainMenu;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ pub struct GameContext {
|
|||||||
pub difficulty: BotDificulty,
|
pub difficulty: BotDificulty,
|
||||||
pub gamemode: GameMode,
|
pub gamemode: GameMode,
|
||||||
pub server_url_buffer: String,
|
pub server_url_buffer: String,
|
||||||
|
|
||||||
|
pub latest_error_message: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for GameContext {
|
impl Default for GameContext {
|
||||||
@@ -43,7 +45,8 @@ impl Default for GameContext {
|
|||||||
Self {
|
Self {
|
||||||
difficulty: BotDificulty::default(),
|
difficulty: BotDificulty::default(),
|
||||||
gamemode: GameMode::default(),
|
gamemode: GameMode::default(),
|
||||||
server_url_buffer: "127.0.0.1".to_string(),
|
server_url_buffer: "127.0.0.1:6767".to_string(),
|
||||||
|
latest_error_message: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user