decorations

This commit is contained in:
cool-mist 2025-05-11 23:47:03 +05:30
parent 654469bb4a
commit ff13e49720
2 changed files with 52 additions and 14 deletions

View File

@ -3,7 +3,7 @@ use std::{
fmt::{self, Display, Formatter}, fmt::{self, Display, Formatter},
}; };
use button::Button; use button::{Button, ButtonColor};
use macroquad::{math, prelude::*, rand}; use macroquad::{math, prelude::*, rand};
use sol_chess::{ use sol_chess::{
board::{Board, BoardState}, board::{Board, BoardState},
@ -189,9 +189,9 @@ impl Game {
let mut selected_square = None; let mut selected_square = None;
self.squares.iter().for_each(|square| { self.squares.iter().for_each(|square| {
let color = if square.is_source { let color = if square.is_source {
Color::from_rgba(152, 152, 152, 255) Color::from_rgba(112, 105, 141, 255)
} else if square.is_target { } else if square.is_target {
Color::from_rgba(152, 129, 123, 255) Color::from_rgba(112, 150, 141, 255)
} else { } else {
square.color square.color
}; };
@ -279,7 +279,7 @@ impl Game {
let dims = measure_text(self.heading_text.as_str(), None, f, 1.0); let dims = measure_text(self.heading_text.as_str(), None, f, 1.0);
self.heading_rect = Rect::new( self.heading_rect = Rect::new(
board_x + (board_width - dims.width) / 2.0, board_x + (board_width - dims.width) / 2.0,
board_y / 2.0, 0.85 * board_y,
dims.width, dims.width,
dims.height, dims.height,
); );
@ -316,13 +316,20 @@ impl Game {
let btn_y = board_width + board_y + 0.3 * self.square_width; let btn_y = board_width + board_y + 0.3 * self.square_width;
let btn_x_offset = 0.5 * (board_width / 2. - btn_w); let btn_x_offset = 0.5 * (board_width / 2. - btn_w);
let reset_btn = Button::new("Reset", board_x + btn_x_offset, btn_y, btn_w, btn_h); let reset_btn = Button::new(
"Reset",
Rect::new(board_x + btn_x_offset, btn_y, btn_w, btn_h),
ButtonColor::Yellow,
);
let mut next_btn = Button::new( let mut next_btn = Button::new(
"Next", "Next",
Rect::new(
board_x + (0.5 * board_width) + btn_x_offset, board_x + (0.5 * board_width) + btn_x_offset,
btn_y, btn_y,
btn_w, btn_w,
btn_h, btn_h,
),
ButtonColor::Green,
); );
next_btn.is_active = false; next_btn.is_active = false;

View File

@ -1,17 +1,43 @@
use macroquad::prelude::*; use macroquad::prelude::*;
pub struct Button { pub struct Button {
pub text: String,
pub is_active: bool, pub is_active: bool,
text: String,
is_down: bool, is_down: bool,
is_clicked: bool, is_clicked: bool,
rect: Rect, rect: Rect,
shadow_width: f32, shadow_width: f32,
color: ButtonColor,
}
pub enum ButtonColor {
Grey,
Green,
Yellow,
}
impl ButtonColor {
fn to_bg_color(&self) -> Color {
match self {
ButtonColor::Grey => Color::from_rgba(140, 140, 140, 200),
ButtonColor::Green => Color::from_rgba(112, 140, 141, 200),
ButtonColor::Yellow => Color::from_rgba(123, 70, 85, 200),
}
}
fn to_shadow_color(&self) -> Color {
let bg_color = self.to_bg_color();
Color::from_rgba(
(bg_color.r * 255.) as u8,
(bg_color.g * 255.) as u8,
(bg_color.b * 255.) as u8,
100,
)
}
} }
impl Button { impl Button {
pub fn new(text: &str, x: f32, y: f32, width: f32, height: f32) -> Self { pub fn new(text: &str, rect: Rect, color: ButtonColor) -> Self {
let rect = Rect::new(x, y, width, height);
Self { Self {
text: text.to_string(), text: text.to_string(),
is_down: false, is_down: false,
@ -19,6 +45,7 @@ impl Button {
is_active: true, is_active: true,
rect, rect,
shadow_width: 5.0, shadow_width: 5.0,
color,
} }
} }
@ -37,7 +64,11 @@ impl Button {
} }
fn draw_button(&self) { fn draw_button(&self) {
let bg_color = Color::from_rgba(190, 190, 190, 255); let bg_color = match self.is_active {
true => self.color.to_bg_color(),
false => ButtonColor::Grey.to_bg_color(),
};
let button_draw_offset = self.get_button_draw_offset(); let button_draw_offset = self.get_button_draw_offset();
draw_rectangle( draw_rectangle(
self.rect.x + button_draw_offset, self.rect.x + button_draw_offset,
@ -59,7 +90,7 @@ impl Button {
return; return;
} }
let color = Color::from_rgba(0, 0, 0, 100); let color = self.color.to_shadow_color();
draw_rectangle( draw_rectangle(
self.rect.x + self.rect.w, self.rect.x + self.rect.w,
self.rect.y + self.shadow_width, self.rect.y + self.shadow_width,