Display main menu by default
This commit is contained in:
		| @@ -1,25 +1,15 @@ | ||||
| import curses | ||||
| from typing import Any | ||||
|  | ||||
| from .mapdisplay import MapDisplay | ||||
| from .texturepack import TexturePack | ||||
|  | ||||
|  | ||||
| class Display: | ||||
|     # game is a game, can't import to avoid circulary includes | ||||
|     def __init__(self, game: Any, screen: Any): | ||||
|     def __init__(self, screen: Any): | ||||
|         self.screen = screen | ||||
|         self.game = game | ||||
|         lines = curses.LINES if screen else 4 | ||||
|         cols = curses.COLS * 4 // 5 if screen else 4 | ||||
|         self.map_display = MapDisplay(game.m, | ||||
|                                       TexturePack.get_pack( | ||||
|                                           game.settings.TEXTURE_PACK | ||||
|                                       ), | ||||
|                                       lines, cols, screen is not None) | ||||
|         self.rows = curses.LINES if screen else 4 | ||||
|         self.cols = curses.COLS * 4 // 5 if screen else 4 | ||||
|  | ||||
|     def refresh(self) -> None: | ||||
|         self.map_display.update_pad() | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     def display(self, y: int, x: int) -> None: | ||||
|         self.map_display.display(y, x) | ||||
|         raise NotImplementedError | ||||
|   | ||||
| @@ -1,25 +1,26 @@ | ||||
| from dungeonbattle.display.display import Display | ||||
| from dungeonbattle.menus import Menu | ||||
| from typing import Any | ||||
| import curses | ||||
|  | ||||
|  | ||||
| class MenuDisplay: | ||||
|     def __init__(self, menu: Menu, screen: Any, height: int, width: int, | ||||
| class MenuDisplay(Display): | ||||
|     def __init__(self, screen: Any, menu: Menu, | ||||
|                  topleftx: int, toplefty: int): | ||||
|         self.screen = screen | ||||
|         self.position = menu.position | ||||
|         super().__init__(screen) | ||||
|         self.values = menu.values | ||||
|         self.width = width | ||||
|         self.height = height | ||||
|         self.menu = menu | ||||
|         self.width = self.cols | ||||
|         self.height = self.rows | ||||
|         self.trueheight = len(menu.values) | ||||
|         self.truewidth = max(map(len, self.values)) | ||||
|         self.truewidth = max(len(item.value) for item in menu.values) | ||||
|         self.topleftx = topleftx | ||||
|         self.toplefty = toplefty | ||||
|  | ||||
|         # Menu values are printed in pad | ||||
|         self.pad = curses.newpad(self.trueheight, self.truewidth + 1) | ||||
|         for i in range(self.trueheight - 1): | ||||
|             self.pad.addstr(i, 0, " " + self.values[i]) | ||||
|         for i in range(self.trueheight): | ||||
|             self.pad.addstr(i, 0, " " + self.values[i].value) | ||||
|  | ||||
|         # Menu box | ||||
|         self.menubox = curses.newpad(self.height, self.width) | ||||
| @@ -35,16 +36,16 @@ class MenuDisplay: | ||||
|         # set a marker in front of the selected line | ||||
|         self.pad.addstr(position, 0, ">") | ||||
|  | ||||
|     def refresh(self, position: int) -> None: | ||||
|         if self.height - 2 >= position - 1: | ||||
|     def refresh(self) -> None: | ||||
|         if self.height - 2 >= self.menu.position - 1: | ||||
|             cornery = 0 | ||||
|         elif self.height - 2 >= self.trueheight - position: | ||||
|         elif self.height - 2 >= self.trueheight - self.menu.position: | ||||
|             cornery = self.trueheight - self.height + 2 | ||||
|  | ||||
|         self.menubox.refresh(0, 0, self.toplefty, self.topleftx, | ||||
|                              self.height + self.toplefty, | ||||
|                              self.width + self.topleftx) | ||||
|         self.update_pad(position) | ||||
|         self.update_pad(self.menu.position) | ||||
|         self.pad.refresh(cornery, 0, self.toplefty + 1, self.topleftx + 1, | ||||
|                          self.height - 2 + self.toplefty, | ||||
|                          self.width - 2 + self.topleftx) | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import sys | ||||
| from typing import Any | ||||
|  | ||||
| from .display.display import Display | ||||
| from .display.menudisplay import MenuDisplay | ||||
| from .entities.player import Player | ||||
| from .interfaces import Map | ||||
| from .settings import Settings | ||||
| @@ -38,7 +39,7 @@ class Game: | ||||
|         self.player = Player() | ||||
|         self.player.move(1, 6) | ||||
|         self.m.add_entity(self.player) | ||||
|         self.d = Display(self, screen) | ||||
|         self.d = MenuDisplay(self, self.main_menu, 0, 0) | ||||
|  | ||||
|     @staticmethod | ||||
|     def load_game(filename: str) -> None: | ||||
| @@ -49,7 +50,8 @@ class Game: | ||||
|         while True: | ||||
|             screen.clear() | ||||
|             screen.refresh() | ||||
|             self.d.display(self.player.y, self.player.x) | ||||
|             # self.d.display(self.player.y, self.player.x) | ||||
|             self.d.refresh() | ||||
|             key = screen.getkey() | ||||
|             self.handle_key_pressed(self.translate_key(key)) | ||||
|  | ||||
| @@ -92,3 +94,4 @@ class Game: | ||||
|                     self.state = GameMode.SETTINGS | ||||
|                 elif option == menus.MainMenuValues.EXIT: | ||||
|                     sys.exit(0) | ||||
|         self.d.refresh() | ||||
|   | ||||
| @@ -19,9 +19,9 @@ class Menu: | ||||
|  | ||||
|  | ||||
| class MainMenuValues(Enum): | ||||
|     START = auto() | ||||
|     SETTINGS = auto() | ||||
|     EXIT = auto() | ||||
|     START = 'Jouer' | ||||
|     SETTINGS = 'Paramètres' | ||||
|     EXIT = 'Quitter' | ||||
|  | ||||
|  | ||||
| class MainMenu(Menu): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user