Archived
game controller cleanup
This commit is contained in:
+32
-4
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user