From 5cdb12e8a83a84ed6d83cfdee1d91ae5bea6ed08 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Fri, 27 Nov 2020 17:32:26 +0100 Subject: [PATCH] Display a message on a popup --- squirrelbattle/display/display_manager.py | 14 +++++++++++- squirrelbattle/display/messagedisplay.py | 26 +++++++++++++++++++++++ squirrelbattle/game.py | 1 + 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 squirrelbattle/display/messagedisplay.py diff --git a/squirrelbattle/display/display_manager.py b/squirrelbattle/display/display_manager.py index 061d8c0..869b7d4 100644 --- a/squirrelbattle/display/display_manager.py +++ b/squirrelbattle/display/display_manager.py @@ -4,6 +4,7 @@ import curses from squirrelbattle.display.display import VerticalSplit, HorizontalSplit from squirrelbattle.display.mapdisplay import MapDisplay +from squirrelbattle.display.messagedisplay import MessageDisplay from squirrelbattle.display.statsdisplay import StatsDisplay from squirrelbattle.display.menudisplay import SettingsMenuDisplay, \ MainMenuDisplay @@ -26,11 +27,12 @@ class DisplayManager: screen, pack) self.settingsmenudisplay = SettingsMenuDisplay(screen, pack) self.logsdisplay = LogsDisplay(screen, pack) + self.messagedisplay = MessageDisplay(screen) self.hbar = HorizontalSplit(screen, pack) self.vbar = VerticalSplit(screen, pack) self.displays = [self.statsdisplay, self.mapdisplay, self.mainmenudisplay, self.settingsmenudisplay, - self.logsdisplay] + self.logsdisplay, self.messagedisplay] self.update_game_components() def handle_display_action(self, action: DisplayActions) -> None: @@ -46,6 +48,7 @@ class DisplayManager: self.statsdisplay.update_player(self.game.player) self.settingsmenudisplay.update_menu(self.game.settings_menu) self.logsdisplay.update_logs(self.game.logs) + self.messagedisplay.update_message(self.game.message) def refresh(self) -> None: if self.game.state == GameMode.PLAY: @@ -65,6 +68,15 @@ class DisplayManager: self.mainmenudisplay.refresh(0, 0, self.rows, self.cols) if self.game.state == GameMode.SETTINGS: self.settingsmenudisplay.refresh(0, 0, self.rows, self.cols - 1) + + if self.game.message: + height, width = 0, 0 + for line in self.game.message.split("\n"): + height += 1 + width = max(width, len(line)) + y, x = (self.rows - height) // 2, (self.cols - width) // 2 + self.messagedisplay.refresh(y, x, height, width) + self.resize_window() def resize_window(self) -> bool: diff --git a/squirrelbattle/display/messagedisplay.py b/squirrelbattle/display/messagedisplay.py new file mode 100644 index 0000000..34c6586 --- /dev/null +++ b/squirrelbattle/display/messagedisplay.py @@ -0,0 +1,26 @@ +# Copyright (C) 2020 by ÿnérant, eichhornchen, nicomarg, charlse +# SPDX-License-Identifier: GPL-3.0-or-later + +from squirrelbattle.display.display import Box, Display + + +class MessageDisplay(Display): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.box = Box(*args, **kwargs) + self.message = "" + self.pad = self.newpad(1, 1) + + def update_message(self, msg: str) -> None: + self.message = msg + + def display(self) -> None: + self.box.refresh(self.y - 1, self.x - 2, + self.height + 2, self.width + 4) + self.box.display() + self.pad.erase() + self.addstr(self.pad, 0, 0, self.message) + self.refresh_pad(self.pad, 0, 0, self.y, self.x, + self.height + self.y - 1, + self.width + self.x - 1) diff --git a/squirrelbattle/game.py b/squirrelbattle/game.py index c60d93f..4553392 100644 --- a/squirrelbattle/game.py +++ b/squirrelbattle/game.py @@ -37,6 +37,7 @@ class Game: self.settings.write_settings() self.settings_menu.update_values(self.settings) self.logs = Logs() + self.message = "Vive les écureuils" def new_game(self) -> None: """