mirror of
https://github.com/szymon-jozef/checkers.git
synced 2026-10-27 19:20:44 +01:00
feat: add moving pawn
This commit is contained in:
@@ -113,7 +113,10 @@ pub struct Board {
|
|||||||
is_my_turn: bool,
|
is_my_turn: bool,
|
||||||
|
|
||||||
available_captures: Option<Vec<CapturePath>>,
|
available_captures: Option<Vec<CapturePath>>,
|
||||||
|
choosen_capture: Option<CapturePath>,
|
||||||
|
|
||||||
available_moves: Option<Vec<MovePath>>,
|
available_moves: Option<Vec<MovePath>>,
|
||||||
|
choosen_move: Option<MovePath>,
|
||||||
|
|
||||||
field_size: f32,
|
field_size: f32,
|
||||||
}
|
}
|
||||||
@@ -138,7 +141,10 @@ impl Board {
|
|||||||
is_my_turn: false,
|
is_my_turn: false,
|
||||||
|
|
||||||
available_captures: None,
|
available_captures: None,
|
||||||
|
choosen_capture: None,
|
||||||
|
|
||||||
available_moves: None,
|
available_moves: None,
|
||||||
|
choosen_move: None,
|
||||||
|
|
||||||
field_size: 32.0,
|
field_size: 32.0,
|
||||||
}
|
}
|
||||||
@@ -175,6 +181,20 @@ impl Board {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.highlight_move_paths(from);
|
self.highlight_move_paths(from);
|
||||||
|
|
||||||
|
if let Some(field) = &self.get_clicked_field() {
|
||||||
|
if let Some(available_moves) = &self.available_moves {
|
||||||
|
if available_moves.iter().any(|available_move| {
|
||||||
|
available_move.from == from
|
||||||
|
&& available_move.available_steps.contains(&field.pos)
|
||||||
|
}) {
|
||||||
|
self.choosen_move = Some(MovePath {
|
||||||
|
from,
|
||||||
|
available_steps: vec![field.pos],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BoardState::ChooseCapture(from) => {
|
BoardState::ChooseCapture(from) => {
|
||||||
@@ -201,6 +221,14 @@ impl Board {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_choosen_capture(&mut self) -> Option<CapturePath> {
|
||||||
|
self.choosen_capture.take()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_choosen_move(&mut self) -> Option<MovePath> {
|
||||||
|
self.choosen_move.take()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn update_board_view(&mut self, board_view: BoardView) {
|
pub fn update_board_view(&mut self, board_view: BoardView) {
|
||||||
self.board_view = board_view;
|
self.board_view = board_view;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,10 @@ use macroquad::{
|
|||||||
use tokio::sync::mpsc::{Receiver, error::TryRecvError::Disconnected};
|
use tokio::sync::mpsc::{Receiver, error::TryRecvError::Disconnected};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
logic::board::board_view::BoardView,
|
logic::board::{
|
||||||
|
board_view::BoardView,
|
||||||
|
pawn::{CapturePath, MovePath},
|
||||||
|
},
|
||||||
network::{
|
network::{
|
||||||
client::Client, message::ServerMessage, network_identity::NetworkIdentity,
|
client::Client, message::ServerMessage, network_identity::NetworkIdentity,
|
||||||
server::ServerStage,
|
server::ServerStage,
|
||||||
@@ -60,8 +63,8 @@ pub enum GuiCommands {
|
|||||||
Ready,
|
Ready,
|
||||||
Unready,
|
Unready,
|
||||||
|
|
||||||
Capture,
|
Capture(CapturePath),
|
||||||
Move,
|
Move(MovePath),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GameClient {
|
impl GameClient {
|
||||||
@@ -90,8 +93,13 @@ impl GameClient {
|
|||||||
GuiCommands::Unready => {
|
GuiCommands::Unready => {
|
||||||
client.revoke_readiness().await;
|
client.revoke_readiness().await;
|
||||||
}
|
}
|
||||||
GuiCommands::Capture => todo!(),
|
GuiCommands::Capture(capture_path) => todo!(),
|
||||||
GuiCommands::Move => todo!(),
|
|
||||||
|
GuiCommands::Move(move_path) => {
|
||||||
|
client
|
||||||
|
.send_move(move_path.from, move_path.available_steps[0])
|
||||||
|
.await; // ugly
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
None => {
|
None => {
|
||||||
@@ -229,6 +237,14 @@ impl GameClient {
|
|||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(capture_path) = self.board.get_choosen_capture() {
|
||||||
|
let _ = self.cmd_sender.try_send(GuiCommands::Capture(capture_path));
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(move_path) = self.board.get_choosen_move() {
|
||||||
|
let _ = self.cmd_sender.try_send(GuiCommands::Move(move_path));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_network(&mut self) {
|
fn update_network(&mut self) {
|
||||||
|
|||||||
Reference in New Issue
Block a user