diff --git a/backend/bang/characters.py b/backend/bang/characters.py index 2925e21..620599a 100644 --- a/backend/bang/characters.py +++ b/backend/bang/characters.py @@ -1,8 +1,13 @@ +from __future__ import annotations from abc import ABC, abstractmethod from bang.expansions import * -from typing import List +from typing import List, TYPE_CHECKING from globals import G +if TYPE_CHECKING: + from bang.players import Player + from bang.game import Game + class Character(ABC): def __init__(self, name: str, max_lives: int, sight_mod: int = 0, visibility_mod: int = 0, pick_mod: int = 0, desc: str = ''): super().__init__() @@ -16,13 +21,13 @@ class Character(ABC): self.icon = '🤷‍♂️' self.number = ''.join(['❤️']*self.max_lives) - def check(self, game, character): + def check(self, game:Game, character:Character): import bang.expansions.high_noon.card_events as ceh if game.check_event(ceh.Sbornia): return False return isinstance(self, character) - def special(self, player, data): + def special(self, player:Player, data): import bang.expansions.high_noon.card_events as ceh if player.game.check_event(ceh.Sbornia): return False diff --git a/backend/bang/expansions/gold_rush/shop_cards.py b/backend/bang/expansions/gold_rush/shop_cards.py index 9ed63b0..5ff68c9 100644 --- a/backend/bang/expansions/gold_rush/shop_cards.py +++ b/backend/bang/expansions/gold_rush/shop_cards.py @@ -59,6 +59,8 @@ class Bottiglia(ShopCard): def play_card(self, player, against=None, _with=None): # bang, birra, panico player.available_cards = [Bang(4,42), Birra(4,42), Panico(4,42)] + if not any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))): + player.available_cards.pop(0) for i in range(len(player.available_cards)): player.available_cards[i].must_be_used = True player.choose_text = 'choose_bottiglia' diff --git a/backend/bang/expansions/the_valley_of_shadows/cards.py b/backend/bang/expansions/the_valley_of_shadows/cards.py index add61f7..ac742ee 100644 --- a/backend/bang/expansions/the_valley_of_shadows/cards.py +++ b/backend/bang/expansions/the_valley_of_shadows/cards.py @@ -44,7 +44,7 @@ class Lemat(Card): player.equipment.append(self) player.notify_self() return True - elif not player.has_played_bang: + elif not player.has_played_bang and any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))): from bang.players import PendingAction player.available_cards = player.hand.copy() player.pending_action = PendingAction.CHOOSE diff --git a/backend/bang/expansions/the_valley_of_shadows/characters.py b/backend/bang/expansions/the_valley_of_shadows/characters.py index bc04ce8..60e4ddf 100644 --- a/backend/bang/expansions/the_valley_of_shadows/characters.py +++ b/backend/bang/expansions/the_valley_of_shadows/characters.py @@ -11,7 +11,7 @@ class BlackFlower(Character): def special(self, player, data): #fiori = suit.Clubs if player.special_use_count > 0 or not any((c.suit == cs.Suit.CLUBS for c in player.hand)): return False - if super().special(player, data): + if any((player.get_sight() >= p['dist'] for p in player.game.get_visible_players(player))) and super().special(player, data): from bang.players import PendingAction player.available_cards = [c for c in player.hand if c.suit == cs.Suit.CLUBS] player.special_use_count += 1 diff --git a/backend/bang/players.py b/backend/bang/players.py index b6a7942..8bcd78f 100644 --- a/backend/bang/players.py +++ b/backend/bang/players.py @@ -1,3 +1,4 @@ +from __future__ import annotations from enum import IntEnum import json from random import random, randrange, sample, uniform @@ -14,11 +15,14 @@ import bang.expansions.gold_rush.shop_cards as grc import bang.expansions.gold_rush.characters as grch import bang.expansions.the_valley_of_shadows.cards as tvosc import bang.expansions.the_valley_of_shadows.characters as tvosch -from typing import List +from typing import List, TYPE_CHECKING from metrics import Metrics from globals import G import sys +if TYPE_CHECKING: + from bang.game import Game + robot_pictures = [ 'https://i.imgur.com/40rAFIb.jpg', 'https://i.imgur.com/gG77VRR.jpg', @@ -78,7 +82,6 @@ class Player: print(r) def __init__(self, name, sid, bot=False, discord_token=None): - import bang.game as g super().__init__() self.name = name self.sid = sid @@ -90,7 +93,7 @@ class Player: self.avatar = robot_pictures[randrange(len(robot_pictures))] if self.discord_token: G.sio.start_background_task(self._get_avatar) - self.game: g = None + self.game: Game = None self.reset() def reset(self):