More generic display update
This commit is contained in:
parent
b8d32b29c8
commit
85870494a0
@ -162,6 +162,16 @@ class Display:
|
||||
pad.refresh(top_y, top_x, window_y, window_x, last_y, last_x)
|
||||
|
||||
def display(self) -> None:
|
||||
"""
|
||||
Draw the content of the display and refresh pads.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def update(self, game: Game) -> None:
|
||||
"""
|
||||
The game state was updated.
|
||||
Indicate what to do with the new state.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def handle_click(self, y: int, x: int, game: Game) -> None:
|
||||
|
@ -49,16 +49,13 @@ class DisplayManager:
|
||||
self.handle_mouse_click(*params)
|
||||
|
||||
def update_game_components(self) -> None:
|
||||
"""
|
||||
The game state was updated.
|
||||
Trigger all displays of these modifications.
|
||||
"""
|
||||
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)
|
||||
self.game.inventory_menu.update_player(self.game.player)
|
||||
self.playerinventorydisplay.update_menu(self.game.inventory_menu)
|
||||
self.storeinventorydisplay.update_menu(self.game.store_menu)
|
||||
self.settingsmenudisplay.update_menu(self.game.settings_menu)
|
||||
self.logsdisplay.update_logs(self.game.logs)
|
||||
self.messagedisplay.update_message(self.game.message)
|
||||
d.update(self.game)
|
||||
|
||||
def handle_mouse_click(self, y: int, x: int) -> None:
|
||||
displays = self.refresh()
|
||||
|
@ -2,6 +2,7 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from squirrelbattle.display.display import Display
|
||||
from squirrelbattle.game import Game
|
||||
from squirrelbattle.interfaces import Logs
|
||||
|
||||
|
||||
@ -11,8 +12,8 @@ class LogsDisplay(Display):
|
||||
super().__init__(*args)
|
||||
self.pad = self.newpad(self.rows, self.cols)
|
||||
|
||||
def update_logs(self, logs: Logs) -> None:
|
||||
self.logs = logs
|
||||
def update(self, game: Game) -> None:
|
||||
self.logs = game.logs
|
||||
|
||||
def display(self) -> None:
|
||||
messages = self.logs.messages[-self.height:]
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
from squirrelbattle.interfaces import Map
|
||||
from .display import Display
|
||||
from ..game import Game
|
||||
|
||||
|
||||
class MapDisplay(Display):
|
||||
@ -10,9 +11,10 @@ class MapDisplay(Display):
|
||||
def __init__(self, *args):
|
||||
super().__init__(*args)
|
||||
|
||||
def update_map(self, m: Map) -> None:
|
||||
self.map = m
|
||||
self.pad = self.newpad(m.height, self.pack.tile_width * m.width + 1)
|
||||
def update(self, game: Game) -> None:
|
||||
self.map = game.map
|
||||
self.pad = self.newpad(self.map.height,
|
||||
self.pack.tile_width * self.map.width + 1)
|
||||
|
||||
def update_pad(self) -> None:
|
||||
self.addstr(self.pad, 0, 0, self.map.draw_string(self.pack),
|
||||
|
@ -5,7 +5,7 @@ import curses
|
||||
from random import randint
|
||||
from typing import List
|
||||
|
||||
from squirrelbattle.menus import Menu, MainMenu
|
||||
from squirrelbattle.menus import Menu, MainMenu, SettingsMenu
|
||||
from .display import Box, Display
|
||||
from ..enums import KeyValues, GameMode
|
||||
from ..game import Game
|
||||
@ -17,6 +17,7 @@ class MenuDisplay(Display):
|
||||
"""
|
||||
A class to display the menu objects
|
||||
"""
|
||||
menu: Menu
|
||||
position: int
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@ -80,6 +81,11 @@ class SettingsMenuDisplay(MenuDisplay):
|
||||
"""
|
||||
A class to display specifically a settingsmenu object
|
||||
"""
|
||||
menu: SettingsMenu
|
||||
|
||||
def update(self, game: Game) -> None:
|
||||
self.update_menu(game.settings_menu)
|
||||
|
||||
@property
|
||||
def values(self) -> List[str]:
|
||||
return [_(a[1][1]) + (" : "
|
||||
@ -122,6 +128,9 @@ class MainMenuDisplay(Display):
|
||||
menuy, menux, min(self.menudisplay.preferred_height,
|
||||
self.height - menuy), menuwidth)
|
||||
|
||||
def update(self, game: Game) -> None:
|
||||
self.menudisplay.update_menu(game.main_menu)
|
||||
|
||||
def handle_click(self, y: int, x: int, game: Game) -> None:
|
||||
menuwidth = min(self.menudisplay.preferred_width, self.width)
|
||||
menuy, menux = len(self.title) + 8, self.width // 2 - menuwidth // 2 - 1
|
||||
@ -135,6 +144,9 @@ class MainMenuDisplay(Display):
|
||||
|
||||
|
||||
class PlayerInventoryDisplay(MenuDisplay):
|
||||
def update(self, game: Game) -> None:
|
||||
self.update_menu(game.inventory_menu)
|
||||
|
||||
def update_pad(self) -> None:
|
||||
self.menubox.update_title(_("INVENTORY"))
|
||||
for i, item in enumerate(self.menu.values):
|
||||
@ -166,6 +178,9 @@ class PlayerInventoryDisplay(MenuDisplay):
|
||||
|
||||
|
||||
class StoreInventoryDisplay(MenuDisplay):
|
||||
def update(self, game: Game) -> None:
|
||||
self.update_menu(game.store_menu)
|
||||
|
||||
def update_pad(self) -> None:
|
||||
self.menubox.update_title(_("STALL"))
|
||||
for i, item in enumerate(self.menu.values):
|
||||
|
@ -3,6 +3,7 @@
|
||||
import curses
|
||||
|
||||
from squirrelbattle.display.display import Box, Display
|
||||
from squirrelbattle.game import Game
|
||||
|
||||
|
||||
class MessageDisplay(Display):
|
||||
@ -17,8 +18,8 @@ class MessageDisplay(Display):
|
||||
self.message = ""
|
||||
self.pad = self.newpad(1, 1)
|
||||
|
||||
def update_message(self, msg: str) -> None:
|
||||
self.message = msg
|
||||
def update(self, game: Game) -> None:
|
||||
self.message = game.message
|
||||
|
||||
def display(self) -> None:
|
||||
self.box.refresh(self.y - 1, self.x - 2,
|
||||
|
@ -4,6 +4,7 @@
|
||||
import curses
|
||||
|
||||
from ..entities.player import Player
|
||||
from ..game import Game
|
||||
from ..translations import gettext as _
|
||||
from .display import Display
|
||||
|
||||
@ -15,8 +16,8 @@ class StatsDisplay(Display):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.pad = self.newpad(self.rows, self.cols)
|
||||
|
||||
def update_player(self, p: Player) -> None:
|
||||
self.player = p
|
||||
def update(self, game: Game) -> None:
|
||||
self.player = game.player
|
||||
|
||||
def update_pad(self) -> None:
|
||||
string2 = "Player -- LVL {}\nEXP {}/{}\nHP {}/{}"\
|
||||
|
@ -404,6 +404,7 @@ class TestGame(unittest.TestCase):
|
||||
Check that some functions are not implemented, only for coverage.
|
||||
"""
|
||||
self.assertRaises(NotImplementedError, Display.display, None)
|
||||
self.assertRaises(NotImplementedError, Display.update, None, self.game)
|
||||
|
||||
def test_messages(self) -> None:
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user