import curses from dungeonbattle.display.mapdisplay import MapDisplay from dungeonbattle.display.statsdisplay import StatsDisplay from dungeonbattle.display.menudisplay import MainMenuDisplay from dungeonbattle.display.texturepack import TexturePack from typing import Any from dungeonbattle.game import Game, GameMode class DisplayManager: def __init__(self, screen: Any, g: Game): self.game = g self.screen = screen pack = TexturePack.get_pack(self.game.settings.TEXTURE_PACK) self.mapdisplay = MapDisplay(screen, pack) self.statsdisplay = StatsDisplay(screen, pack) self.mainmenudisplay = MainMenuDisplay(self.game.main_menu, screen, pack) self.displays = [self.statsdisplay, self.mapdisplay, self.mainmenudisplay] self.update_game_components() def update_game_components(self): for d in self.displays: d.pack = TexturePack.get_pack(self.game.settings.TEXTURE_PACK) self.mapdisplay.update_map(self.game.map) self.statsdisplay.update_player(self.game.player) def refresh(self) -> None: if self.game.state == GameMode.PLAY: self.mapdisplay.refresh(0, 0, self.rows * 4 // 5, self.cols) self.statsdisplay.refresh(self.rows*4//5, 0, self.rows//5, self.cols) if self.game.state == GameMode.MAINMENU: self.mainmenudisplay.refresh(0,0,self.rows, self.cols) # self.menudisplay.refresh(self.position) def ensure_resized(self, *pads) -> bool: """ If the window got resized, ensure that the pads are also resized. """ y, x = self.screen.getmaxyx() if self.screen else (0, 0) for pad in pads: pad.resize(y, x) if self.screen and curses.is_term_resized(self.rows, self.cols): curses.resizeterm(y, x) return True return False @property def rows(self) -> int: return curses.LINES if self.screen else 42 @property def cols(self) -> int: return curses.COLS if self.screen else 42