game controller cleanup

This commit is contained in:
2024-03-28 11:03:16 +01:00
parent 29b9839452
commit c386f38dcf
4 changed files with 82 additions and 68 deletions
+32 -4
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env python
from typing import List
from typing import List, Callable, Awaitable, Any
from model import Card, CardType, CardFaction, Player, Team, Serializable
@@ -20,6 +20,8 @@ class Game(Serializable):
default_health = 80
listeners: List[Callable[[str, dict], Awaitable[Any]]]
def __init__(self):
super().__init__()
self.market_stack = []
@@ -28,12 +30,22 @@ class Game(Serializable):
self.players = []
self.cards = []
self.teams = []
self.listeners = []
self.started = False
async def notify_controller(
self,
notification_type: str,
game_object: dict,
):
for l in self.listeners:
await l(notification_type, game_object)
def start_game(self):
pass
def create_card(self) -> Card:
async def create_card(self) -> Card:
card = Card(
card_type=CardType.ACTION,
faction=CardFaction.BLUE,
@@ -43,20 +55,36 @@ class Game(Serializable):
sprite="testsprite",
)
self.cards.append(card)
await self.notify_controller("create", card.serialize())
return card
def create_player(self, username: str, team: Team) -> Player:
async def create_player(self, username: str, team: Team | None = None) -> Player:
if team is None:
team = await self.create_team()
player = Player(username, team)
self.players.append(player)
await self.notify_controller("create", player.serialize_guest())
return player
def create_team(self) -> Team:
async def create_team(self) -> Team:
team = Team(health=self.default_health)
self.teams.append(team)
await self.notify_controller("create", team.serialize())
return team
def get_player(self, username: str) -> Player | None:
players = [p for p in self.players if p.username == username]
if players and len(players) > 0:
return players[0]
return None
def serialize_guest(self) -> dict:
return self.__dict__ | {
"listeners": None,
"cards": [card.uuid for card in self.cards],
"market_stack": [None for card in self.market_stack],
"market": [card.uuid for card in self.market],