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.set_minimum_size(720, 480)
|
||||||
window.add_scene(MainMenu)
|
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()
|
pyglet.app.run()
|
||||||
|
|
|
@ -72,12 +72,12 @@ class Settings(Popup):
|
||||||
|
|
||||||
style=texture.Checkbox.Style1,
|
style=texture.Checkbox.Style1,
|
||||||
|
|
||||||
state=self.window.vsync
|
state=self.window.option.get_vsync()
|
||||||
)
|
)
|
||||||
|
|
||||||
self.vsync.add_listener(
|
self.vsync.add_listener(
|
||||||
"on_state_change",
|
"on_state_change",
|
||||||
lambda widget, *_: self.window.set_vsync(widget.state)
|
lambda widget, *_: self.window.option.set_vsync(widget.state)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.add_widget(
|
self.add_widget(
|
||||||
|
@ -98,12 +98,12 @@ class Settings(Popup):
|
||||||
|
|
||||||
style=texture.Checkbox.Style1,
|
style=texture.Checkbox.Style1,
|
||||||
|
|
||||||
state=self.window.fps_enable
|
state=self.window.option.get_fps_show()
|
||||||
)
|
)
|
||||||
|
|
||||||
self.show_fps.add_listener(
|
self.show_fps.add_listener(
|
||||||
"on_state_change",
|
"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(
|
self.add_widget(
|
||||||
|
@ -124,7 +124,7 @@ class Settings(Popup):
|
||||||
|
|
||||||
style=texture.Scroller.Style1,
|
style=texture.Scroller.Style1,
|
||||||
from_=1,
|
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,
|
to=250,
|
||||||
|
|
||||||
text_transform=lambda value: round(value) if value <= 240 else "Illimité"
|
text_transform=lambda value: round(value) if value <= 240 else "Illimité"
|
||||||
|
@ -132,7 +132,7 @@ class Settings(Popup):
|
||||||
|
|
||||||
self.fps_limit.add_listener(
|
self.fps_limit.add_listener(
|
||||||
"on_value_change",
|
"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(
|
self.add_widget(
|
||||||
|
@ -153,18 +153,15 @@ class Settings(Popup):
|
||||||
|
|
||||||
style=texture.Scroller.Style1,
|
style=texture.Scroller.Style1,
|
||||||
from_=0,
|
from_=0,
|
||||||
value=media.SoundEffect.get_volume(),
|
value=self.window.option.get_volume_fx(),
|
||||||
to=1,
|
to=1,
|
||||||
|
|
||||||
text_transform=lambda value: f"{round(value * 100)}%"
|
text_transform=lambda value: f"{round(value * 100)}%"
|
||||||
)
|
)
|
||||||
|
|
||||||
def change_volume_sfx(widget):
|
|
||||||
media.SoundEffect.set_volume(widget.value)
|
|
||||||
|
|
||||||
self.volume_sfx.add_listener(
|
self.volume_sfx.add_listener(
|
||||||
"on_value_change",
|
"on_value_change",
|
||||||
change_volume_sfx
|
lambda widget, *_: self.window.option.set_volume_fx(widget.value)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.add_widget(
|
self.add_widget(
|
||||||
|
@ -185,18 +182,15 @@ class Settings(Popup):
|
||||||
|
|
||||||
style=texture.Scroller.Style1,
|
style=texture.Scroller.Style1,
|
||||||
from_=0,
|
from_=0,
|
||||||
value=media.SoundAmbient.get_volume(),
|
value=self.window.option.get_volume_ambient(),
|
||||||
to=1,
|
to=1,
|
||||||
|
|
||||||
text_transform=lambda value: f"{round(value * 100)}%"
|
text_transform=lambda value: f"{round(value * 100)}%"
|
||||||
)
|
)
|
||||||
|
|
||||||
def change_volume_ambient(widget):
|
|
||||||
media.SoundAmbient.set_volume(widget.value)
|
|
||||||
|
|
||||||
self.volume_ambient.add_listener(
|
self.volume_ambient.add_listener(
|
||||||
"on_value_change",
|
"on_value_change",
|
||||||
change_volume_ambient
|
lambda widget, *_: self.window.option.set_volume_ambient(widget.value)
|
||||||
)
|
)
|
||||||
|
|
||||||
self.add_widget(
|
self.add_widget(
|
||||||
|
|
|
@ -23,25 +23,19 @@ class GameWindow(Window): # NOQA
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self._fps_counter = pyglet.window.FPSDisplay(self, color=fps_color)
|
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 = None
|
||||||
|
self.option_path = option_path
|
||||||
|
|
||||||
|
def load_option(self):
|
||||||
try:
|
try:
|
||||||
if option_path.exists():
|
if self.option_path.exists():
|
||||||
self.option = Option.load(self, option_path)
|
self.option = Option.load(self, self.option_path)
|
||||||
except Exception: # NOQA
|
except Exception: # NOQA
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if self.option is None:
|
if self.option is None: self.option = Option(window=self)
|
||||||
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
|
|
||||||
|
|
||||||
def on_draw_after(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
|
vsync: bool = True
|
||||||
):
|
):
|
||||||
self.window = window
|
self.window = window
|
||||||
self.volume_ambient = volume_ambient
|
|
||||||
self.volume_fx = volume_fx
|
self.set_volume_ambient(volume_ambient)
|
||||||
self.fps_show = fps_show
|
self.set_volume_fx(volume_fx)
|
||||||
self.fps_limit = fps_limit
|
self.set_fps_show(fps_show)
|
||||||
self.vsync = vsync
|
self.set_fps_limit(fps_limit)
|
||||||
|
self.set_vsync(vsync)
|
||||||
|
|
||||||
# propriété
|
# propriété
|
||||||
|
|
||||||
@property
|
@staticmethod
|
||||||
def volume_ambient(self) -> float:
|
def get_volume_ambient() -> float: return media.SoundAmbient.get_volume()
|
||||||
return media.SoundAmbient.get_volume()
|
@staticmethod
|
||||||
|
def set_volume_ambient(value: float): media.SoundAmbient.set_volume(value)
|
||||||
|
|
||||||
@volume_ambient.setter
|
@staticmethod
|
||||||
def volume_ambient(self, value: float):
|
def get_volume_fx() -> float: return media.SoundEffect.get_volume()
|
||||||
media.SoundAmbient.set_volume(value)
|
@staticmethod
|
||||||
|
def set_volume_fx(value: float): media.SoundEffect.set_volume(value)
|
||||||
|
|
||||||
@property
|
def get_fps_show(self): return self.window.fps_enable
|
||||||
def volume_fx(self) -> float:
|
def set_fps_show(self, value: bool): self.window.fps_enable = value
|
||||||
return media.SoundEffect.get_volume()
|
|
||||||
|
|
||||||
@volume_fx.setter
|
def get_fps_limit(self): return self.window.get_fps()
|
||||||
def volume_fx(self, value: float):
|
def set_fps_limit(self, value: float): self.window.set_fps(value)
|
||||||
media.SoundEffect.set_volume(value)
|
|
||||||
|
|
||||||
@property
|
def get_vsync(self): return self.window.vsync
|
||||||
def fps_show(self):
|
def set_vsync(self, value: bool): self.window.set_vsync(value)
|
||||||
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)
|
|
||||||
|
|
||||||
# chargement et sauvegarde
|
# chargement et sauvegarde
|
||||||
|
|
||||||
def to_json(self) -> dict:
|
def to_json(self) -> dict:
|
||||||
return {
|
return {
|
||||||
"volume_ambient": self.volume_ambient,
|
"volume_ambient": self.get_volume_ambient(),
|
||||||
"volume_fx": self.volume_fx,
|
"volume_fx": self.get_volume_fx(),
|
||||||
"fps_show": self.fps_show,
|
"fps_show": self.get_fps_show(),
|
||||||
"fps_limit": self.fps_limit,
|
"fps_limit": self.get_fps_limit(),
|
||||||
"vsync": self.vsync,
|
"vsync": self.get_vsync(),
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
Loading…
Reference in a new issue