core: game: split backed django
This commit is contained in:
46
games/objects/AGame.py
Normal file
46
games/objects/AGame.py
Normal file
@ -0,0 +1,46 @@
|
||||
from transcendence.abstract.AbstractRoom import AbstractRoom
|
||||
from transcendence.abstract.AbstractRoomMember import AbstractRoomMember
|
||||
|
||||
from .APlayer import APlayer
|
||||
from .ASpectator import ASpectator
|
||||
|
||||
from ..models import GameModel
|
||||
|
||||
class AGame(AbstractRoom):
|
||||
|
||||
def __init__(self, game_type: str, game_id: int, game_manager):
|
||||
|
||||
super().__init__(game_manager)
|
||||
|
||||
self.model: GameModel = GameModel.objects.get(pk = game_id, game_type = game_type)
|
||||
|
||||
players_id: list[int] = self.model.get_players_id()
|
||||
|
||||
self.players: list[APlayer] = [APlayer(player_id, None, self) for player_id in players_id]
|
||||
|
||||
self.spectators: list[ASpectator] = []
|
||||
|
||||
self.game_id: int = game_id
|
||||
|
||||
def get_players_id(self) -> list[int]:
|
||||
return [player.user_id 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_id == 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)
|
Reference in New Issue
Block a user