added a popup for the quit button in the game
This commit is contained in:
parent
16e88462a1
commit
aa4b2f8eb2
6 changed files with 82 additions and 10 deletions
|
@ -3,12 +3,13 @@ from typing import TYPE_CHECKING
|
|||
|
||||
from source.core.enums import BombState
|
||||
from source.core.error import InvalidBombPosition, PositionAlreadyShot
|
||||
from source.gui.scene import Result
|
||||
from source.gui.scene import GameResult
|
||||
from source.gui.scene.abc import Scene
|
||||
from source.gui import widget, texture
|
||||
from source.gui import widget, texture, scene
|
||||
from source import core
|
||||
from source.network.packet import PacketChat, PacketBombPlaced, PacketBoatPlaced, PacketBombState
|
||||
from source.type import Point2D
|
||||
from source.utils import StoppableThread
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from source.gui.window import Window
|
||||
|
@ -16,6 +17,7 @@ if TYPE_CHECKING:
|
|||
|
||||
class Game(Scene):
|
||||
def __init__(self, window: "Window",
|
||||
thread: StoppableThread,
|
||||
connection: socket.socket,
|
||||
|
||||
boats_length: list,
|
||||
|
@ -28,6 +30,7 @@ class Game(Scene):
|
|||
**kwargs):
|
||||
super().__init__(window, **kwargs)
|
||||
|
||||
self.thread = thread
|
||||
self.connection = connection
|
||||
self.boats_length = boats_length
|
||||
self.name_ally = name_ally
|
||||
|
@ -171,6 +174,9 @@ class Game(Scene):
|
|||
style=texture.Button.Style1
|
||||
)
|
||||
|
||||
self.button_quit.add_listener("on_click_release",
|
||||
lambda *_: self.window.add_scene(scene.GameQuit, game_scene=self))
|
||||
|
||||
self.label_state = self.add_widget(
|
||||
widget.Text,
|
||||
|
||||
|
@ -211,8 +217,13 @@ class Game(Scene):
|
|||
"L'adversaire place ses bombes..."
|
||||
)
|
||||
|
||||
def quit(self):
|
||||
self.thread.stop()
|
||||
from source.gui.scene import MainMenu
|
||||
self.window.set_scene(MainMenu)
|
||||
|
||||
def game_end(self, won: bool):
|
||||
self.window.add_scene(Result, won=won)
|
||||
self.window.add_scene(GameResult, won=won)
|
||||
|
||||
def chat_new_message(self, author: str, content: str):
|
||||
message: str = f"[{author}] - {content}"
|
||||
|
|
58
source/gui/scene/GameQuit.py
Normal file
58
source/gui/scene/GameQuit.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
from typing import TYPE_CHECKING
|
||||
|
||||
from source.gui import widget, texture
|
||||
from source.gui.scene.abc.Popup import Popup
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from source.gui.window import Window
|
||||
from source.gui.scene import Game
|
||||
|
||||
|
||||
class GameQuit(Popup):
|
||||
def __init__(self, window: "Window", game_scene: "Game", **kwargs):
|
||||
super().__init__(window, **kwargs)
|
||||
|
||||
self.game_scene = game_scene
|
||||
|
||||
self.background = self.add_widget(
|
||||
widget.Image,
|
||||
|
||||
x=0, y=0, width=1.0, height=1.0,
|
||||
|
||||
image=texture.Popup.Style1.background
|
||||
)
|
||||
|
||||
self.text = self.add_widget(
|
||||
widget.Text,
|
||||
|
||||
x=0.5, y=0.5, width=1.0,
|
||||
|
||||
anchor_x="center",
|
||||
|
||||
text="Voulez-vous vraiment quitter la partie ?\n(Votre partie ne sera pas sauvegardé !)",
|
||||
font_size=28,
|
||||
multiline=True,
|
||||
align="center",
|
||||
)
|
||||
|
||||
self.cancel = self.add_widget(
|
||||
widget.Button,
|
||||
x=0.20, y=0.20, width=0.2, height=0.1,
|
||||
|
||||
label_text="Annuler",
|
||||
|
||||
style=texture.Button.Style1
|
||||
)
|
||||
|
||||
self.cancel.add_listener("on_click_release", lambda *_: self.window.remove_scene(self))
|
||||
|
||||
self.confirm = self.add_widget(
|
||||
widget.Button,
|
||||
x=0.60, y=0.20, width=0.2, height=0.1,
|
||||
|
||||
label_text="Confirmer",
|
||||
|
||||
style=texture.Button.Style1
|
||||
)
|
||||
|
||||
self.confirm.add_listener("on_click_release", lambda *_: self.game_scene.quit())
|
|
@ -3,18 +3,19 @@ from typing import TYPE_CHECKING
|
|||
import pyglet.clock
|
||||
|
||||
from source.gui import texture, widget
|
||||
from source.gui.event import StopEvent
|
||||
from source.gui.scene.abc import Scene
|
||||
from source.gui.scene.abc.Popup import Popup
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from source.gui.window import Window
|
||||
from source.gui.scene import Game
|
||||
|
||||
|
||||
class Result(Popup):
|
||||
def __init__(self, window: "Window", won: bool, **kwargs):
|
||||
class GameResult(Popup):
|
||||
def __init__(self, window: "Window", game_scene: "Game", won: bool, **kwargs):
|
||||
super().__init__(window, **kwargs)
|
||||
|
||||
self.game_scene = game_scene
|
||||
|
||||
self.image = self.add_widget(
|
||||
widget.Image,
|
||||
|
||||
|
@ -24,5 +25,4 @@ class Result(Popup):
|
|||
|
||||
# TODO: rendre l'image transparente si possible
|
||||
|
||||
from source.gui.scene import MainMenu
|
||||
pyglet.clock.schedule_once(lambda dt: self.window.set_scene(MainMenu), 5.0)
|
||||
pyglet.clock.schedule_once(lambda dt: self.game_scene.quit, 5.0)
|
|
@ -1,5 +1,6 @@
|
|||
from .Result import Result
|
||||
from .GameResult import GameResult
|
||||
from .Game import Game
|
||||
from .GameQuit import GameQuit
|
||||
from .Settings import Settings
|
||||
from .RoomHost import RoomHost
|
||||
from .RoomJoin import RoomJoin
|
||||
|
|
|
@ -41,6 +41,7 @@ class Client(StoppableThread):
|
|||
self.window.set_scene,
|
||||
scene.Game,
|
||||
|
||||
thread=self,
|
||||
connection=connection,
|
||||
|
||||
boats_length=settings.boats_length,
|
||||
|
|
|
@ -52,6 +52,7 @@ class Host(StoppableThread):
|
|||
self.window.set_scene,
|
||||
scene.Game,
|
||||
|
||||
thread=self,
|
||||
connection=connection,
|
||||
|
||||
boats_length=self.settings.boats_length,
|
||||
|
|
Loading…
Reference in a new issue