class IntroInstance(Instance): def __init__(self): self.screen = Screen(curses.LINES - 1, curses.COLS - 1) self.pad = self.screen.pad self.h = 30 self.w = 124 self.H = self.screen.H self.W = self.screen.W self.dy, self.dx = get_dy_dx(self.H, self.W, self.h, self.w) def process_key_event(self, key): if key == ord(' ') or key == ord('\n'): from controller.create_hero_handler import CreateHeroHandler return CreateHeroHandler(), False from controller.splash_screen_handler import SplashScreenHandler return SplashScreenHandler(self), False def invoke(self): self.screen.clear() self.print() self.screen.refresh() def print(self): y = self.dy x = self.dx h = self.h w = self.w draw_window(self.pad, y, x, h, w, 'Пролог', 'Нажмите [Enter] или [Space] для продолжения') self._print_description() def _print_description(self): draw_pic(self.pad, self.dy + 2, self.dx + 2, PIC)
class CreateHeroInstance(Instance): def __init__(self, screen): self.choices = [ 'Солдат Содружества', 'Инженер Содружества', 'Псионик класса А', 'Псионик класса Б', 'Солест' ] self.dx = max(0, screen.W // 2 - 170 // 2) self.dy = max(0, screen.H // 2 - len(self.choices) - 7) self.screen = screen self.pad = screen.get_pad() self.menu_screen = Screen(H=len(self.choices) + 2, W=23, fromy=self.dy + 2, fromx=self.dx + 2) self.menu = MenuInstance(self.menu_screen, self.choices) self._set_current_choice_info(0) def process_key_event(self, key): if key == ord('q') or key == curses.KEY_EXIT: return MainMenuHandler(), False choice = self.menu.process_key_event(key) if choice < 0: self._set_current_choice_info(self.menu.current) return CreateHeroHandler(self), False else: self._set_current_choice_info(choice) overlay = MoveTutorialOverlay() return DungeonHandler(self.clazz, overlay=overlay), False def invoke(self): self.screen.clear() self.menu_screen.clear() self.print() self.menu.print() self.screen.refresh() self.menu_screen.refresh() def _set_current_choice_info(self, current): choice = self.choices[current] clazz = CLASSES[choice] self.description = clazz['description'] self.personal = clazz['personal'] self.skills = clazz['skills'] self.clazz = clazz['class'] def print(self): draw_window(self.screen.pad, self.dy + 1, self.dx + 1, len(self.choices) + 5, 35, 'Выберите класс') draw_window(self.screen.pad, self.dy + len(self.choices) + 7, self.dx + 1, 13, 35, 'Характеристики') draw_window(self.screen.pad, self.dy + 1, self.dx + 38, len(self.choices) + 5, 135, 'Описание класса') draw_window(self.screen.pad, self.dy + len(self.choices) + 7, self.dx + 38, 13, 135, 'Предыстория') draw_text(self.screen.pad, self.dy + 3, self.dx + 40, len(self.choices) + 5, 132, self.description) tlen = draw_text(self.screen.pad, self.dy + len(self.choices) + 9, self.dx + 40, len(self.choices) + 5, 132, self.personal) draw_text(self.screen.pad, self.dy + len(self.choices) + 9 + tlen, self.dx + 40, len(self.choices) + 5, 132, self.skills) self._print_stats() def _print_stats(self): draw_class_stats(self.screen.pad, self.dy + len(self.choices) + 9, self.dx + 3, self.clazz) draw_text(self.screen.pad, self.dy + len(self.choices) + 16, self.dx + 3, 1, 34, '(можно изменить позднее)')