Settings scene now use the option object. Fixed an issue where the old FPS settings wouldn't be applied on restart
This commit is contained in:
parent
095b956ed7
commit
9fe42e16ec
4 changed files with 47 additions and 75 deletions
6
main.pyw
6
main.pyw
|
@ -27,5 +27,9 @@ except: pass # NOQA E722
|
|||
window.set_minimum_size(720, 480)
|
||||
window.add_scene(MainMenu)
|
||||
|
||||
# Start the event loop
|
||||
# Créer un événement juste après le debut de la boucle pour charger les options.
|
||||
# Puisque pyglet.app.run va limiter les FPS à 60, les options doivent être chargées juste après
|
||||
# afin que les anciens paramètres de FPS soient appliqués.
|
||||
pyglet.clock.schedule_once(lambda *_: window.load_option(), 0)
|
||||
# Démarre la boucle d'événement
|
||||
pyglet.app.run()
|
||||
|
|
|
@ -72,12 +72,12 @@ class Settings(Popup):
|
|||
|
||||
style=texture.Checkbox.Style1,
|
||||
|
||||
state=self.window.vsync
|
||||
state=self.window.option.get_vsync()
|
||||
)
|
||||
|
||||
self.vsync.add_listener(
|
||||
"on_state_change",
|
||||
lambda widget, *_: self.window.set_vsync(widget.state)
|
||||
lambda widget, *_: self.window.option.set_vsync(widget.state)
|
||||
)
|
||||
|
||||
self.add_widget(
|
||||
|
@ -98,12 +98,12 @@ class Settings(Popup):
|
|||
|
||||
style=texture.Checkbox.Style1,
|
||||
|
||||
state=self.window.fps_enable
|
||||
state=self.window.option.get_fps_show()
|
||||
)
|
||||
|
||||
self.show_fps.add_listener(
|
||||
"on_state_change",
|
||||
lambda widget, *_: self.window.set_fps_enabled(widget.state)
|
||||
lambda widget, *_: self.window.option.set_fps_show(widget.state)
|
||||
)
|
||||
|
||||
self.add_widget(
|
||||
|
@ -124,7 +124,7 @@ class Settings(Popup):
|
|||
|
||||
style=texture.Scroller.Style1,
|
||||
from_=1,
|
||||
value=fps if (fps := self.window.get_fps()) <= 240 else 250,
|
||||
value=fps if (fps := self.window.option.get_fps_limit()) <= 240 else 250,
|
||||
to=250,
|
||||
|
||||
text_transform=lambda value: round(value) if value <= 240 else "Illimité"
|
||||
|
@ -132,7 +132,7 @@ class Settings(Popup):
|
|||
|
||||
self.fps_limit.add_listener(
|
||||
"on_value_change",
|
||||
lambda widget, *_: self.window.set_fps(widget.value if widget.value <= 240 else inf)
|
||||
lambda widget, *_: self.window.option.set_fps_limit(widget.value if widget.value <= 240 else inf)
|
||||
)
|
||||
|
||||
self.add_widget(
|
||||
|
@ -153,18 +153,15 @@ class Settings(Popup):
|
|||
|
||||
style=texture.Scroller.Style1,
|
||||
from_=0,
|
||||
value=media.SoundEffect.get_volume(),
|
||||
value=self.window.option.get_volume_fx(),
|
||||
to=1,
|
||||
|
||||
text_transform=lambda value: f"{round(value * 100)}%"
|
||||
)
|
||||
|
||||
def change_volume_sfx(widget):
|
||||
media.SoundEffect.set_volume(widget.value)
|
||||
|
||||
self.volume_sfx.add_listener(
|
||||
"on_value_change",
|
||||
change_volume_sfx
|
||||
lambda widget, *_: self.window.option.set_volume_fx(widget.value)
|
||||
)
|
||||
|
||||
self.add_widget(
|
||||
|
@ -185,18 +182,15 @@ class Settings(Popup):
|
|||
|
||||
style=texture.Scroller.Style1,
|
||||
from_=0,
|
||||
value=media.SoundAmbient.get_volume(),
|
||||
value=self.window.option.get_volume_ambient(),
|
||||
to=1,
|
||||
|
||||
text_transform=lambda value: f"{round(value * 100)}%"
|
||||
)
|
||||
|
||||
def change_volume_ambient(widget):
|
||||
media.SoundAmbient.set_volume(widget.value)
|
||||
|
||||
self.volume_ambient.add_listener(
|
||||
"on_value_change",
|
||||
change_volume_ambient
|
||||
lambda widget, *_: self.window.option.set_volume_ambient(widget.value)
|
||||
)
|
||||
|
||||
self.add_widget(
|
||||
|
|
|
@ -23,25 +23,19 @@ class GameWindow(Window): # NOQA
|
|||
super().__init__(*args, **kwargs)
|
||||
|
||||
self._fps_counter = pyglet.window.FPSDisplay(self, color=fps_color)
|
||||
self._fps_enable = fps_enable
|
||||
self.fps_enable = fps_enable
|
||||
|
||||
self.option = None
|
||||
self.option_path = option_path
|
||||
|
||||
def load_option(self):
|
||||
try:
|
||||
if option_path.exists():
|
||||
self.option = Option.load(self, option_path)
|
||||
if self.option_path.exists():
|
||||
self.option = Option.load(self, self.option_path)
|
||||
except Exception: # NOQA
|
||||
pass
|
||||
|
||||
if self.option is None:
|
||||
self.option = Option(window=self)
|
||||
|
||||
@property
|
||||
def fps_enable(self) -> bool:
|
||||
return self._fps_enable
|
||||
|
||||
def set_fps_enabled(self, value: bool):
|
||||
self._fps_enable = value
|
||||
if self.option is None: self.option = Option(window=self)
|
||||
|
||||
def on_draw_after(self):
|
||||
if self._fps_enable: self._fps_counter.draw()
|
||||
if self.fps_enable: self._fps_counter.draw()
|
||||
|
|
|
@ -17,63 +17,43 @@ class Option:
|
|||
vsync: bool = True
|
||||
):
|
||||
self.window = window
|
||||
self.volume_ambient = volume_ambient
|
||||
self.volume_fx = volume_fx
|
||||
self.fps_show = fps_show
|
||||
self.fps_limit = fps_limit
|
||||
self.vsync = vsync
|
||||
|
||||
self.set_volume_ambient(volume_ambient)
|
||||
self.set_volume_fx(volume_fx)
|
||||
self.set_fps_show(fps_show)
|
||||
self.set_fps_limit(fps_limit)
|
||||
self.set_vsync(vsync)
|
||||
|
||||
# propriété
|
||||
|
||||
@property
|
||||
def volume_ambient(self) -> float:
|
||||
return media.SoundAmbient.get_volume()
|
||||
@staticmethod
|
||||
def get_volume_ambient() -> float: return media.SoundAmbient.get_volume()
|
||||
@staticmethod
|
||||
def set_volume_ambient(value: float): media.SoundAmbient.set_volume(value)
|
||||
|
||||
@volume_ambient.setter
|
||||
def volume_ambient(self, value: float):
|
||||
media.SoundAmbient.set_volume(value)
|
||||
@staticmethod
|
||||
def get_volume_fx() -> float: return media.SoundEffect.get_volume()
|
||||
@staticmethod
|
||||
def set_volume_fx(value: float): media.SoundEffect.set_volume(value)
|
||||
|
||||
@property
|
||||
def volume_fx(self) -> float:
|
||||
return media.SoundEffect.get_volume()
|
||||
def get_fps_show(self): return self.window.fps_enable
|
||||
def set_fps_show(self, value: bool): self.window.fps_enable = value
|
||||
|
||||
@volume_fx.setter
|
||||
def volume_fx(self, value: float):
|
||||
media.SoundEffect.set_volume(value)
|
||||
def get_fps_limit(self): return self.window.get_fps()
|
||||
def set_fps_limit(self, value: float): self.window.set_fps(value)
|
||||
|
||||
@property
|
||||
def fps_show(self):
|
||||
return self.window.fps_enable
|
||||
|
||||
@fps_show.setter
|
||||
def fps_show(self, value: bool):
|
||||
self.window.set_fps_enabled(value)
|
||||
|
||||
@property
|
||||
def fps_limit(self):
|
||||
return self.window.get_fps()
|
||||
|
||||
@fps_limit.setter
|
||||
def fps_limit(self, value: float):
|
||||
self.window.set_fps(value)
|
||||
|
||||
@property
|
||||
def vsync(self):
|
||||
return self.window.vsync
|
||||
|
||||
@vsync.setter
|
||||
def vsync(self, value: bool):
|
||||
self.window.set_vsync(value)
|
||||
def get_vsync(self): return self.window.vsync
|
||||
def set_vsync(self, value: bool): self.window.set_vsync(value)
|
||||
|
||||
# chargement et sauvegarde
|
||||
|
||||
def to_json(self) -> dict:
|
||||
return {
|
||||
"volume_ambient": self.volume_ambient,
|
||||
"volume_fx": self.volume_fx,
|
||||
"fps_show": self.fps_show,
|
||||
"fps_limit": self.fps_limit,
|
||||
"vsync": self.vsync,
|
||||
"volume_ambient": self.get_volume_ambient(),
|
||||
"volume_fx": self.get_volume_fx(),
|
||||
"fps_show": self.get_fps_show(),
|
||||
"fps_limit": self.get_fps_limit(),
|
||||
"vsync": self.get_vsync(),
|
||||
}
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in a new issue