diff --git a/NOTE.md b/NOTE.md index 963291d..7755e9d 100644 --- a/NOTE.md +++ b/NOTE.md @@ -1,13 +1,13 @@ A faire : - Ecran de configuration de la partie - Nom dans les options +- Etat de la partie (en attente de l'autre joueur, ...) - Faire une scène incluant par défaut les boutons "Retour" (?) - Police d'écriture - Voir si les event listener intégré à pyglet sont plus pratique que l'event propagation - Documenter -- Ajouter plus d'event sur les widgets - Ecran de victoire - Faire marcher le tchat diff --git a/source/event/Listener.py b/source/event/Listener.py index 67c2a3f..ad013dc 100644 --- a/source/event/Listener.py +++ b/source/event/Listener.py @@ -34,4 +34,4 @@ class Listener: :param kwargs: the kwargs of the callbacks """ for listener in self._events_listener.get(name, set()): - listener(*args, **kwargs) + listener(self, *args, **kwargs) diff --git a/source/gui/scene/Game.py b/source/gui/scene/Game.py index c50498a..3472a5b 100644 --- a/source/gui/scene/Game.py +++ b/source/gui/scene/Game.py @@ -55,7 +55,7 @@ class Game(Scene): bomb_batch=self.batch_grid_bomb ) - def board_ally_ready(): + def board_ally_ready(widget): self.boat_ready_ally = True PacketBoatPlaced().send_connection(connection) @@ -78,7 +78,7 @@ class Game(Scene): bomb_batch=self.batch_grid_bomb ) - def board_enemy_bomb(cell: Point2D): + def board_enemy_bomb(widget, cell: Point2D): if not (self.boat_ready_ally and self.boat_ready_enemy): return if not self.my_turn: return PacketBombPlaced(position=cell).send_connection(connection) @@ -157,9 +157,9 @@ class Game(Scene): label_batch=self.batch_label, ) - def send_chat(): - text = self.chat_input.text - self.chat_input.text = "" + def send_chat(widget): + text = widget.text + widget.text = "" self.chat_log.text += "\n" + text self.chat_log.label.y = self.chat_log.y + self.chat_log.label.content_height diff --git a/source/gui/scene/RoomJoin.py b/source/gui/scene/RoomJoin.py index 9e4cdd0..5996c7e 100644 --- a/source/gui/scene/RoomJoin.py +++ b/source/gui/scene/RoomJoin.py @@ -72,7 +72,7 @@ class RoomJoin(Scene): self.connect.add_listener("on_click_release", self.button_connect) - def button_connect(self, *_): + def button_connect(self, widget, *_): network.Client( window=self.window, ip_address=self.entry_ip.text, @@ -80,7 +80,7 @@ class RoomJoin(Scene): username="Client" ).start() - def button_back_callback(self, *_): + def button_back_callback(self, widget, *_): from source.gui.scene import MainMenu self.window.set_scene(MainMenu) diff --git a/source/gui/widget/Checkbox.py b/source/gui/widget/Checkbox.py index fc11017..ea4c36a 100644 --- a/source/gui/widget/Checkbox.py +++ b/source/gui/widget/Checkbox.py @@ -63,6 +63,8 @@ class Checkbox(BoxWidget): @state.setter def state(self, state: bool): self._state = state + self.trigger_event("on_state_change") + self.trigger_event("on_checked" if state else "on_unchecked") self._refresh_tick() def swap_state(self): diff --git a/source/gui/widget/GameGrid.py b/source/gui/widget/GameGrid.py index 2d07c36..91870e6 100644 --- a/source/gui/widget/GameGrid.py +++ b/source/gui/widget/GameGrid.py @@ -78,10 +78,9 @@ class GameGrid(BoxWidget): **dict_filter_prefix("cursor_", kwargs) ) - self.add_listener("on_click_release", self.on_click_release) + self.add_listener("on_click_release", lambda _, *args: self.on_click_release(*args)) self.add_listener("on_hover_leave", lambda *_: self.hide_cursor()) - self.add_listener("on_hover", self._refresh_cursor) - + self.add_listener("on_hover", lambda _, *args: self._refresh_cursor(*args)) self._refresh_size() diff --git a/source/gui/widget/Input.py b/source/gui/widget/Input.py index e746620..41be4ad 100644 --- a/source/gui/widget/Input.py +++ b/source/gui/widget/Input.py @@ -114,6 +114,8 @@ class Input(BoxWidget): def on_text(self, char: str): if not self.activated: return # ignore si ce widget est désactivé / non sélectionné + if not self.label.multiline and char in "\r\n": return # si le texte est sur une ligne, ignore les retours + self.text += char # ajoute le caractère au label if self.regex is not None: # si il y a un regex de validation, applique le pour vérifier le texte diff --git a/source/gui/widget/Scroller.py b/source/gui/widget/Scroller.py index ee42ed6..eccbf95 100644 --- a/source/gui/widget/Scroller.py +++ b/source/gui/widget/Scroller.py @@ -57,7 +57,7 @@ class Scroller(BoxWidget): **dict_filter_prefix("label_", kwargs) ) - self.add_listener("on_click_release", lambda rel_x, *_: self._refresh_cursor(rel_x)) + self.add_listener("on_click_release", lambda _, rel_x, *__: self._refresh_cursor(rel_x)) self._from = from_ self._to = to @@ -100,6 +100,7 @@ class Scroller(BoxWidget): def value(self, value: float): if not self.from_ <= value <= self.to: raise ValueError(f"The value is not in range") self._value = value + self.trigger_event("on_value_change") self._refresh() @property