Sync scores between players
This commit is contained in:
@@ -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 {
|
||||
|
Reference in New Issue
Block a user