from typing import Tuple
from pyspades.constants import (
BLUE_FLAG, GREEN_FLAG,
CTF_MODE,
BLUE_BASE, GREEN_BASE,
)
from pyspades.entities import Flag, Base
from pyspades.protocol import BaseProtocol
[docs]class Team:
score = None
flag = None
base = None
other = None
protocol = None
name = None
kills = None
def __init__(self, team_id: int, name: str, color: Tuple[int, int, int],
spectator: bool, protocol: BaseProtocol) -> None:
self.id = team_id
self.name = name
self.protocol = protocol
self.color = color
self.spectator = spectator
[docs] def get_players(self) -> None:
for player in self.protocol.players.values():
if player.team is self:
yield player
[docs] def count(self) -> int:
count = 0
for player in self.protocol.players.values():
if player.team is self:
count += 1
return count
[docs] def initialize(self) -> None:
if self.spectator:
return
self.score = 0
self.kills = 0
if self.protocol.game_mode == CTF_MODE:
self.set_flag()
self.set_base()
[docs] def set_flag(self) -> Flag:
entity_id = [BLUE_FLAG, GREEN_FLAG][self.id]
if self.flag is None:
self.flag = Flag(entity_id, self.protocol)
self.flag.team = self
self.protocol.entities.append(self.flag)
location = self.get_entity_location(entity_id)
returned = self.protocol.on_flag_spawn(location[0], location[1],
location[2], self.flag, entity_id)
if returned is not None:
location = returned
self.flag.set(*location)
self.flag.player = None
return self.flag
[docs] def set_base(self) -> Base:
entity_id = [BLUE_BASE, GREEN_BASE][self.id]
if self.base is None:
self.base = Base(entity_id, self.protocol)
self.base.team = self
self.protocol.entities.append(self.base)
location = self.get_entity_location(entity_id)
returned = self.protocol.on_base_spawn(location[0], location[1],
location[2], self.base, entity_id)
if returned is not None:
location = returned
self.base.set(*location)
return self.base
[docs] def get_entity_location(self, entity_id: int) -> Tuple[int, int, int]:
return self.get_random_location(True)
[docs] def get_random_location(self, force_land: bool = False) -> Tuple[int, int, int]:
x_offset = self.id * 384
return self.protocol.get_random_location(force_land, (
x_offset, 128, 128 + x_offset, 384))
[docs] def get_entities(self):
for item in self.protocol.entities:
if item.team is self:
yield item
def __repr__(self):
return "{}(id={}, name={}, color={}, spectator={}, protocol)".format(
self.__class__.__name__, self.id,
self.name, self.color, self.spectator
)