event cards

This commit is contained in:
Alberto Xamin 2020-12-17 15:34:12 +01:00
parent 9f15925bf1
commit 6562f5c1e8
No known key found for this signature in database
GPG Key ID: 4F026F48309500A2
6 changed files with 107 additions and 41 deletions

View File

@ -82,6 +82,7 @@ def get_me(sid, room):
sio.get_session(sid).game = de_games[0]
sio.enter_room(sid, de_games[0].name)
de_games[0].notify_room(sid)
de_games[0].notify_event_card()
else:
create_room(sid, room['name'])
if sio.get_session(sid).game == None:

View File

@ -1,6 +1,7 @@
from typing import List, Set, Dict, Tuple, Optional
import random
import bang.cards as cs
import bang.expansions.fistful_of_cards.card_events as ce
class Deck:
def __init__(self, game):
@ -18,10 +19,19 @@ class Deck:
if c.name not in self.all_cards_str:
self.all_cards_str.append(c.name)
self.game = game
self.event_cards: List[ce.CardEvent] = []
if 'fistful_of_cards' in game.expansions:
self.event_cards.extend(ce.get_all_events())
random.shuffle(self.event_cards)
random.shuffle(self.cards)
self.scrap_pile: List[cs.Card] = []
print(f'Deck initialized with {len(self.cards)} cards')
def flip_event(self):
if len(self.event_cards) > 0:
self.event_cards.append(self.event_cards.pop(0))
self.game.notify_event_card()
def peek(self, n_cards: int) -> list:
return self.cards[:n_cards]

View File

@ -1,96 +1,115 @@
from abc import ABC, abstractmethod
def CardEvent(ABC):
class CardEvent(ABC):
def __init__(self, name, icon):
self.name = name
self.icon = icon
def Agguato(CardEvent):
class Agguato(CardEvent):
def __init__(self):
super.__init__('Agguato', '🛁')
super().__init__('Agguato', '🛁')
self.desc = ''
self.desc_eng = ''
def Cecchino(CardEvent):
class Cecchino(CardEvent):
def __init__(self):
super.__init__('Cecchino', '👁')
super().__init__('Cecchino', '👁')
self.desc = ''
self.desc_eng = ''
def DeadMan(CardEvent):
class DeadMan(CardEvent):
def __init__(self):
super.__init__('Dead Man', '⚰️')
super().__init__('Dead Man', '⚰️')
self.desc = ''
self.desc_eng = ''
def FratelliDiSangue(CardEvent):
class FratelliDiSangue(CardEvent):
def __init__(self):
super.__init__('Fratelli Di Sangue', '🩸')
super().__init__('Fratelli Di Sangue', '🩸')
self.desc = ''
self.desc_eng = ''
def IlGiudice(CardEvent):
class IlGiudice(CardEvent):
def __init__(self):
super.__init__('Il Giudice', '👨‍⚖️')
super().__init__('Il Giudice', '👨‍⚖️')
self.desc = ''
self.desc_eng = ''
def Lazo(CardEvent):
class Lazo(CardEvent):
def __init__(self):
super.__init__('Lazo', '📿')
super().__init__('Lazo', '📿')
self.desc = ''
self.desc_eng = ''
def LeggeDelWest(CardEvent):
class LeggeDelWest(CardEvent):
def __init__(self):
super.__init__('Legge Del West', '⚖️')
super().__init__('Legge Del West', '⚖️')
self.desc = ''
self.desc_eng = ''
def LiquoreForte(CardEvent):
class LiquoreForte(CardEvent):
def __init__(self):
super.__init__('Liquore Forte', '🥃')
super().__init__('Liquore Forte', '🥃')
self.desc = ''
self.desc_eng = ''
def MinieraAbbandonata(CardEvent):
class MinieraAbbandonata(CardEvent):
def __init__(self):
super.__init__('Miniera Abbandonata', '')
super().__init__('Miniera Abbandonata', '')
self.desc = ''
self.desc_eng = ''
def PerUnPugnoDiCarte(CardEvent):
class PerUnPugnoDiCarte(CardEvent):
def __init__(self):
super.__init__('Per Un Pugno Di Carte', '🎴')
super().__init__('Per Un Pugno Di Carte', '🎴')
self.desc = ''
self.desc_eng = ''
def Peyote(CardEvent):
class Peyote(CardEvent):
def __init__(self):
super.__init__('Peyote', '🌵')
super().__init__('Peyote', '🌵')
self.desc = ''
self.desc_eng = ''
def Ranch(CardEvent):
class Ranch(CardEvent):
def __init__(self):
super.__init__('Ranch', '🐮')
super().__init__('Ranch', '🐮')
self.desc = ''
self.desc_eng = ''
def Rimbalzo(CardEvent):
class Rimbalzo(CardEvent):
def __init__(self):
super.__init__('Rimbalzo', '')
super().__init__('Rimbalzo', '')
self.desc = ''
self.desc_eng = ''
def RouletteRussa(CardEvent):
class RouletteRussa(CardEvent):
def __init__(self):
super.__init__('Roulette Russa', '🇷🇺')
super().__init__('Roulette Russa', '🇷🇺')
self.desc = ''
self.desc_eng = ''
def Vendetta(CardEvent):
class Vendetta(CardEvent):
def __init__(self):
super.__init__('Vendetta', '😤')
super().__init__('Vendetta', '😤')
self.desc = ''
self.desc_eng = ''
def get_all_events():
return [
Agguato(),
Cecchino(),
DeadMan(),
FratelliDiSangue(),
IlGiudice(),
Lazo(),
LeggeDelWest(),
LiquoreForte(),
MinieraAbbandonata(),
PerUnPugnoDiCarte(),
Peyote(),
Ranch(),
Rimbalzo(),
RouletteRussa(),
Vendetta(),
]

View File

@ -95,7 +95,7 @@ class Game:
current_roles = [type(x.role).__name__ for x in self.players]
current_roles = {x:current_roles.count(x) for x in current_roles}
self.sio.emit('chat_message', room=self.name, data=f'_allroles|{current_roles}')
self.players[self.turn].play_turn()
self.play_turn()
def choose_characters(self):
char_cards = random.sample(characters.all_characters(self.expansions), len(self.players)*2)
@ -216,6 +216,8 @@ class Game:
return self.players[(self.turn + 1) % len(self.players)]
def play_turn(self):
if isinstance(self.players[self.turn].role, roles.Sheriff):
self.deck.flip_event()
self.players[self.turn].play_turn()
def next_turn(self):
@ -224,6 +226,10 @@ class Game:
self.turn = (self.turn + 1) % len(self.players)
self.play_turn()
def notify_event_card(self):
if len(self.deck.event_cards) > 0:
self.sio.emit('event_card', room=self.name, data=self.deck.event_cards[0].__dict__)
def notify_scrap_pile(self):
print('scrap')
if self.deck.peek_scrap_pile():

View File

@ -73,12 +73,12 @@ export default {
0 0 0 3pt #6aa16e, 0 0 0 6pt white, 0 0 5pt 6pt #aaa
}
.card.high-noon{
box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa;
box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa;
border: 2pt dotted rgb(198 78 45);
}
.card.fistful-of-cards{
box-shadow: 0 0 0pt 6pt #181a1b, 0 0 5pt 6pt #aaa;
border: 2pt dotted rgb(50 122 172);
box-shadow: 0 0 0pt 4pt white, 0 0 5pt 4pt #aaa;
border: 2pt dashed rgb(50 122 172);
}
.card h4 {
position: absolute;
@ -143,5 +143,11 @@ export default {
box-shadow:
0 0 0 3pt #6aa16e, 0 0 0 6pt #181a1b, 0 0 5pt 6pt #aaa
}
.card.high-noon{
box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa;
}
.card.fistful-of-cards{
box-shadow: 0 0 0pt 4pt #181a1b, 0 0 5pt 4pt #aaa;
}
}
</style>

View File

@ -2,6 +2,11 @@
<div>
<div class="deck">
<card v-if="endTurnAction && isPlaying" v-show="pending_action == 2" :card="endTurnCard" class="end-turn" @click.native="endTurnAction"/>
<div v-if="eventCard" style="position:relative">
<div class="card fistful-of-cards" style="position:relative; bottom:-3pt;right:-3pt;"/>
<div class="card fistful-of-cards" style="position:absolute; bottom:-1.5pt;right:-1.5pt;"/>
<card :card="eventCard" :key="eventCard" :class="{'last-event':true,'fistful-of-cards':true}"/>
</div>
<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;"/>
@ -15,6 +20,7 @@
</div>
</div>
<transition name="list">
<p v-if="eventCard" class="center-stuff"><i>{{($i18n.locale=='it'?eventCard.desc:eventCard.desc_eng)}}</i></p>
<p v-if="desc" class="center-stuff"><i>{{desc}}</i></p>
</transition>
</div>
@ -37,6 +43,7 @@ export default {
icon: '💥',
},
lastScrap: null,
eventCard: null,
previousScrap: null,
pending_action: false,
isPlaying: true,
@ -50,7 +57,10 @@ export default {
},
scrap(card) {
this.lastScrap = card
}
},
event_card(card) {
this.eventCard = card
},
},
computed: {
endTurnCard() {
@ -105,6 +115,20 @@ export default {
transform: translate(0, 0) scale(1);
}
}
.last-event {
position: absolute;
top: 0;
animation-duration: 0.8s;
animation-name: slidein;
}
@keyframes slidein {
from {
transform: translate(30px, 20px) scale(1.3) rotate(-10deg);
}
to {
transform: translate(0, 0) scale(1);
}
}
.pick:hover {
transform: translate(-10px,0);
z-index: 1;