ya2 · news · projects · code · about

housekeeping: pmachines.gui.menu, pmachines.application.persistency
[pmachines.git] / pmachines / gui / menu.py
CommitLineData
7ac52030
FC
1from collections import namedtuple
2from panda3d.core import TextNode
4071c6d8 3from direct.gui.DirectGuiGlobals import FLAT
7ac52030
FC
4from ya2.utils.gui import GuiTools
5from ya2.utils.audio import AudioTools
6from pmachines.gui.main_page import MainPage
7from pmachines.gui.play_page import PlayPage
8from pmachines.gui.options_page import OptionsPage
9from pmachines.gui.credits_page import CreditsPage
4071c6d8
FC
10
11
7ac52030 12class 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