from webbrowser import open_new_tab
from xmlrpc.client import ServerProxy
from panda3d.core import Texture, TextNode, WindowProperties, LVector2i, \
- TextProperties, TextPropertiesManager
+ TextProperties, TextPropertiesManager, NodePath
from direct.gui.DirectGui import DirectButton, DirectCheckButton, \
DirectOptionMenu, DirectSlider, DirectCheckButton
from direct.gui.DirectGuiGlobals import FLAT
from direct.gui.OnscreenText import OnscreenText
from direct.showbase.DirectObject import DirectObject
from ya2.utils.cursor import MouseCursor
+from ya2.p3d.p3d import LibP3d
from logics.scene import Scene
from panda3d.bullet import BulletWorld
class Menu(DirectObject):
- def __init__(self, fsm, lang_mgr, opt_file, music, pipeline, scenes, fun_test):
+ def __init__(self, fsm, lang_mgr, opt_file, music, pipeline, scenes, fun_test, pos_mgr):
super().__init__()
self._fsm = fsm
self._lang_mgr = lang_mgr
self._pipeline = pipeline
self._scenes = scenes
self._fun_test = fun_test
+ self._pos_mgr = pos_mgr
self._enforced_res = ''
self._cursor = MouseCursor(
'assets/images/buttons/arrowUpLeft.dds', (.04, 1, .04), (.5, .5, .5, 1),
info('enforced resolution: ' + val)
def _set_main(self):
+ self._pos_mgr.reset()
self._widgets = []
self._widgets += [DirectButton(
text=_('Play'), pos=(0, 1, .6), command=self.on_play,
**self._common_btn)]
+ self._pos_mgr.register('play', LibP3d.wdg_pos(self._widgets[-1]))
self._widgets += [DirectButton(
text=_('Options'), pos=(0, 1, .2), command=self.on_options,
**self._common_btn)]
+ self._pos_mgr.register('options', LibP3d.wdg_pos(self._widgets[-1]))
self._widgets += [DirectButton(
text=_('Credits'), pos=(0, 1, -.2), command=self.on_credits,
**self._common_btn)]
+ self._pos_mgr.register('credits', LibP3d.wdg_pos(self._widgets[-1]))
def btn_exit():
if self._fun_test:
ServerProxy('http://localhost:6000').destroy()
self._widgets += [DirectButton(
text=_('Exit'), pos=(0, 1, -.6), command=lambda: btn_exit(),
**self._common_btn)]
+ self._pos_mgr.register('exit', LibP3d.wdg_pos(self._widgets[-1]))
self._rearrange_width()
self.accept('enforce_resolution', self.enforce_res)
def _set_options(self):
+ self._pos_mgr.reset()
self._widgets = []
self._lang_funcs = [lambda: _('English'), lambda: _('Italian')]
items = [fnc() for fnc in self._lang_funcs]
btn.popupMenu['frameColor'] = self._common_btn['frameColor']
btn.popupMenu['relief'] = self._common_btn['relief']
self._widgets += [btn]
+ pos_lang = LibP3d.wdg_pos(self._widgets[-1])
+ self._pos_mgr.register('languages', pos_lang)
+ pos_eng = pos_lang[0] + 300, pos_lang[1] - 57
+ pos_it = pos_lang[0] + 300, pos_lang[1] + 33
+ self._pos_mgr.register('english', pos_eng)
+ self._pos_mgr.register('italian', pos_it)
self._widgets += [OnscreenText(
_('Volume'), pos=(-.1, .55), font=self._common['text_font'],
scale=self._common['scale'], fg=self._common['text_fg'],
value=self._opt_file['settings']['volume'],
command=self.on_volume,
**self._common_slider)]
+ vol_pos = LibP3d.wdg_pos(self._widgets[-1])
+ self._pos_mgr.register('volume', vol_pos)
+ self._pos_mgr.register('volume_0', [vol_pos[0] - 153, vol_pos[1]])
self._slider = self._widgets[-1]
self._widgets += [DirectCheckButton(
text=_('Fullscreen'), pos=(0, 1, .3), command=self.on_fullscreen,
indicator_relief=self._common_btn['relief'],
indicatorValue=self._opt_file['settings']['fullscreen'],
**self._common_btn)]
+ self._pos_mgr.register('fullscreen', LibP3d.wdg_pos(self._widgets[-1]))
res = self._opt_file['settings']['resolution']
d_i = base.pipe.get_display_information()
def _res(idx):
btn.popupMenu['frameColor'] = self._common_btn['frameColor']
btn.popupMenu['relief'] = self._common_btn['relief']
self._widgets += [btn]
+ pos_res = LibP3d.wdg_pos(self._widgets[-1])
+ self._pos_mgr.register('resolutions', pos_res) # 680 365
+ self._pos_mgr.register('res_1440x900', [pos_res[0] + 320, pos_res[1] + 75])
+ self._pos_mgr.register('res_1360x768', [pos_res[0] + 430, pos_res[1] -285])
self._widgets += [DirectCheckButton(
text=_('Antialiasing'), pos=(0, 1, -.2), command=self.on_aa,
indicator_frameColor=self._common_opt['highlightColor'],
indicator_relief=self._common_btn['relief'],
indicatorValue=self._opt_file['settings']['antialiasing'],
**self._common_btn)]
+ self._pos_mgr.register('aa', LibP3d.wdg_pos(self._widgets[-1]))
self._widgets += [DirectCheckButton(
text=_('Shadows'), pos=(0, 1, -.45), command=self.on_shadows,
indicator_frameColor=self._common_opt['highlightColor'],
indicator_relief=self._common_btn['relief'],
indicatorValue=self._opt_file['settings']['shadows'],
**self._common_btn)]
+ self._pos_mgr.register('shadows', LibP3d.wdg_pos(self._widgets[-1]))
self._widgets += [DirectButton(
text=_('Back'), pos=(0, 1, -.8), command=self.on_back,
**self._common_btn)]
+ self._pos_mgr.register('back', LibP3d.wdg_pos(self._widgets[-1]))
self.accept('enforce_resolution', self.enforce_res)
def _set_credits(self):
+ self._pos_mgr.reset()
self._widgets = []
tp_scale = TextProperties()
tp_scale.set_text_scale(.64)
self._widgets += [DirectButton(
text=_('Back'), pos=(0, 1, -.8), command=self.on_back,
**self._common_btn)]
+ self._pos_mgr.register('back', LibP3d.wdg_pos(self._widgets[-1]))
self.accept('enforce_resolution', self.enforce_res)
def on_play(self):
+ self._pos_mgr.reset()
self.destroy()
self._cursor = MouseCursor(
'assets/images/buttons/arrowUpLeft.dds', (.04, 1, .04), (.5, .5, .5, 1),
command=self.start, extraArgs=[cls], text_wordwrap=6,
frameTexture='assets/images/scenes/%s.dds' % cls.__name__,
**cmn)]
+ name = cls.__name__[5:].lower()
+ self._pos_mgr.register(name, LibP3d.wdg_pos(self._widgets[-1]))
for j in range(4):
tnode = self._widgets[-1].component('text%s' % j).textNode
height = - tnode.getLineHeight() / 2
self._widgets += [DirectButton(
text=_('Back'), pos=(0, 1, -.8), command=self.on_back,
**self._common_btn)]
+ self._pos_mgr.register('back', LibP3d.wdg_pos(self._widgets[-1]))
def start(self, cls):
self._fsm.demand('Scene', cls)