36 lines
831 B
Python
36 lines
831 B
Python
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
|
|
|
|
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
|