Commit | Line | Data |
---|---|---|
7ac52030 FC |
1 | from collections import namedtuple |
2 | from panda3d.core import TextNode | |
4071c6d8 | 3 | from direct.gui.DirectGuiGlobals import FLAT |
7ac52030 FC |
4 | from ya2.utils.gui import GuiTools |
5 | from ya2.utils.audio import AudioTools | |
6 | from pmachines.gui.main_page import MainPage | |
7 | from pmachines.gui.play_page import PlayPage | |
8 | from pmachines.gui.options_page import OptionsPage | |
9 | from pmachines.gui.credits_page import CreditsPage | |
4071c6d8 FC |
10 | |
11 | ||
7ac52030 | 12 | class Menu: |
ea71df6e | 13 | |
7ac52030 FC |
14 | def __init__(self, application_fsm, language_manager, option_file, |
15 | gfx_pipeline, scenes, | |
16 | running_functional_tests, test_positions): | |
74ed9732 | 17 | super().__init__() |
7ac52030 FC |
18 | self.__application_fsm = application_fsm |
19 | self.__language_manager = language_manager | |
20 | self.__option_file = option_file | |
21 | self.__gfx_pipeline = gfx_pipeline | |
22 | self.__scenes = scenes | |
23 | self.__running_functional_tests = running_functional_tests | |
24 | self.__test_positions = test_positions | |
25 | self.__gui_args = self.__build_gui_args() | |
26 | self.__page = None | |
27 | self.set_page('main') | |
28 | ||
29 | def __build_gui_args(self): | |
30 | base = { | |
4071c6d8 | 31 | 'scale': .12, |
7ac52030 | 32 | 'text_font': GuiTools.load_font('assets/fonts/Hanken-Book.ttf'), |
4071c6d8 FC |
33 | 'text_fg': (.9, .9, .9, 1), |
34 | 'relief': FLAT, | |
35 | 'frameColor': (.4, .4, .4, .14), | |
7ac52030 FC |
36 | 'rolloverSound': AudioTools.load_sfx('assets/audio/sfx/rollover.ogg'), |
37 | 'clickSound': AudioTools.load_sfx('assets/audio/sfx/click.ogg')} | |
38 | button = {'frameSize': (-4.8, 4.8, -.6, 1.2)} | base | |
39 | h = button['frameColor'] | |
40 | h = (h[0] + .2, h[1] + .2, h[2] + .2, h[3] + .2) | |
41 | option = { | |
42 | 'item_frameColor': button['frameColor'], | |
43 | 'popupMarker_frameColor': button['frameColor'], | |
44 | 'item_relief': button['relief'], | |
45 | 'item_text_font': button['text_font'], | |
46 | 'item_text_fg': button['text_fg'], | |
6fff1464 | 47 | 'textMayChange': 1, |
7ac52030 | 48 | 'highlightColor': h, |
6fff1464 | 49 | 'text_align': TextNode.A_center, |
7ac52030 FC |
50 | } | button |
51 | f = option['frameSize'] | |
52 | option['frameSize'] = f[0], f[1] - .56, f[2], f[3] | |
53 | slider = base | { | |
e1e44d5c FC |
54 | 'range': (0, 1), |
55 | 'thumb_frameColor': (.4, .4, .4, .4), | |
56 | 'thumb_scale': 1.6, | |
57 | 'scale': .4} | |
7ac52030 FC |
58 | del slider['rolloverSound'] |
59 | del slider['clickSound'] | |
60 | GuiArgs = namedtuple('GuiArgs', 'button option slider') | |
61 | gui_args = GuiArgs(button, option, slider) | |
62 | return gui_args | |
2612dfc8 | 63 | |
7ac52030 | 64 | def set_page(self, page_name): |
4071c6d8 | 65 | self.destroy() |
7ac52030 FC |
66 | if self.__page: self.__page.destroy() |
67 | match page_name: | |
68 | case 'main': p = MainPage(self, self.__test_positions, self.__gui_args, self.__running_functional_tests, self.__scenes, self.__application_fsm) | |
69 | case 'credits': p = CreditsPage(self, self.__test_positions, self.__gui_args, self.__option_file, self.__running_functional_tests) | |
70 | case 'options': p = OptionsPage(self, self.__test_positions, self.__option_file, self.__gui_args, self.__language_manager, self.__running_functional_tests, self.__gfx_pipeline) | |
71 | case 'play': p = PlayPage(self, self.__test_positions, self.__gui_args, self.__scenes, self.__option_file, self.__running_functional_tests, self.__application_fsm) | |
72 | self.__page = p | |
4071c6d8 FC |
73 | |
74 | def destroy(self): | |
7ac52030 FC |
75 | if self.__page: |
76 | self.__page.destroy() | |
77 | self.__page = None |