diff --git a/backend/__init__.py b/backend/__init__.py index 1d6cd71..6dfda89 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -69,6 +69,11 @@ def private(sid): g.set_private() advertise_lobbies() +@sio.event +def toggle_expansion(sid, expansion_name): + g = sio.get_session(sid).game + g.toggle_expansion(expansion_name) + @sio.event def join_room(sid, room): room_name = room['name'] diff --git a/backend/bang/game.py b/backend/bang/game.py index 091e778..75c3ddc 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -22,13 +22,31 @@ class Game: self.password = '' self.expansions = [] + def notify_room(self): + self.sio.emit('room', room=self.name, data={ + 'name': self.name, + 'started': self.started, + 'players': [{'name':p.name, 'ready': False} for p in self.players], + 'password': self.password, + 'expansions': self.expansions, + }) + + def toggle_expansion(self, expansion_name): + if not self.started: + print('toggling', expansion_name) + if expansion_name in self.expansions: + self.expansions.remove(expansion_name) + else: + self.expansions.append(expansion_name) + self.notify_room() + def add_player(self, player: players.Player): if player in self.players or len(self.players) >= 7: return player.join_game(self) self.players.append(player) print(f'Added player {player.name} to game') - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': False} for p in self.players], 'password': self.password}) + self.notify_room() self.sio.emit('chat_message', room=self.name, data=f'{player.name} è entrato nella lobby.') def set_private(self): @@ -37,11 +55,11 @@ class Game: print(self.name, 'is now private pwd', self.password) else: self.password = '' - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': False} for p in self.players], 'password': self.password}) + self.notify_room() def notify_character_selection(self): self.readyCount += 1 - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [{'name':p.name, 'ready': p.character!=None} for p in self.players], 'password': self.password}) + self.notify_room() if self.readyCount == len(self.players): self.distribute_roles() @@ -214,7 +232,7 @@ class Game: if self.started and index <= self.turn: self.turn -= 1 self.players.pop(index) - self.sio.emit('room', room=self.name, data={'name': self.name, 'started': self.started, 'players': [p.name for p in self.players]}) + self.notify_room() self.sio.emit('chat_message', room=self.name, data=f'{player.name} è morto.') if self.started: self.sio.emit('chat_message', room=self.name, data=f'{player.name} era {player.role.name}!') diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index 73c6d17..df51713 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -27,6 +27,10 @@ +
+

Espansioni

+ Dodge City +
@@ -78,12 +82,14 @@ export default { selectedInfo: null, privateRoom: false, password: '', + useDodgeCity: false, }), sockets: { room(data) { this.lobbyName = data.name this.started = data.started this.password = data.password + this.useDodgeCity = data.expansions.indexOf('dodge_city') !== -1 this.players = data.players.map(x => { return { name: x.name, @@ -141,6 +147,10 @@ export default { } }, methods: { + toggleExpansions(name) { + if (!this.isRoomOwner) return; + this.$socket.emit('toggle_expansion', name) + }, getActionEmoji(p) { if (p.is_my_turn === undefined || p.pending_action === undefined) return ''; if (p.pending_action != 4) {