import datetime import uuid from dataclasses import dataclass, field from typing import Optional @dataclass class Position: x: int y: int @dataclass class Player: name: str uuid: str = field(default_factory=lambda: str(uuid.uuid4())) position: Position = field(default_factory=lambda: Position(0, 0)) move_count: int = 0 move_attempt_count: int = 0 last_seen: datetime.datetime = field( default_factory=lambda: datetime.datetime.now() ) active: bool = True can_be_deactivated: bool = True reached_destination: bool = False def reset_timeout(self) -> None: self.last_seen = datetime.datetime.now() class PlayerList(list[Player]): def find(self, uuid: str) -> Optional[Player]: for player in self: if player.uuid == uuid: return player return None