95 lines
3.4 KiB
Python
95 lines
3.4 KiB
Python
# Copyright (C) 2020 by ÿnérant, eichhornchen, nicomarg, charlse
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
import curses
|
|
|
|
from ..display.display import Box, Display
|
|
from ..game import Game
|
|
from ..resources import ResourceManager
|
|
from ..translations import gettext as _
|
|
|
|
|
|
class CreditsDisplay(Display):
|
|
def __init__(self, *args, **kwargs):
|
|
super().__init__(*args, **kwargs)
|
|
self.box = Box(*args, **kwargs)
|
|
self.pad = self.newpad(1, 1)
|
|
self.ascii_art_displayed = False
|
|
|
|
def display(self) -> None:
|
|
self.box.refresh(self.y, self.x, self.height, self.width)
|
|
self.box.display()
|
|
self.pad.erase()
|
|
|
|
messages = [
|
|
_("Credits"),
|
|
"",
|
|
"Squirrel Battle",
|
|
"",
|
|
_("Developers:"),
|
|
"Yohann \"ÿnérant\" D'ANELLO",
|
|
"Mathilde \"eichhornchen\" DÉPRÉS",
|
|
"Nicolas \"nicomarg\" MARGULIES",
|
|
"Charles \"charsle\" PEYRAT",
|
|
"",
|
|
_("Translators:"),
|
|
"Hugo \"ifugao\" JACOB (español)",
|
|
]
|
|
|
|
for i, msg in enumerate(messages):
|
|
self.addstr(self.pad, i + (self.height - len(messages)) // 2,
|
|
(self.width - len(msg)) // 2, msg,
|
|
bold=(i == 0), italic=(":" in msg))
|
|
|
|
if self.ascii_art_displayed:
|
|
self.display_ascii_art()
|
|
|
|
self.refresh_pad(self.pad, 0, 0, self.y + 1, self.x + 1,
|
|
self.height + self.y - 2,
|
|
self.width + self.x - 2)
|
|
|
|
def display_ascii_art(self) -> None:
|
|
with open(ResourceManager.get_asset_path("ascii-art-ecureuil.txt"))\
|
|
as f:
|
|
ascii_art = f.read().split("\n")
|
|
|
|
height, width = len(ascii_art), len(ascii_art[0])
|
|
y_offset, x_offset = (self.height - height) // 2,\
|
|
(self.width - width) // 2
|
|
|
|
for i, line in enumerate(ascii_art):
|
|
for j, c in enumerate(line):
|
|
bg_color = curses.COLOR_WHITE
|
|
fg_color = curses.COLOR_BLACK
|
|
bold = False
|
|
if c == ' ':
|
|
bg_color = curses.COLOR_BLACK
|
|
elif c == '━' or c == '┃' or c == '⋀':
|
|
bold = True
|
|
fg_color = curses.COLOR_WHITE
|
|
bg_color = curses.COLOR_BLACK
|
|
elif c == '|':
|
|
bold = True # c = '┃'
|
|
fg_color = (100, 700, 1000)
|
|
bg_color = curses.COLOR_BLACK
|
|
elif c == '▓':
|
|
fg_color = (700, 300, 0)
|
|
elif c == '▒':
|
|
fg_color = (700, 300, 0)
|
|
bg_color = curses.COLOR_BLACK
|
|
elif c == '░':
|
|
fg_color = (350, 150, 0)
|
|
elif c == '█':
|
|
fg_color = (0, 0, 0)
|
|
bg_color = curses.COLOR_BLACK
|
|
elif c == '▬':
|
|
c = '█'
|
|
fg_color = (1000, 1000, 1000)
|
|
bg_color = curses.COLOR_BLACK
|
|
self.addstr(self.pad, y_offset + i, x_offset + j, c,
|
|
fg_color, bg_color, bold=bold)
|
|
|
|
def handle_click(self, y: int, x: int, game: Game) -> None:
|
|
if self.pad.inch(y - 1, x - 1) != ord(" "):
|
|
self.ascii_art_displayed = True
|