From 445399d7b3d88a90b833841326de2dd21193e639 Mon Sep 17 00:00:00 2001 From: Alberto Xamin Date: Tue, 15 Jun 2021 18:52:30 +0200 Subject: [PATCH] buy cards and earn nuggets on other player damage --- backend/__init__.py | 5 +++++ backend/bang/deck.py | 1 + backend/bang/expansions/gold_rush/shop_cards.py | 2 +- backend/bang/game.py | 1 + backend/bang/players.py | 14 ++++++++++++++ frontend/src/components/Card.vue | 2 ++ frontend/src/components/Deck.vue | 11 ++++++++--- frontend/src/components/Lobby.vue | 5 ++++- 8 files changed, 36 insertions(+), 5 deletions(-) diff --git a/backend/__init__.py b/backend/__init__.py index f729e3a..cc2a041 100644 --- a/backend/__init__.py +++ b/backend/__init__.py @@ -419,6 +419,11 @@ def holyday_special(sid, data): ses: Player = sio.get_session(sid) ses.holyday_special(data) +@sio.event +def buy_gold_rush_card(sid, data:int): + ses: Player = sio.get_session(sid) + ses.buy_gold_rush_card(data) + @sio.event def get_cards(sid): import bang.cards as c diff --git a/backend/bang/deck.py b/backend/bang/deck.py index 86596c5..d452746 100644 --- a/backend/bang/deck.py +++ b/backend/bang/deck.py @@ -55,6 +55,7 @@ class Deck: return for i in range(3): if self.shop_cards[i] == None: + print(f'replacing gr-card {i}') self.shop_cards[i] = self.shop_deck.pop(0) self.game.notify_gold_rush_shop() diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index c5bb515..5b3ef68 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -125,7 +125,7 @@ class Piccone(ShopCard): class Ricercato(ShopCard): def __init__(self): super().__init__("Ricercato", 2, ShopCardKind.BLACK) - self.icon = '⛏️' + self.icon = '🤠️' def play_card(self, player, against, _with=None): pass diff --git a/backend/bang/game.py b/backend/bang/game.py index 19358b9..add5b20 100644 --- a/backend/bang/game.py +++ b/backend/bang/game.py @@ -614,6 +614,7 @@ class Game: 'equipment': [e.__dict__ for e in p.equipment], 'lives': p.lives, 'max_lives': p.max_lives, + 'gold_nuggets': p.gold_nuggets, 'is_sheriff': isinstance(p.role, roles.Sheriff), 'is_my_turn': p.is_my_turn, 'pending_action': p.pending_action, diff --git a/backend/bang/players.py b/backend/bang/players.py index 1cbe9d6..cf352d3 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -74,6 +74,7 @@ class Player: self.choose_text = 'choose_card_to_get' self.using_rimbalzo = 0 # 0 no, 1 scegli giocatore, 2 scegli carta self.bang_used = 0 + self.gold_nuggets = 0 def join_game(self, game): self.game = game @@ -866,6 +867,9 @@ class Player: self.sio.emit('chat_message', room=self.game.name, data=f'_special_el_gringo|{self.name}|{self.attacker.name}') self.attacker.notify_self() + if self.attacker and 'gold_rush' in self.game.expansions: + self.attacker.gold_nuggets += 1 + self.attacker.notify_self() self.heal_if_needed() self.mancato_needed = 0 self.expected_response = [] @@ -987,6 +991,16 @@ class Player: self.hand.append(self.game.deck.draw(True)) self.notify_self() + def buy_gold_rush_card(self, index): + print(f'{self.name} wants to buy gr-card index {index} in room {self.game.name}') + card = self.game.deck.shop_cards[index] + if self.pending_action == PendingAction.PLAY and self.gold_nuggets >= card.number: + self.gold_nuggets -= card.number + self.game.deck.shop_deck.append(card) + self.game.deck.shop_cards[index] = None + self.game.deck.fill_gold_rush_shop() + self.notify_self() + def end_turn(self, forced=False): print(f"{self.name} wants to end his turn") if not self.is_my_turn and not forced: diff --git a/frontend/src/components/Card.vue b/frontend/src/components/Card.vue index 1573457..c6812ab 100644 --- a/frontend/src/components/Card.vue +++ b/frontend/src/components/Card.vue @@ -33,6 +33,8 @@ export default { return ''; }, number() { + if (isNaN(this.card.suit)) + return this.card.number if (this.card.number === 1) return 'A' else if (this.card.number === 11) return 'J' else if (this.card.number === 12) return 'Q' diff --git a/frontend/src/components/Deck.vue b/frontend/src/components/Deck.vue index 4b6c7da..b9daa9c 100644 --- a/frontend/src/components/Deck.vue +++ b/frontend/src/components/Deck.vue @@ -2,9 +2,9 @@
- - - + + +
@@ -64,12 +64,14 @@ export default { desc: '', goldRushShopOpen: true, goldRushCards: [], + gold_nuggets: 0, }), sockets: { self(self){ self = JSON.parse(self) this.isPlaying = self.lives > 0 || self.is_ghost this.pending_action = self.pending_action + this.gold_nuggets = self.gold_nuggets }, scrap(card) { this.lastScrap = card @@ -120,6 +122,9 @@ export default { this.$socket.emit('draw', pile) } }, + buy_gold_rush_card(index) { + this.$socket.emit('buy_gold_rush_card', index) + }, event() { if (this.pending_action !== false) { this.$socket.emit('draw', 'event') diff --git a/frontend/src/components/Lobby.vue b/frontend/src/components/Lobby.vue index 9508ff2..af1d6d5 100644 --- a/frontend/src/components/Lobby.vue +++ b/frontend/src/components/Lobby.vue @@ -20,6 +20,9 @@
+ + 💵️ + ❤️ 💀 @@ -221,7 +224,7 @@ export default { playersTable() { if (Vue.config.devtools) console.log('update players') - return this.players.map((x,i) => { + return this.players.map((x, i) => { let offsetAngle = 360.0 / this.players.length let rotateAngle = (i) * offsetAngle let size = 130