Delay player hand creation at the beginning of the game

This commit is contained in:
2023-02-24 18:33:15 +01:00
parent ec6542aa52
commit 3d42bce413
2 changed files with 35 additions and 5 deletions

View File

@@ -21,6 +21,7 @@ pub struct Room {
pub connections: HashMap<SocketAddr, usize>,
pub players: Vec<Player>,
pub active_player: usize,
pub has_started: bool,
pub board: Board,
pub validated_board: Board,
pub deck: RngDeck,
@@ -51,13 +52,10 @@ impl Room {
self.broadcast(ServerMessage::PlayerConnected(player_name.clone()));
player_index = Some(self.players.len());
let mut hand = Hand::default();
hand.complete(&mut self.deck)?;
self.players.push(Player {
name: player_name,
score: 0,
hand,
hand: Hand::default(),
ws: Some(tx.clone()),
});
}
@@ -100,6 +98,7 @@ impl Room {
ClientMessage::CreateRoom(_) | ClientMessage::JoinRoom(_, _) => {
eprintln!("[{}] Illegal client message {:?}", self.name, msg);
}
ClientMessage::StartGame => self.on_start_game(),
ClientMessage::TileUse(pos, tile_idx) => {
if let Some(p) = self.connections.get(&addr) {
if *p == self.active_player {
@@ -119,6 +118,23 @@ impl Room {
!self.connections.is_empty()
}
fn on_start_game(&mut self) {
if self.has_started {
return;
}
self.has_started = true;
self.deck = RngDeck::new_complete();
for p in &mut self.players {
p.hand
.complete(&mut self.deck)
.expect("Not enough tiles in deck");
}
self.broadcast(ServerMessage::PlayerTurn(self.active_player));
}
fn on_tile_use(&mut self, pos: Position2d, tile_idx: usize) {
let hand = &mut self.players[self.active_player].hand;
if let Some(tile) = hand.remove(tile_idx) {