feat(ui): работа с новыми классами состояний приложения
This commit is contained in:
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user