hand_visualizer

This commit is contained in:
Alberto Xamin 2020-11-21 14:39:56 +01:00
parent 92b4a09c05
commit 9d512404a1
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
4 changed files with 56 additions and 9 deletions

View File

@ -133,6 +133,18 @@ class Game:
for p in self.players:
p.notify_self()
self.players_map = {c.name: i for i, c in enumerate(self.players)}
def notify_all(self):
data = [{
'name': p.name,
'ncards': len(p.hand),
'equipment': [e.__dict__ for e in p.equipment],
'lives': p.lives,
'max_lives': p.max_lives,
'is_sheriff': isinstance(p.role, roles.Sheriff)
} for p in self.players]
self.sio.emit('players_update', room=self.name, data=data)
# game = Game()

View File

@ -80,6 +80,7 @@ class Player:
ser.pop('expected_response')
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()
def play_turn(self):
if self.lives == 0:

View File

@ -3,11 +3,14 @@
<h1>Lobby: {{ lobbyName }}</h1>
<h3>Giocatori (tu sei {{username}})</h3>
<div style="display:flex">
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/>
<!-- <div style="position: relative;width:260pt;height:400pt;"> -->
<Card v-for="p in playersTable" v-bind:key="p.card.name" :card="p.card"/>
<div v-for="p in playersTable" v-bind:key="p.card.name" style="position:relative;">
<Card :card="p.card"/>
<tiny-hand :ncards="p.ncards"/>
</div>
<!-- :style="p.style"/> -->
<!-- </div> -->
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/>
</div>
<div v-if="started">
<deck/>
@ -26,6 +29,7 @@ import Chooser from './Chooser.vue'
import Chat from './Chat.vue'
import Player from './Player.vue'
import Deck from './Deck.vue'
import TinyHand from './TinyHand.vue'
export default {
name: 'Lobby',
@ -35,6 +39,7 @@ export default {
Chat,
Player,
Deck,
TinyHand,
},
props: {
username: String
@ -54,21 +59,26 @@ export default {
this.started = data.started
this.players = data.players.map(x => {
return {
name:x,
name: x,
ncards: 0,
}
})
},
characters(data){
characters(data) {
this.availableCharacters = JSON.parse(data)
},
start() {
this.started = true;
},
self_vis(vis) {
console.log('received visibility update')
console.log(vis)
this.players = JSON.parse(vis)
players_update(data) {
console.log(data)
this.players = data
},
// self_vis(vis) {
// console.log('received visibility update')
// console.log(vis)
// this.players = JSON.parse(vis)
// },
},
computed: {
startGameCard() {
@ -91,7 +101,11 @@ export default {
let offsetAngle = 360.0 / this.players.length
let rotateAngle = (i) * offsetAngle
let size = 130
return {card:this.getPlayerCard(x), style: `position:absolute;transform: rotate(${rotateAngle}deg) translate(0, -${size}pt) rotate(-${rotateAngle}deg) translate(${size}pt,${size}pt)`}
return {
card:this.getPlayerCard(x),
style: `position:absolute;transform: rotate(${rotateAngle}deg) translate(0, -${size}pt) rotate(-${rotateAngle}deg) translate(${size}pt,${size}pt)`,
...x
}
})
}
},

View File

@ -0,0 +1,20 @@
<template>
<div style="position:absolute;transform:scale(0.5);bottom:50pt;">
<div class="card back" v-for="(n, i) in ncards" :style="`position:absolute; transform:rotate(${(i-ncards/2)*2}deg) translate(${i*15}px,0);`" v-bind:key="n" :alt="i">
<h4 v-if="n==ncards">PewPew!</h4>
<div class="emoji" v-if="n==ncards">💥</div>
</div>
</div>
</template>
<script>
export default {
name: 'TinyHand',
props: {
ncards: Number,
},
}
</script>
<style>
</style>