This commit is contained in:
Alberto Xamin 2020-11-22 21:07:27 +01:00
parent f45c440348
commit 5674b9f541
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
3 changed files with 28 additions and 10 deletions

View File

@ -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:

View File

@ -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

View File

@ -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)