From 90d3a3fc4c42df82cb095eaafc0d15359065ab92 Mon Sep 17 00:00:00 2001 From: szymon Date: Sun, 23 Aug 2026 21:24:53 +0200 Subject: [PATCH] feat: center board --- src/ui/macroquad/game/board.rs | 27 ++++++++++++++++++++------- src/ui/macroquad/game/game.rs | 23 ++++++++++++++++++++++- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/src/ui/macroquad/game/board.rs b/src/ui/macroquad/game/board.rs index 5127525..69864e6 100644 --- a/src/ui/macroquad/game/board.rs +++ b/src/ui/macroquad/game/board.rs @@ -19,16 +19,18 @@ use crate::logic::{ struct GuiField { rect: Rect, field: Field, + pos: Position, is_clickable: bool, color: Color, } pub struct Board { + rect: Rect, + board_view: BoardView, fields: Vec, my_id: Uuid, - current_highlight: Option, available_captures: Option>, available_moves: Option>, @@ -36,18 +38,19 @@ pub struct Board { impl Default for Board { fn default() -> Self { - Self::new(Uuid::default()) + Self::new(Rect::default(), Uuid::default()) } } impl Board { - pub fn new(player_id: Uuid) -> Self { + pub fn new(rect: Rect, player_id: Uuid) -> Self { Self { + rect, + board_view: BoardView::default(), fields: vec![], my_id: player_id, - current_highlight: None, available_captures: None, available_moves: None, @@ -68,10 +71,19 @@ impl Board { self.available_captures = None; } + pub fn update_board_rect(&mut self, rect: Rect) -> bool { + if self.rect != rect { + self.rect = rect; + return true; + } + + false + } + pub fn update_state(&mut self) { self.fields.clear(); - let field_size = 32.0; + let field_size = self.rect.w / self.board_view.size as f32; for field in &self.board_view { let pos: Position = field.position; @@ -80,8 +92,8 @@ impl Board { let is_column_even: bool = pos.column % 2 == 0; let is_field_black: bool = is_row_even ^ is_column_even; - let abs_x = pos.column as f32 * field_size; - let abs_y = pos.row as f32 * field_size; + let abs_x = self.rect.x + pos.column as f32 * field_size; + let abs_y = self.rect.y + pos.row as f32 * field_size; let rect = Rect { x: abs_x, @@ -94,6 +106,7 @@ impl Board { rect, field: field.clone(), is_clickable: false, + pos, color: if is_field_black { BLACK } else { WHITE }, }); } diff --git a/src/ui/macroquad/game/game.rs b/src/ui/macroquad/game/game.rs index 897ec3a..7bfd596 100644 --- a/src/ui/macroquad/game/game.rs +++ b/src/ui/macroquad/game/game.rs @@ -39,6 +39,8 @@ pub struct GameClient { game_state: ServerStage, game_area: Rect, + board_area: Rect, + game_padding: f32, lobby: Lobby, @@ -115,6 +117,8 @@ impl GameClient { }; let game_padding = 25.0; + let board_area = Rect::default(); + let chat = Chat::default(); Some(Self { @@ -133,6 +137,8 @@ impl GameClient { game_state: game_stage, game_area, + board_area, + game_padding, chat, @@ -228,7 +234,7 @@ impl GameClient { ServerMessage::GameStart { identity } => { info!("We go identity!"); self.identity = Some(identity.clone()); - self.board = Board::new(identity.id); + self.board = Board::new(self.board_area, identity.id); self.game_state = ServerStage::Game; } @@ -291,5 +297,20 @@ impl GameClient { }; self.chat.update(&self.game_area); + + let w = self.game_area.w * 0.75; + let h = self.game_area.h * 0.75; + let side = w.min(h); + + self.board_area = Rect { + x: self.game_area.w / 2.0 - (side / 2.0), + y: self.game_area.h / 2.0 - (side / 2.0), + w: side, + h: side, + }; + + if self.board.update_board_rect(self.board_area) { + self.board.update_state(); + } } }