Sync scores between players

This commit is contained in:
2023-03-13 16:49:44 +01:00
parent 2fb71a3969
commit 1fc4e10c39
4 changed files with 101 additions and 0 deletions

View File

@@ -6,6 +6,7 @@ use board_shared::deck::RngDeck;
use board_shared::expr::is_valid_guess;
use board_shared::game::Hand;
use board_shared::position::Position2d;
use board_shared::score::calc_score;
use board_shared::tile::Tile;
use futures::channel::mpsc::{UnboundedReceiver, UnboundedSender};
use futures::StreamExt;
@@ -189,6 +190,7 @@ impl Room {
.hand
.complete(&mut self.deck)
.ok();
self.on_validated_move(self.active_player, &diff);
self.next_player();
} else {
self.send(
@@ -198,6 +200,23 @@ impl Room {
}
}
fn on_validated_move(&mut self, player_id: usize, diff: &[Position2d]) {
let tiles_placed = diff
.iter()
.map(|&pos| {
self.board
.get(pos.x, pos.y)
.expect("A placed tile should not be empty.")
})
.collect::<Vec<Tile>>();
self.players[player_id].score += calc_score(&tiles_placed);
self.broadcast(ServerMessage::SyncScore(
player_id,
self.players[player_id].score,
));
self.validated_board = self.board.clone();
}
fn reset_player_moves(&mut self) {
let diff = self.board.difference(&self.validated_board);
for pos in diff {