From aa81d455f6ee51238a7f7530e6d4ed7216ab5e1c Mon Sep 17 00:00:00 2001 From: Nicolas Margulies Date: Fri, 13 Nov 2020 15:40:44 +0100 Subject: [PATCH] Changed settings menu to let the display decide how the settings are printed --- dungeonbattle/display/display_manager.py | 4 ++-- dungeonbattle/display/menudisplay.py | 4 ++++ dungeonbattle/menus.py | 23 +++++------------------ 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/dungeonbattle/display/display_manager.py b/dungeonbattle/display/display_manager.py index b2cb125..3f22b9b 100644 --- a/dungeonbattle/display/display_manager.py +++ b/dungeonbattle/display/display_manager.py @@ -1,7 +1,7 @@ import curses from dungeonbattle.display.mapdisplay import MapDisplay from dungeonbattle.display.statsdisplay import StatsDisplay -from dungeonbattle.display.menudisplay import MenuDisplay, MainMenuDisplay +from dungeonbattle.display.menudisplay import SettingsMenuDisplay, MainMenuDisplay from dungeonbattle.display.texturepack import TexturePack from typing import Any from dungeonbattle.game import Game, GameMode @@ -18,7 +18,7 @@ class DisplayManager: self.statsdisplay = StatsDisplay(screen, pack) self.mainmenudisplay = MainMenuDisplay(self.game.main_menu, screen, pack) - self.settingsmenudisplay = MenuDisplay(screen, pack) + self.settingsmenudisplay = SettingsMenuDisplay(screen, pack) self.displays = [self.statsdisplay, self.mapdisplay, self.mainmenudisplay, self.settingsmenudisplay] self.update_game_components() diff --git a/dungeonbattle/display/menudisplay.py b/dungeonbattle/display/menudisplay.py index 973dd31..d8f11b0 100644 --- a/dungeonbattle/display/menudisplay.py +++ b/dungeonbattle/display/menudisplay.py @@ -59,6 +59,10 @@ class MenuDisplay(Display): def values(self) -> List[str]: return [str(a) for a in self.menu.values] +class SettingsMenuDisplay(MenuDisplay): + @property + def values(self) -> List[str]: + return [ a[1][1] + (" : " + ("?" if self.menu.waiting_for_key else a[1][0]) if a[1][0] else "") for a in self.menu.values ] class MainMenuDisplay(Display): def __init__(self, menu: MainMenu, *args): diff --git a/dungeonbattle/menus.py b/dungeonbattle/menus.py index 1990b27..5e66c24 100644 --- a/dungeonbattle/menus.py +++ b/dungeonbattle/menus.py @@ -57,21 +57,8 @@ class SettingsMenu(Menu): waiting_for_key: bool = False def update_values(self, settings: Settings) -> None: - self.values = [] - for i, key in enumerate(settings.settings_keys): - s = settings.get_comment(key) - s += " : " - if self.waiting_for_key and i == self.position: - s += "?" - else: - s += getattr(settings, key).replace("\n", "\\n") - s += 8 * " " # Write over old text - self.values.append(s) - self.values.append("") - self.values.append("Changer le pack de textures n'aura effet") - self.values.append("qu'après avoir relancé le jeu.") - self.values.append("") - self.values.append("Retour (espace)") + self.values = list(settings.__dict__.items()) + self.values.append(("RETURN",["","Retour"])) def handle_key_pressed(self, key: Optional[KeyValues], raw_key: str, game: Any) -> None: @@ -90,9 +77,9 @@ class SettingsMenu(Menu): self.go_down() if key == KeyValues.UP: self.go_up() - if key == KeyValues.ENTER and self.position < len(self.values) - 3: + if key == KeyValues.ENTER and self.position < len(self.values) - 1: # Change a setting - option = list(game.settings.settings_keys)[self.position] + option = self.values[self.position][0] if option == "TEXTURE_PACK": game.settings.TEXTURE_PACK = \ TexturePack.get_next_pack_name( @@ -103,7 +90,7 @@ class SettingsMenu(Menu): self.waiting_for_key = True self.update_values(game.settings) else: - option = list(game.settings.settings_keys)[self.position] + option = self.values[self.position][0] # Don't use an already mapped key if any(getattr(game.settings, opt) == raw_key for opt in game.settings.settings_keys if opt != option):