feat(ui): работа с новыми классами состояний приложения

This commit is contained in:
2026-08-09 02:10:02 +03:00
parent c07bf63b8b
commit 63a51c7ae3
2 changed files with 50 additions and 60 deletions
+19 -13
View File
@@ -1,8 +1,9 @@
from typing import Callable, Optional, cast
from typing import Callable, Optional
import wx
from wx.lib.pubsub import pub
from mind_reader.core import GameState
from ...core import LobbyState
class RoleColumn(wx.Panel):
@@ -48,12 +49,13 @@ class RoleColumn(wx.Panel):
class LobbyPanel(wx.Panel):
def __init__(self, parent, state: GameState):
def __init__(self, parent, state: LobbyState):
super().__init__(parent)
self.state = state
self._init_ui()
self.Bind(wx.EVT_WINDOW_DESTROY, self._on_destroy)
def _init_ui(self):
main_sizer = wx.BoxSizer(wx.VERTICAL)
@@ -83,12 +85,12 @@ class LobbyPanel(wx.Panel):
self.SetSizer(main_sizer)
self.refresh_from_state()
pub.subscribe(self.refresh, "lobby.refresh")
self.refresh(self.state)
def _on_role_click(self, target_role: str):
success = self.state.set_player_role(
self.state.local_player_name, target_role
)
success = self.state.set_player_role(target_role)
if not success:
wx.MessageBox(
@@ -98,15 +100,19 @@ class LobbyPanel(wx.Panel):
)
return
self.refresh_from_state()
self.refresh(self.state)
def _on_start_click(self, event):
wx.MessageBox("Сессия запущена!", "Старт", wx.OK | wx.ICON_INFORMATION)
def refresh_from_state(self):
def _on_destroy(self, event):
pub.unsubscribe(self.refresh, "lobby.refresh")
event.Skip()
def refresh(self, state: LobbyState):
players_by_role = {"NONE": [], "SETTER": [], "GUESSER": []}
for player, role in self.state.lobby_players.items():
for player, role in state.players.items():
if role in players_by_role:
players_by_role[role].append(player)
@@ -114,9 +120,9 @@ class LobbyPanel(wx.Panel):
self.column_setter.set_players(players_by_role["SETTER"])
self.column_guesser.set_players(players_by_role["GUESSER"])
local_player_role = self.state.local_player_role
local_player_role = state.local_player_role
self.column_none.set_role_state(local_player_role)
self.column_setter.set_role_state(local_player_role)
self.column_guesser.set_role_state(local_player_role)
self.button_start.Enable(self.state.is_session_ready())
self.button_start.Enable(state.is_ready())