--> retained mode ui

This commit is contained in:
cool-mist
2026-03-15 12:04:48 +05:30
parent 3cb08bf08e
commit 194136dfc7
12 changed files with 590 additions and 484 deletions
+22 -40
View File
@@ -2,11 +2,10 @@ use core::fmt;
use std::fmt::{Display, Formatter};
use crate::{
game::{GameMode, GameSettings, constants},
game::{Settings, constants},
resources::{Resources, SoundKind},
widgets::*,
};
use macroquad::prelude::*;
use sol_lib::{
board::{Board, BoardState, piece::Piece},
generator::Puzzle,
@@ -17,35 +16,13 @@ pub struct BoardWidget {
current_board: Board,
square_width: f32,
pub num_squares: usize, // this is a constant = 4 for now.
pub show_rules: bool,
rules_font_size: f32,
board_rect: Rect,
squares: Vec<GameSquare>,
state: GameState,
}
#[derive(Copy, Clone)]
pub enum ButtonName {
Reset,
Next,
Rules,
Generate,
}
pub enum CounterName {
Pieces,
Age,
}
pub enum GameInteraction {
NoInteraction,
Board(BoardState),
ButtonRelease(ButtonName),
GameMode(GameMode),
Counter(CounterName, u32),
ToggleDebug,
HideRules,
Quit,
}
pub struct BoardInteraction {
pub new_board_state: Option<BoardState>,
}
@@ -58,9 +35,15 @@ impl BoardWidget {
board
}
pub fn initialize_drawables(&mut self, square_width: f32, board_rect: Rect) {
pub fn initialize_drawables(
&mut self,
square_width: f32,
board_rect: Rect,
rules_font_size: f32,
) {
self.square_width = square_width;
self.board_rect = board_rect;
self.rules_font_size = rules_font_size;
let dark = UiColor::Brown.to_bg_color();
let light = UiColor::Yellow.to_bg_color();
@@ -90,11 +73,11 @@ impl BoardWidget {
self.squares = rects;
}
pub fn draw(&self, params: &BoardDrawParams, resources: &Resources, settings: &GameSettings) {
pub fn draw(&self, resources: &Resources, settings: &Settings) {
let board_shadow_width = constants::BOARD_SHADOW_MULTIPLIER * self.square_width;
draw_shadow(&self.board_rect, board_shadow_width);
if params.show_rules {
if self.show_rules {
draw_rectangle(
self.board_rect.x,
self.board_rect.y,
@@ -103,16 +86,20 @@ impl BoardWidget {
UiColor::Yellow.to_bg_color(),
);
let font_size = params.rules_font_size * 0.4;
let rules = "\
Every move should be a \n\
capture. Win when only \n\
one piece is left.\n\
Age: Each piece can only \n\
move 'age' times";
let measurement = measure_text(rules, Some(resources.font()), font_size as u16, 1.0);
let measurement = measure_text(
rules,
Some(resources.font()),
self.rules_font_size as u16,
1.0,
);
let draw_text_params = TextParams {
font_size: font_size as u16,
font_size: self.rules_font_size as u16,
font: Some(resources.font()),
color: UiColor::Brown.to_bg_color(),
..Default::default()
@@ -214,9 +201,9 @@ impl BoardWidget {
pub fn handle_input(
&mut self,
interaction: &UserInteraction,
interaction: &Interaction,
resources: &Resources,
settings: &GameSettings,
settings: &Settings,
) -> BoardInteraction {
let mouse_pos = interaction.mouse_pos;
if mouse_pos.overlaps_rect(&self.board_rect) == false {
@@ -315,7 +302,7 @@ impl BoardWidget {
mouse_pos: Circle,
source: (usize, usize),
resources: &Resources,
settings: &GameSettings,
settings: &Settings,
) -> GameState {
let mut selected = None;
for square in &mut self.squares {
@@ -444,8 +431,3 @@ struct PieceDrawTextureParams<'a> {
texture: &'a Texture2D,
draw_text_params: DrawTextureParams,
}
pub struct BoardDrawParams {
pub show_rules: bool,
pub rules_font_size: f32,
}