L3-Bataille-Navale/source/gui/scene/Settings.py
2023-03-09 15:00:48 +01:00

175 lines
3.9 KiB
Python

import itertools
from math import inf
from typing import TYPE_CHECKING
import pyglet.app
from source.gui import widget, texture, media
from source.gui.position import vw_full, vh_full, vw, vh
from source.gui.scene.abc.Popup import Popup
if TYPE_CHECKING:
from source.gui.window import Window
class Settings(Popup):
def __init__(self, window: "Window", **kwargs):
super().__init__(window, **kwargs)
self.background = self.add_widget(
widget.Image,
x=0, y=0, width=vw_full, height=vh_full,
image=texture.Popup.Style1.background
)
self.back = self.add_widget(
widget.Button,
x=20, y=20, width=20*vw, height=10*vh,
label_text="Retour",
style=texture.Button.Style1
)
self.back.add_listener("on_click_release", lambda *_: self.window.remove_scene(self))
# Plein écran
self.fullscreen = self.add_widget(
widget.Checkbox,
x=70*vw, y=87*vh, width=6*vw, height=10*vh,
style=texture.Checkbox.Style1,
state=self.window.fullscreen
)
self.fullscreen.add_listener(
"on_state_change",
lambda widget, *_: self.window.set_fullscreen(widget.state)
)
self.add_widget(
widget.Text,
x=80*vw, y=90*vh,
text="Plein écran",
font_size=20,
)
# Vsync
self.vsync = self.add_widget(
widget.Checkbox,
x=70 * vw, y=76 * vh, width=6 * vw, height=10 * vh,
style=texture.Checkbox.Style1,
state=self.window.vsync
)
self.vsync.add_listener(
"on_state_change",
lambda widget, *_: self.window.set_vsync(widget.state)
)
self.add_widget(
widget.Text,
x=80 * vw, y=79 * vh,
text="V-Sync",
font_size=20,
)
# Compteur de FPS
self.show_fps = self.add_widget(
widget.Checkbox,
x=70 * vw, y=65 * vh, width=6 * vw, height=10 * vh,
style=texture.Checkbox.Style1,
state=self.window.fps_enable
)
self.show_fps.add_listener(
"on_state_change",
lambda widget, *_: self.window.set_fps_enabled(widget.state)
)
self.add_widget(
widget.Text,
x=80 * vw, y=68 * vh,
text="Compteur FPS",
font_size=20,
)
# Limite FPS
self.fps_limit = self.add_widget(
widget.Scroller,
x=70*vw, y=54*vh, width=20*vw, height=10*vh,
style=texture.Scroller.Style1,
from_=1,
value=fps if (fps := self.window.get_fps()) <= 240 else 250,
to=250,
text_transform=lambda value: round(value) if value <= 240 else "Illimité"
)
self.fps_limit.add_listener(
"on_value_change",
lambda widget, *_: self.window.set_fps(widget.value if widget.value <= 240 else inf)
)
self.add_widget(
widget.Text,
x=92 * vw, y=57 * vh,
text="FPS",
font_size=20,
)
# Volume
self.volume_sfx = self.add_widget(
widget.Scroller,
x=5 * vw, y=87 * vh, width=20 * vw, height=10 * vh,
style=texture.Scroller.Style1,
from_=0,
value=media.Game.get_volume(),
to=1,
text_transform=lambda value: f"{round(value * 100)}%"
)
def change_volume_sfx(widget):
media.Game.set_volume(widget.value)
self.volume_sfx.add_listener(
"on_value_change",
change_volume_sfx
)
self.add_widget(
widget.Text,
x=27 * vw, y=90 * vh,
text="Effets Sonore",
font_size=20,
)