From b041192a1d097e6d1fc20662d4624d9d03cc9c42 Mon Sep 17 00:00:00 2001 From: szymon Date: Wed, 19 Aug 2026 13:14:23 +0200 Subject: [PATCH] feat: first draft at window --- src/bin/macroquad_client.rs | 27 ++++++++++++++++++++--- src/ui/macroquad/main_menu.rs | 40 ++++++++++++++++++++++++++++++++++- src/ui/state.rs | 3 +++ 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/src/bin/macroquad_client.rs b/src/bin/macroquad_client.rs index 53e77ff..8224926 100644 --- a/src/bin/macroquad_client.rs +++ b/src/bin/macroquad_client.rs @@ -1,5 +1,6 @@ +use checkers::ui::{macroquad::main_menu::draw_main_menu, state::GuiState}; use macroquad::{ - color::BLACK, + color::{BLUE, RED}, miniquad::{self, conf::LinuxBackend::WaylandWithX11Fallback}, window::{Conf, clear_background, next_frame}, }; @@ -18,8 +19,28 @@ fn window_conf() -> Conf { #[macroquad::main(window_conf)] pub async fn main() { + env_logger::init(); + + let mut state = Default::default(); + loop { - clear_background(BLACK); - next_frame().await; + match state { + GuiState::MainMenu => { + draw_main_menu(&mut state).await; + } + + GuiState::Settings => { + clear_background(RED); + next_frame().await; + } + GuiState::Game => { + clear_background(BLUE); + next_frame().await; + } + + GuiState::Exit => { + break; + } + } } } diff --git a/src/ui/macroquad/main_menu.rs b/src/ui/macroquad/main_menu.rs index 46f5afe..ec73b6b 100644 --- a/src/ui/macroquad/main_menu.rs +++ b/src/ui/macroquad/main_menu.rs @@ -1 +1,39 @@ -fn draw_main_menu() {} +use log::info; +use macroquad::{ + color::{BLACK, WHITE}, + input::is_mouse_button_pressed, + math::vec2, + ui::{StyleBuilder, hash, root_ui}, + window::{clear_background, next_frame, screen_height, screen_width}, +}; + +use crate::ui::state::GuiState; + +pub async fn draw_main_menu(state: &mut GuiState) { + let style = root_ui().style_builder().text_color(WHITE).font_size(64); + let text_style = root_ui().style_builder().text_color(WHITE).font_size(32); + + let window_size = vec2(370.0, 320.0); + + root_ui().window( + hash!(), + vec2(screen_width() / 2.0, screen_height() / 2.0), + window_size, + |ui| { + ui.label(vec2(80.0, -34.0), "Main Menu"); + if ui.button(vec2(65.0, 25.0), "Play") { + *state = GuiState::Game; + } + + if ui.button(vec2(65.0, 25.0), "Settings") { + *state = GuiState::Settings; + } + + if ui.button(vec2(65.0, 125.0), "Quit") { + *state = GuiState::Exit; + } + }, + ); + + next_frame().await; +} diff --git a/src/ui/state.rs b/src/ui/state.rs index 1d29606..1161859 100644 --- a/src/ui/state.rs +++ b/src/ui/state.rs @@ -1,5 +1,8 @@ +#[derive(Default)] pub enum GuiState { + #[default] MainMenu, Settings, Game, + Exit, }