proper card scrapping

This commit is contained in:
Alberto Xamin 2020-11-23 20:38:36 +01:00
parent a8e728c966
commit 4ba53b2589
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
5 changed files with 51 additions and 5 deletions

View File

@ -106,5 +106,10 @@ def choose(sid, card_index):
ses = sio.get_session(sid)
ses.choose(card_index)
@sio.event
def scrap(sid, card_index):
ses = sio.get_session(sid)
ses.scrap(card_index)
if __name__ == '__main__':
eventlet.wsgi.server(eventlet.listen(('', 5001)), app)

View File

@ -234,7 +234,7 @@ class Player:
else:
self.equipment.append(card)
else:
did_play_card = len(self.hand) + 1 > self.lives
did_play_card = False
if isinstance(card, cards.Bang) and self.has_played_bang and not any([isinstance(c, cards.Volcanic) for c in self.equipment]) and againts != None:
self.hand.insert(hand_index, card)
return
@ -461,6 +461,11 @@ class Player:
covers += card.vis_mod
return self.character.visibility_mod + covers
def scrap(self, card_index):
if self.is_my_turn or isinstance(self.character, characters.SidKetchum):
self.game.deck.scrap(self.hand.pop(card_index))
self.notify_self()
def end_turn(self, forced=False):
if not self.is_my_turn: return
if len(self.hand) > self.max_lives and not forced:

View File

@ -1,5 +1,6 @@
<template>
<div class="deck">
<card v-if="endTurnAction" v-show="pending_action == 2" :card="endTurnCard" class="end-turn" @click.native="endTurnAction"/>
<div style="position:relative">
<div class="card back" style="position:absolute; bottom:-3pt;right:-3pt;"/>
<div class="card back" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/>
@ -18,6 +19,9 @@ import Card from '@/components/Card.vue'
export default {
name: 'Deck',
props: {
endTurnAction: Function
},
components: {
Card,
},
@ -26,6 +30,10 @@ export default {
name: 'PewPew!',
icon: '💥',
},
endTurnCard: {
name: 'Termina turno!',
icon: '⛔️'
},
lastScrap: null,
previousScrap: null,
pending_action: false,
@ -88,4 +96,10 @@ export default {
transform: translate(0,10px);
z-index: 1;
}
.end-turn {
box-shadow:
0 0 0 3pt rgb(138, 12, 12),
0 0 0 6pt white,
0 0 5pt 6pt #aaa !important;
}
</style>

View File

@ -22,8 +22,8 @@
<!-- </div> -->
</div>
<div v-if="started">
<deck/>
<player :chooseCardFromPlayer="choose"/>
<deck :endTurnAction="()=>{wantsToEndTurn = true}"/>
<player :isEndingTurn="wantsToEndTurn" :cancelEndingTurn="()=>{wantsToEndTurn = false}" :chooseCardFromPlayer="choose"/>
</div>
</div>
<chat/>
@ -65,6 +65,7 @@ export default {
self: {},
hasToChoose: false,
chooseCards: [],
wantsToEndTurn: false,
}),
sockets: {
room(data) {

View File

@ -1,7 +1,7 @@
<template>
<div>
<p v-if="instruction" class="center-stuff">{{instruction}}</p>
<button v-if="canEndTurn" @click="end_turn">Termina Turno</button>
<!-- <button v-if="canEndTurn" @click="end_turn">Termina Turno</button> -->
<div class="equipment-slot">
<Card v-if="my_role" :card="my_role" class="back"
@pointerenter.native="desc=my_role.goal" @pointerleave.native="desc=''"/>
@ -34,6 +34,7 @@
<Chooser v-if="notifycard" :text="`${notifycard.player} ha pescato come seconda carta:`" :cards="[notifycard.card]" hintText="Se la carta è cuori o quadri ne pesca un'altra" class="turn-notify-4s"/>
<Chooser v-if="!show_role && is_my_turn" text="GIOCA IL TUO TURNO" :key="is_my_turn" class="turn-notify" />
<Chooser v-if="hasToPickResponse" :text="`ESTRAI UNA CARTA ${attacker?('PER DIFENDERTI DA '+attacker):''}`" :key="hasToPickResponse" class="turn-notify" />
<Chooser v-if="showScrapScreen" :text="`SCARTA ${hand.length}/${lives}`" :cards="hand" :select="scrap" :key="hasToPickResponse" :cancel="cancelEndingTurn"/>
</div>
</template>
@ -44,7 +45,9 @@ import Chooser from '@/components/Chooser.vue'
export default {
name: 'Player',
props: {
chooseCardFromPlayer: Function
chooseCardFromPlayer: Function,
isEndingTurn: Boolean,
cancelEndingTurn: Function,
},
components: {
Card,
@ -113,6 +116,9 @@ export default {
}
},
computed:{
showScrapScreen() {
return this.isEndingTurn && !this.canEndTurn && this.is_my_turn;
},
visiblePlayers() {
this.range;
return this.playersDistances.filter(x => {
@ -157,6 +163,9 @@ export default {
console.log('ending turn')
this.$socket.emit('end_turn')
},
scrap(c) {
this.$socket.emit('scrap', this.hand.indexOf(c))
},
play_card(card) {
if (this.pending_action == 2) {
if (card.need_target &&
@ -203,6 +212,18 @@ export default {
},
mounted() {
this.$socket.emit('refresh')
},
watch: {
isEndingTurn(val) {
if (val && this.canEndTurn) {
this.end_turn()
}
},
canEndTurn(val) {
if (val && this.isEndingTurn) {
this.end_turn()
}
},
}
}
</script>