game: core: change player to player.isconnected

befort: if a player is disconnected he doesn't have an object
after: he have un object with a socket == None
This commit is contained in:
2024-01-19 15:38:04 +01:00
parent 2f4496c9bc
commit 7cf13640a1
11 changed files with 132 additions and 79 deletions

View File

@ -17,9 +17,7 @@ class Player(Spectator):
def __init__(self, game: Game, user_id: int, socket: WebsocketConsumer, rail_start_x: float, rail_start_y: float, rail_stop_x: float, rail_stop_y: float) -> None:
super().__init__(user_id, socket)
self.game: Game = game
super().__init__(user_id, socket, game)
self.position: Position = Position(0.5, 0)
@ -29,7 +27,7 @@ class Player(Spectator):
self.rail_start_y: float = rail_start_y
self.rail_stop_x: float = rail_stop_x
self.rail_stop_y: float = rail_stop_y
def receive(self, data: dict):
detail: str = data.get("detail")
@ -52,8 +50,6 @@ class Player(Spectator):
def update_position(self, data: dict):
print(data)
new_position: Position = Position()
new_position.position: float = data.get("position")
@ -83,7 +79,6 @@ class Player(Spectator):
new_position_verified: Position = new_position.copy()
if (distance > max_distance):
print(max_distance, distance, time_difference, self.position.position, new_position.position)
new_position_verified.position = self.position.position + max_distance * sign
if (not config.PADDLE_POSITION_MIN <= new_position_verified.position <= config.PADDLE_POSITION_MAX):
@ -92,15 +87,27 @@ class Player(Spectator):
new_position_verified.position = min(new_position_verified.position, config.PADDLE_POSITION_MAX)
invalid_pos: bool = new_position.position != new_position_verified.position
if (new_position != self.position):
self.game._update_player(self)
self.position = new_position
if (invalid_pos):
self.send("update_paddle", self.to_dict())
self.game.broadcast("update_paddle", self.to_dict(), [self])
def connect(self, socket: WebsocketConsumer):
self.socket = socket
self.accept()
self.game._update_player(self)
def is_connected(self):
return self.socket != None
def disconnect(self, code: int = 1000):
self.socket = None
self.game.leave(self)
def to_dict(self):
data = {
@ -112,6 +119,8 @@ class Player(Spectator):
"rail_start_y": self.rail_start_y,
"rail_stop_x": self.rail_stop_x,
"rail_stop_y": self.rail_stop_y,
"is_connected": self.is_connected(),
}
return data