From 526a1a1e27ece979378470b7d22c73f74aa25bf0 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Thu, 12 Nov 2020 02:03:08 +0100 Subject: [PATCH] Don't use twice the same setting --- dungeonbattle/menus.py | 9 ++++++++- dungeonbattle/tests/game_test.py | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/dungeonbattle/menus.py b/dungeonbattle/menus.py index f6d7058..1990b27 100644 --- a/dungeonbattle/menus.py +++ b/dungeonbattle/menus.py @@ -76,12 +76,14 @@ class SettingsMenu(Menu): def handle_key_pressed(self, key: Optional[KeyValues], raw_key: str, game: Any) -> None: """ - For now, in the settings mode, we can only go backwards. + Update settings """ if not self.waiting_for_key: + # Navigate normally through the menu. if key == KeyValues.SPACE or \ key == KeyValues.ENTER and \ self.position == len(self.values) - 1: + # Go back game.display_actions(DisplayActions.UPDATE) game.state = GameMode.MAINMENU if key == KeyValues.DOWN: @@ -89,6 +91,7 @@ class SettingsMenu(Menu): if key == KeyValues.UP: self.go_up() if key == KeyValues.ENTER and self.position < len(self.values) - 3: + # Change a setting option = list(game.settings.settings_keys)[self.position] if option == "TEXTURE_PACK": game.settings.TEXTURE_PACK = \ @@ -101,6 +104,10 @@ class SettingsMenu(Menu): self.update_values(game.settings) else: option = list(game.settings.settings_keys)[self.position] + # 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): + return setattr(game.settings, option, raw_key) game.settings.write_settings() self.waiting_for_key = False diff --git a/dungeonbattle/tests/game_test.py b/dungeonbattle/tests/game_test.py index cfded4d..80720ee 100644 --- a/dungeonbattle/tests/game_test.py +++ b/dungeonbattle/tests/game_test.py @@ -168,6 +168,9 @@ class TestGame(unittest.TestCase): # Define the "move up" key to 'a' self.game.handle_key_pressed(KeyValues.ENTER) self.assertTrue(self.game.settings_menu.waiting_for_key) + # Can't used a mapped key + self.game.handle_key_pressed(None, 's') + self.assertTrue(self.game.settings_menu.waiting_for_key) self.game.handle_key_pressed(None, 'a') self.assertFalse(self.game.settings_menu.waiting_for_key) self.assertEqual(self.game.settings.KEY_LEFT_PRIMARY, 'a')