Archived
Initial game setup when starting
This commit is contained in:
+42
-22
@@ -1,7 +1,8 @@
|
||||
from typing import Callable, Any
|
||||
from pydantic import ValidationError
|
||||
|
||||
from websockets.server import WebSocketServerProtocol
|
||||
from controller import GameController
|
||||
from controller import GameControllerInterface, ClientControllerInterface
|
||||
|
||||
from netcode.models import Message, LoginMessage
|
||||
|
||||
@@ -25,15 +26,19 @@ def vibe_check(t):
|
||||
return decorator
|
||||
|
||||
|
||||
class ClientController:
|
||||
class ClientController(ClientControllerInterface):
|
||||
websocket: WebSocketServerProtocol
|
||||
|
||||
game_controller: GameController
|
||||
game_controller: GameControllerInterface
|
||||
|
||||
player: Player
|
||||
|
||||
track_connection: Callable
|
||||
|
||||
def __init__(
|
||||
self, game_controller: GameController, websocket: WebSocketServerProtocol
|
||||
self,
|
||||
game_controller: GameControllerInterface,
|
||||
websocket: WebSocketServerProtocol,
|
||||
):
|
||||
self.websocket = websocket
|
||||
self.on_message = self.login_context
|
||||
@@ -41,7 +46,6 @@ class ClientController:
|
||||
self.game_controller = game_controller
|
||||
|
||||
async def listen(self):
|
||||
"""Initializes the client controller"""
|
||||
await self.send(
|
||||
Message(
|
||||
type="context",
|
||||
@@ -50,6 +54,8 @@ class ClientController:
|
||||
)
|
||||
)
|
||||
|
||||
await self.game_controller.announce_game(self.websocket)
|
||||
|
||||
async for message in self.websocket:
|
||||
await self.on_message(message)
|
||||
|
||||
@@ -59,17 +65,25 @@ class ClientController:
|
||||
async def send_error(self, error: str):
|
||||
await self.send(Message(type="error", data_type="error", data=error))
|
||||
|
||||
async def send_announce_dict(self, notification_type: str, data: dict):
|
||||
await self.send(Message(type=notification_type, data_type="object", data=data))
|
||||
async def send_announce_dict(
|
||||
self,
|
||||
notification_type: str,
|
||||
data: dict,
|
||||
client_filter: Callable[["ClientController"], Any] = lambda x: True,
|
||||
):
|
||||
if client_filter(self):
|
||||
await self.send(
|
||||
Message(type=notification_type, data_type="object", data=data)
|
||||
)
|
||||
|
||||
@vibe_check(Message)
|
||||
async def game_context(self, message: Message):
|
||||
"""Handles messages when the client is logged in"""
|
||||
|
||||
print(message)
|
||||
|
||||
@vibe_check(LoginMessage)
|
||||
async def login_context(self, message: LoginMessage):
|
||||
"""Handles messages when the client isn't logged in"""
|
||||
|
||||
username = message.data
|
||||
if message.type == "register":
|
||||
|
||||
@@ -83,11 +97,12 @@ class ClientController:
|
||||
|
||||
player = await self.game_controller.game.create_player(username)
|
||||
elif message.type == "login":
|
||||
player = self.game_controller.game.get_player(username)
|
||||
player2 = self.game_controller.game.get_player(username)
|
||||
|
||||
if player is None:
|
||||
if player2 is None:
|
||||
await self.send_error("player doesn't exists")
|
||||
return
|
||||
player = player2
|
||||
|
||||
else:
|
||||
await self.send_error("invalid message type for context")
|
||||
@@ -98,8 +113,6 @@ class ClientController:
|
||||
self.on_message = self.pregame_context
|
||||
print("user logged in : " + username)
|
||||
|
||||
await self.game_controller.announce_game(self.websocket)
|
||||
|
||||
await self.send(
|
||||
Message(
|
||||
type="set",
|
||||
@@ -107,19 +120,26 @@ class ClientController:
|
||||
data=self.player.uuid,
|
||||
)
|
||||
)
|
||||
|
||||
for player in self.game_controller.game.players:
|
||||
if player.team != self.player.team:
|
||||
continue
|
||||
|
||||
await self.send(
|
||||
Message(type="update", data_type="object", data=player.serialize_team())
|
||||
await self.send(
|
||||
Message(
|
||||
type="context",
|
||||
data_type="game_context_id",
|
||||
data="pregame",
|
||||
)
|
||||
)
|
||||
|
||||
# for player in self.game_controller.game.players:
|
||||
# if player.team != self.player.team:
|
||||
# continue
|
||||
|
||||
# await self.send(
|
||||
# Message(type="update", data_type="object", data=player.serialize_team())
|
||||
# )
|
||||
|
||||
@vibe_check(Message)
|
||||
async def pregame_context(self, message: Message):
|
||||
"""Waits for players"""
|
||||
|
||||
if message.type == "ready":
|
||||
self.player.ready = bool(message.data)
|
||||
if all(p.ready for p in self.game_controller.game.players):
|
||||
self.game_controller.start_game()
|
||||
await self.game_controller.start_game()
|
||||
|
||||
Reference in New Issue
Block a user