refactor: add gamemode enum

This commit is contained in:
2026-08-21 12:34:04 +02:00
parent ffda7f2279
commit c0cfb67eec
5 changed files with 28 additions and 8 deletions

View File

@@ -76,7 +76,7 @@ pub async fn main() {
} }
GuiState::ModeSelection => { GuiState::ModeSelection => {
draw_mode_selection(&mut state).await; draw_mode_selection(&mut state, &mut context).await;
} }
GuiState::DificultySelection => { GuiState::DificultySelection => {

View File

@@ -31,22 +31,23 @@ pub async fn draw_dificulty_selection(state: &mut GuiState, context: &mut GameCo
menu_builder.label(ui, "Difficulty Selection"); menu_builder.label(ui, "Difficulty Selection");
if menu_builder.button(ui, "Easy") { if menu_builder.button(ui, "Easy") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Easy; context.difficulty = crate::super_advanced_ai::BotDificulty::Easy;
*state = GuiState::Game; *state = GuiState::Game;
} }
if menu_builder.button(ui, "Medium") { if menu_builder.button(ui, "Medium") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Normal; context.difficulty = crate::super_advanced_ai::BotDificulty::Normal;
*state = GuiState::Game; *state = GuiState::Game;
} }
if menu_builder.button(ui, "Hard") { if menu_builder.button(ui, "Hard") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Hard; context.difficulty = crate::super_advanced_ai::BotDificulty::Hard;
*state = GuiState::Game; *state = GuiState::Game;
} }
if menu_builder.button(ui, "Go back") {
*state = GuiState::ModeSelection;
}
}); });
next_frame().await; next_frame().await;

View File

@@ -8,10 +8,13 @@ use macroquad::{
use crate::ui::{ use crate::ui::{
macroquad::menu_builder::MenuBuilder, macroquad::menu_builder::MenuBuilder,
state::GuiState::{self, ServerSelection}, state::{
GameContext,
GuiState::{self, ServerSelection},
},
}; };
pub async fn draw_mode_selection(state: &mut GuiState) { pub async fn draw_mode_selection(state: &mut GuiState, context: &mut GameContext) {
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,
@@ -28,6 +31,7 @@ pub async fn draw_mode_selection(state: &mut GuiState) {
menu_builder.label(ui, "Mode selection"); menu_builder.label(ui, "Mode selection");
if menu_builder.button(ui, "Singleplayer") { if menu_builder.button(ui, "Singleplayer") {
context.gamemode = crate::ui::state::GameMode::Singleplayer;
*state = GuiState::DificultySelection; *state = GuiState::DificultySelection;
} }

View File

@@ -28,14 +28,20 @@ pub async fn draw_server_selection(state: &mut GuiState, context: &mut GameConte
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| {
menu_builder.label(ui, "Host");
if menu_builder.button(ui, "Start") {
context.gamemode = crate::ui::state::GameMode::Multiplayer { is_hosting: true };
}
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, &mut context.server_url_buffer);
//context.normalise_url(); //context.normalise_url();
if menu_builder.button(ui, "Connect") { if menu_builder.button(ui, "Connect") {
context.is_single = false; context.gamemode = crate::ui::state::GameMode::Multiplayer { is_hosting: false };
*state = GuiState::Game; *state = GuiState::Game;
// TODO Validate url before connecting or something like that
} }
if menu_builder.button(ui, "Go back") { if menu_builder.button(ui, "Go back") {

View File

@@ -14,9 +14,18 @@ pub enum GuiState {
Exit, Exit,
} }
#[derive(Default)]
pub enum GameMode {
#[default]
Singleplayer,
Multiplayer {
is_hosting: bool,
},
}
#[derive(Default)] #[derive(Default)]
pub struct GameContext { pub struct GameContext {
pub difficulty: BotDificulty, pub difficulty: BotDificulty,
pub is_single: bool, pub gamemode: GameMode,
pub server_url_buffer: String, pub server_url_buffer: String,
} }