visibility update

This commit is contained in:
Alberto Xamin 2020-11-20 23:56:01 +01:00
parent 31508dbb94
commit d861a1869a
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
3 changed files with 20 additions and 7 deletions

View File

@ -74,7 +74,8 @@ class Game:
def get_visible_players(self, player): def get_visible_players(self, player):
i = self.players.index(player) i = self.players.index(player)
sight = player.get_sight() sight = player.get_sight()
return [self.players[j] for j in range(len(self.players)) if i != j and min(abs(i - j) - 1, abs(i - len(self.players) - j)) + self.players[j].get_visibility() <= sight] return [{'name': self.players[j].name, 'dist': min(abs(i - j) - 1, abs(i - len(self.players) - j)) + self.players[j].get_visibility()}
for j in range(len(self.players)) if i != j and min(abs(i - j) - 1, abs(i - len(self.players) - j)) + self.players[j].get_visibility() <= sight]
def next_player(self): def next_player(self):
return self.players[(self.turn + 1) % len(self.players)] return self.players[(self.turn + 1) % len(self.players)]

View File

@ -70,6 +70,7 @@ class Player:
ser.pop('sio') ser.pop('sio')
ser.pop('sid') ser.pop('sid')
self.sio.emit('self', room=self.sid, data=json.dumps(ser, default=lambda o: o.__dict__)) 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__))
def play_turn(self): def play_turn(self):
print(f'I {self.name} was notified that it is my turn') print(f'I {self.name} was notified that it is my turn')

View File

@ -4,7 +4,7 @@
<h3>Giocatori</h3> <h3>Giocatori</h3>
<div style="display:flex"> <div style="display:flex">
<!-- <div style="position: relative;width:260pt;height:400pt;"> --> <!-- <div style="position: relative;width:260pt;height:400pt;"> -->
<Card v-for="p in playersTable" v-bind:key="p" :card="p.card"/> <Card v-for="p in playersTable" v-bind:key="p.card.name" :card="p.card"/>
<!-- :style="p.style"/> --> <!-- :style="p.style"/> -->
<!-- </div> --> <!-- </div> -->
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/> <Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/>
@ -44,6 +44,7 @@ export default {
started: false, started: false,
players: [], players: [],
messages: [], messages: [],
distances: {},
availableCharacters: [], availableCharacters: [],
self: {}, self: {},
}), }),
@ -51,18 +52,27 @@ export default {
room(data) { room(data) {
this.lobbyName = data.name this.lobbyName = data.name
this.started = data.started this.started = data.started
this.players = data.players this.players = data.players.map(x => {
return {
name:x,
}
})
}, },
characters(data){ characters(data){
this.availableCharacters = JSON.parse(data) this.availableCharacters = JSON.parse(data)
}, },
start() { start() {
this.started = true; this.started = true;
},
self_vis(vis) {
console.log('received visibility update')
console.log(vis)
this.players = JSON.parse(vis)
} }
}, },
computed: { computed: {
startGameCard() { startGameCard() {
if (!this.started && this.players.length > 2 && this.players[0] == this.username) { if (!this.started && this.players.length > 2 && this.players[0].name == this.username) {
return { return {
name: 'Start', name: 'Start',
icon: '▶️', icon: '▶️',
@ -76,6 +86,7 @@ export default {
return this.availableCharacters.length > 0; return this.availableCharacters.length > 0;
}, },
playersTable() { playersTable() {
console.log('update players')
return this.players.map((x,i) => { return this.players.map((x,i) => {
let offsetAngle = 360.0 / this.players.length let offsetAngle = 360.0 / this.players.length
let rotateAngle = (i) * offsetAngle let rotateAngle = (i) * offsetAngle
@ -85,10 +96,10 @@ export default {
} }
}, },
methods: { methods: {
getPlayerCard(username) { getPlayerCard(player) {
return { return {
name: username, name: player.name,
number: (this.username == username) ? 'YOU' : (this.players[0] == username) ? 'OWNER' :'', number: ((this.username == player.name) ? 'YOU' : (this.players[0].name == player.name) ? 'OWNER' :'') + (player.dist ? `${player.dist}` : ''),
icon: '🤠', icon: '🤠',
is_character: true, is_character: true,
} }