feat: add difficulty selection

This commit is contained in:
2026-08-19 21:26:13 +02:00
parent 7605200ae1
commit 5ea3a95257
6 changed files with 121 additions and 8 deletions

View File

@@ -0,0 +1,53 @@
use macroquad::{
color::GRAY,
math::vec2,
shapes::draw_rectangle,
ui::{hash, root_ui, widgets::Group},
window::{next_frame, screen_height, screen_width},
};
use crate::ui::{
macroquad::menu_builder::MenuBuilder,
state::{
GameContext,
GuiState::{self},
},
};
pub async fn draw_dificulty_selection(state: &mut GuiState, context: &mut GameContext) {
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,
screen_height() / 2.0 - menu_size.y / 2.0,
);
let mut menu_builder = MenuBuilder::new(menu_size.x, menu_size.y * 0.1);
draw_rectangle(menu_pos.x, menu_pos.y, menu_size.x, menu_size.y, GRAY);
Group::new(hash!(), menu_size)
.position(menu_pos)
.ui(&mut root_ui(), |ui| {
menu_builder.label(ui, "Difficulty Selection");
if menu_builder.button(ui, "Easy") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Easy;
*state = GuiState::Game;
}
if menu_builder.button(ui, "Medium") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Normal;
*state = GuiState::Game;
}
if menu_builder.button(ui, "Hard") {
context.is_single = true;
context.difficulty = crate::super_advanced_ai::BotDificulty::Hard;
*state = GuiState::Game;
}
});
next_frame().await;
}

View File

@@ -1,3 +1,4 @@
pub mod difficulty_selection;
pub mod main_menu;
pub mod mode_selection;
mod menu_builder;
pub mod mode_selection;

View File

@@ -0,0 +1,44 @@
use macroquad::{
color::GRAY,
math::vec2,
shapes::draw_rectangle,
ui::{hash, root_ui, widgets::Group},
window::{next_frame, screen_height, screen_width},
};
use crate::ui::{
macroquad::menu_builder::MenuBuilder,
state::GuiState::{self, ServerSelection},
};
pub async fn draw_mode_selection(state: &mut GuiState) {
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,
screen_height() / 2.0 - menu_size.y / 2.0,
);
let mut menu_builder = MenuBuilder::new(menu_size.x, menu_size.y * 0.1);
draw_rectangle(menu_pos.x, menu_pos.y, menu_size.x, menu_size.y, GRAY);
Group::new(hash!(), menu_size)
.position(menu_pos)
.ui(&mut root_ui(), |ui| {
menu_builder.label(ui, "Mode selection");
if menu_builder.button(ui, "Singleplayer") {
*state = GuiState::DificultySelection;
}
if menu_builder.button(ui, "Multiplayer") {
*state = ServerSelection;
}
if menu_builder.button(ui, "Go back") {
*state = GuiState::MainMenu;
}
});
next_frame().await;
}