diff --git a/backend/game.py b/backend/game.py index 31e4f9e..6d43256 100644 --- a/backend/game.py +++ b/backend/game.py @@ -70,12 +70,12 @@ class Game: self.players[i].notify_self() self.play_turn() - def get_visible_players(self, player): + def get_visible_players(self, player:Player): i = self.players.index(player) sight = player.get_sight() return [{ 'name': self.players[j].name, - 'dist': min(abs(i - j), abs(i - len(self.players) - j)) + self.players[j].get_visibility(), + 'dist': min(abs(i - j), (i+ abs(j-len(self.players))), (j+ abs(i-len(self.players)))) + self.players[j].get_visibility(), 'lives': self.players[j].lives, 'max_lives': self.players[j].max_lives, } for j in range(len(self.players)) if i != j] @@ -123,7 +123,7 @@ class Game: def emporio(self): self.available_cards = [self.deck.draw() for i in range(len(self.players))] self.players[self.turn].pending_action = players.PendingAction.CHOOSE - self.players[self.turn].available_cards = [self.deck.draw() for i in range(len(self.players))] + self.players[self.turn].available_cards = self.available_cards self.players[self.turn].notify_self() def respond_emporio(self, player, i): @@ -175,6 +175,8 @@ class Game: def player_death(self, player: players.Player): print(f'player {player.name} died') + if (self.waiting_for > 0): + self.responders_did_respond_resume_turn() for c in player.hand: self.deck.scrap(c) for c in player.equipment: diff --git a/backend/players.py b/backend/players.py index bebb909..3e84f22 100644 --- a/backend/players.py +++ b/backend/players.py @@ -84,6 +84,7 @@ class Player: ser.pop('on_failed_response_cb') # ser.pop('expected_response') ser.pop('attacker') + ser['sight'] = self.get_sight() self.sio.emit('self', room=self.sid, data=json.dumps(ser, default=lambda o: o.__dict__)) self.sio.emit('self_vis', room=self.sid, data=json.dumps(self.game.get_visible_players(self), default=lambda o: o.__dict__)) self.game.notify_all() @@ -371,11 +372,13 @@ class Player: def get_sight(self): aim = 0 + range = 0 for card in self.equipment: - aim += card.sight_mod if card.is_weapon: - aim += card.range - return 1 + self.character.sight_mod + aim + range += card.range + else: + aim += card.sight_mod + return max(1, range) + aim + self.character.sight_mod def get_visibility(self): covers = 0 diff --git a/frontend/src/components/Player.vue b/frontend/src/components/Player.vue index 032dc01..3ab97b1 100644 --- a/frontend/src/components/Player.vue +++ b/frontend/src/components/Player.vue @@ -56,12 +56,14 @@ export default { pending_action: null, card_against: null, has_played_bang: false, - visiblePlayers: [], + playersDistances: [], is_my_turn: false, expected_response: null, shouldChooseCard: false, available_cards: [], win_status: undefined, + range: 1, + sight: 1, }), sockets: { role(role) { @@ -81,6 +83,7 @@ export default { this.expected_response = self.expected_response this.available_cards = self.available_cards this.win_status = self.win_status + this.sight = self.sight if (this.pending_action == 5 && self.target_p) { this.chooseCardFromPlayer(self.target_p) } else if (this.pending_action == 5) { @@ -90,7 +93,13 @@ export default { self_vis(vis) { console.log('received visibility update') console.log(vis) - this.visiblePlayers = JSON.parse(vis).map(player => { + this.playersDistances = JSON.parse(vis) + }, + }, + computed:{ + visiblePlayers() { + this.range; + return this.playersDistances.filter(x=> x.dist <= this.range).map(player => { return { name: player.name, number: player.dist !== undefined ? `${player.dist}⛰` : '', @@ -98,8 +107,6 @@ export default { is_character: true, }}) }, - }, - computed:{ hasToPickResponse() { return !this.is_my_turn && this.pending_action == 0 }, @@ -133,6 +140,12 @@ export default { if (this.pending_action == 2) { if (card.need_target && !(card.name == 'Bang!' && (this.has_played_bang && this.equipment.filter(x => x.name == 'Volcanic').length == 0))) { + if (card.name == 'Panico!' || (card.name == 'Bang!' && (this.has_played_bang && this.equipment.filter(x => x.name == 'Volcanic').length == 0))) + this.range = 1 + else if (card.name == 'Bang!') + this.range = this.sight + else + this.range = 999 this.card_against = card } else { this.really_play_card(card, null)