diff --git a/backend/__init__.py b/backend/__init__.py index 2472603..f729e3a 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -100,6 +100,7 @@ def get_me(sid, room): de_games[0].notify_event_card(sid) de_games[0].notify_scrap_pile(sid) de_games[0].notify_all() + de_games[0].notify_gold_rush_shop() de_games[0].notify_event_card() else: create_room(sid, room['name']) diff --git a/backend/bang/deck.py b/backend/bang/deck.py index eea818b..86596c5 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -36,10 +36,12 @@ class Deck: self.event_cards.append(random.choice(endgame_cards)) random.shuffle(self.cards) self.shop_deck = [] - self.shop_cards = [] if 'gold_rush' in game.expansions: import bang.expansions.gold_rush.shop_cards as gr + self.shop_cards = [None, None, None] self.shop_deck = gr.get_cards() + random.shuffle(self.shop_deck) + self.fill_gold_rush_shop() self.scrap_pile: List[cs.Card] = [] print(f'Deck initialized with {len(self.cards)} cards') @@ -48,6 +50,14 @@ class Deck: self.event_cards.append(self.event_cards.pop(0)) self.game.notify_event_card() + def fill_gold_rush_shop(self): + if not any([c == None for c in self.shop_cards]): + return + for i in range(3): + if self.shop_cards[i] == None: + self.shop_cards[i] = self.shop_deck.pop(0) + self.game.notify_gold_rush_shop() + def peek(self, n_cards: int) -> list: return self.cards[:n_cards] diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index 5e21515..c5bb515 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -6,7 +6,7 @@ class ShopCardKind(IntEnum): class ShopCard(Card): def __init__(self, name:str, cost:int, kind:ShopCardKind): - super().__init__('💵', cost, name=name) + super().__init__(suit='💵', number=cost, name=name) self.kind = kind def play_card(self, player, against, _with=None): diff --git a/backend/bang/game.py b/backend/bang/game.py index a6f2725..19358b9 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -27,7 +27,7 @@ class Game: self.initial_players = 0 self.password = '' self.expansions = [] - self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon'] + self.available_expansions = ['dodge_city', 'fistful_of_cards', 'high_noon', 'gold_rush'] self.shutting_down = False self.is_competitive = False self.disconnect_bot = True @@ -159,6 +159,8 @@ class Game: self.initial_players = len(self.players) self.distribute_roles() self.choose_characters() + if 'gold_rush' in self.expansions: + self.notify_gold_rush_shop() def distribute_roles(self): available_roles: List[roles.Role] = [] @@ -430,6 +432,12 @@ class Game: else: self.sio.emit('event_card', room=room, data=None) + def notify_gold_rush_shop(self, sid=None): + if 'gold_rush' in self.expansions and self.deck and self.deck.shop_cards and len(self.deck.shop_cards) > 0: + room = self.name if sid == None else sid + print(f'gold_rush_shop room={room}, data={self.deck.shop_cards}') + self.sio.emit('gold_rush_shop', room=room, data=json.dumps(self.deck.shop_cards, default=lambda o: o.__dict__)) + def notify_scrap_pile(self, sid=None): print('scrap') room = self.name if sid == None else sid diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index c205f67..1573457 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -27,6 +27,8 @@ export default { if (this.card && !isNaN(this.card.suit)) { let x = ['♦️','♣️','♥️','♠️'] return x[this.card.suit]; + } else if (this.card.suit) { + return this.card.suit; } return ''; }, @@ -107,6 +109,17 @@ export default { ); border: 2pt solid rgb(50 122 172); } +.card.brown.gold-rush { + box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa; + border: 2pt dotted #9C7340; +} +.card.black.gold-rush { + box-shadow: 0 0 0pt 4pt var(--bg-color), 0 0 5pt 4pt #aaa; + border: 2pt dotted #000; +} +.card.back.gold-rush { + background: repeating-linear-gradient(347deg, #ffb32f, #987e51 ); +} .card h4 { position: absolute; text-align: center; diff --git a/frontend/src/components/Deck.vue b/frontend/src/components/Deck.vue index 9da5e6f..4b6c7da 100644 --- a/frontend/src/components/Deck.vue +++ b/frontend/src/components/Deck.vue @@ -2,6 +2,14 @@
+ + + +
+
+
+ +
@@ -44,12 +52,18 @@ export default { name: 'PewPew!', icon: '💥', }, + goldRushCardBack: { + name: 'GoldRush!', + icon: '🤑️', + }, lastScrap: null, eventCard: null, previousScrap: null, pending_action: false, isPlaying: true, desc: '', + goldRushShopOpen: true, + goldRushCards: [], }), sockets: { self(self){ @@ -68,6 +82,10 @@ export default { expansion: 'fistful-of-cards', } : card }, + gold_rush_shop(cards) { + console.log('GOLD RUSH:'+ cards) + this.goldRushCards = JSON.parse(cards) + }, }, computed: { endTurnCard() { @@ -140,6 +158,10 @@ export default { opacity: 0.8; transform: translateY(-10px); } +.gold-rush:not(.back) { + animation-duration: 0.8s; + animation-name: slidein; +} @keyframes slidein { from { transform: translate(-100px, 10px) scale(1.3) rotate(-10deg);