50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
from transcendence.abstract.AbstractRoom import AbstractRoom
|
|
from transcendence.abstract.AbstractRoomMember import AbstractRoomMember
|
|
|
|
from .APlayer import APlayer
|
|
from .ASpectator import ASpectator
|
|
|
|
from ..models import GameModel
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
class AGame(AbstractRoom):
|
|
|
|
def __init__(self, game_type: str, game_id: int, game_manager):
|
|
|
|
super().__init__(game_manager)
|
|
|
|
self.game_manager = game_manager
|
|
|
|
self.model: GameModel = GameModel.objects.get(pk = game_id, game_type = game_type)
|
|
|
|
players: list[User] = self.model.get_players()
|
|
|
|
self.players: list[APlayer] = [APlayer(player.pk, None, self) for player in players]
|
|
|
|
self.spectators: list[ASpectator] = []
|
|
|
|
self.game_id: int = game_id
|
|
|
|
def get_players_id(self) -> list[int]:
|
|
return [player.pk for player in self.players]
|
|
|
|
def get_players_connected(self) -> list[APlayer]:
|
|
return [player for player in self.players if player.is_connected()]
|
|
|
|
def get_player_by_user_id(self, user_id: int) -> APlayer:
|
|
for player in self.players:
|
|
if (player.user.pk == user_id):
|
|
return player
|
|
return None
|
|
|
|
def broadcast(self, detail: str, data: dict = {}, excludeds: list[ASpectator | APlayer] = []):
|
|
|
|
members: list[APlayer | ASpectator] = self.get_players_connected() + self.spectators
|
|
|
|
for excluded in excludeds:
|
|
if (excluded in members):
|
|
members.remove(excluded)
|
|
|
|
for member in members:
|
|
member.send(detail, data) |