hand_visualizer
This commit is contained in:
parent
92b4a09c05
commit
9d512404a1
@ -133,6 +133,18 @@ class Game:
|
|||||||
for p in self.players:
|
for p in self.players:
|
||||||
p.notify_self()
|
p.notify_self()
|
||||||
self.players_map = {c.name: i for i, c in enumerate(self.players)}
|
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()
|
# game = Game()
|
||||||
|
@ -80,6 +80,7 @@ class Player:
|
|||||||
ser.pop('expected_response')
|
ser.pop('expected_response')
|
||||||
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__))
|
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):
|
def play_turn(self):
|
||||||
if self.lives == 0:
|
if self.lives == 0:
|
||||||
|
@ -3,11 +3,14 @@
|
|||||||
<h1>Lobby: {{ lobbyName }}</h1>
|
<h1>Lobby: {{ lobbyName }}</h1>
|
||||||
<h3>Giocatori (tu sei {{username}})</h3>
|
<h3>Giocatori (tu sei {{username}})</h3>
|
||||||
<div style="display:flex">
|
<div style="display:flex">
|
||||||
|
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/>
|
||||||
<!-- <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.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"/> -->
|
<!-- :style="p.style"/> -->
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
<Card v-if="startGameCard" :card="startGameCard" @click.native="startGame"/>
|
|
||||||
</div>
|
</div>
|
||||||
<div v-if="started">
|
<div v-if="started">
|
||||||
<deck/>
|
<deck/>
|
||||||
@ -26,6 +29,7 @@ import Chooser from './Chooser.vue'
|
|||||||
import Chat from './Chat.vue'
|
import Chat from './Chat.vue'
|
||||||
import Player from './Player.vue'
|
import Player from './Player.vue'
|
||||||
import Deck from './Deck.vue'
|
import Deck from './Deck.vue'
|
||||||
|
import TinyHand from './TinyHand.vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Lobby',
|
name: 'Lobby',
|
||||||
@ -35,6 +39,7 @@ export default {
|
|||||||
Chat,
|
Chat,
|
||||||
Player,
|
Player,
|
||||||
Deck,
|
Deck,
|
||||||
|
TinyHand,
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
username: String
|
username: String
|
||||||
@ -54,21 +59,26 @@ export default {
|
|||||||
this.started = data.started
|
this.started = data.started
|
||||||
this.players = data.players.map(x => {
|
this.players = data.players.map(x => {
|
||||||
return {
|
return {
|
||||||
name:x,
|
name: x,
|
||||||
|
ncards: 0,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
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) {
|
players_update(data) {
|
||||||
console.log('received visibility update')
|
console.log(data)
|
||||||
console.log(vis)
|
this.players = data
|
||||||
this.players = JSON.parse(vis)
|
|
||||||
},
|
},
|
||||||
|
// self_vis(vis) {
|
||||||
|
// console.log('received visibility update')
|
||||||
|
// console.log(vis)
|
||||||
|
// this.players = JSON.parse(vis)
|
||||||
|
// },
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
startGameCard() {
|
startGameCard() {
|
||||||
@ -91,7 +101,11 @@ export default {
|
|||||||
let offsetAngle = 360.0 / this.players.length
|
let offsetAngle = 360.0 / this.players.length
|
||||||
let rotateAngle = (i) * offsetAngle
|
let rotateAngle = (i) * offsetAngle
|
||||||
let size = 130
|
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
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
20
frontend/src/components/TinyHand.vue
Normal file
20
frontend/src/components/TinyHand.vue
Normal 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>
|
Loading…
Reference in New Issue
Block a user