from os.path import exists
from os import makedirs
from panda3d.core import Filename, load_prc_file_data, AntialiasAttrib, \
- Texture, WindowProperties, LVector2i
+ Texture, WindowProperties, LVector2i, TextNode
from panda3d.bullet import BulletWorld, BulletDebugNode
from direct.showbase.ShowBase import ShowBase
+from direct.gui.OnscreenText import OnscreenText
from direct.fsm.FSM import FSM
from game.music import MusicMgr
from game.items.background import Background
from lib.dictfile import DctFile
from lib.lib.p3d.p3d import LibP3d
from lib.engine.lang import LangMgr
+from lib.engine.log import LogMgr
+from lib.engine.functional import FunctionalTest
class MainFsm(FSM):
def __init__(self):
info('platform: %s' % platform)
info('exists main.py: %s' % exists('main.py'))
- args = self._parse_args()
+ self._args = args = self._parse_args()
self._configure(args)
self.base = ShowBase()
- self._prepare_window(args)
+ self._pipeline = None
self.updating = args.update
self.version = args.version
+ self.log_mgr = LogMgr.init_cls()(self)
+ self._prepare_window(args)
if args.update:
return
+ if args.functional_test:
+ self._options['settings']['volume'] = 0
self._music = MusicMgr(self._options['settings']['volume'])
self.lang_mgr = LangMgr(self._options['settings']['language'],
'pmachines',
self._fsm.demand('Scene', cls)
else:
self._fsm.demand('Menu')
+ if args.functional_test or args.functional_ref:
+ FunctionalTest(args.functional_ref)
def on_menu_enter(self):
self._menu_bg = Background()
self._menu = Menu(
self._fsm, self.lang_mgr, self._options, self._music,
- self._pipeline, self.scenes)
+ self._pipeline, self.scenes, self._args.functional_test or self._args.functional_ref)
def on_home(self):
self._fsm.demand('Menu')
load_prc_file_data('', 'window-title pmachines')
load_prc_file_data('', 'framebuffer-srgb true')
load_prc_file_data('', 'sync-video true')
+ if args.functional_test or args.functional_ref:
+ load_prc_file_data('', 'win-size 1360 768')
+ # otherwise it is not centered in exwm
# load_prc_file_data('', 'threading-model Cull/Draw')
# it freezes when you go to the next scene
if args.screenshot:
parser.add_argument('--version', action='store_true')
parser.add_argument('--optfile')
parser.add_argument('--screenshot')
+ parser.add_argument('--functional-test', action='store_true')
+ parser.add_argument('--functional-ref', action='store_true')
cmd_line = [arg for arg in iter(argv[1:]) if not arg.startswith('-psn_')]
args = parser.parse_args(cmd_line)
return args
'auto_close_instructions': 0,
'show_buffers': 0,
'debug_items': 0,
+ 'mouse_coords': 0,
'fps': 0}}
opt_path = LibP3d.fixpath(data_path + '/' + optfile) if data_path else optfile
opt_exists = exists(opt_path)
if res:
res = LVector2i(*[int(_res) for _res in res.split('x')])
else:
- d_i = base.pipe.get_display_information()
- def _res(idx):
- return d_i.get_display_mode_width(idx), \
- d_i.get_display_mode_height(idx)
- resolutions = [
- _res(idx) for idx in range(d_i.get_total_display_modes())]
+ resolutions = []
+ if not self.version:
+ d_i = base.pipe.get_display_information()
+ def _res(idx):
+ return d_i.get_display_mode_width(idx), \
+ d_i.get_display_mode_height(idx)
+ resolutions = [
+ _res(idx) for idx in range(d_i.get_total_display_modes())]
res = sorted(resolutions)[-1]
+ fullscreen = self._options['settings']['fullscreen']
props = WindowProperties()
- props.set_size(res)
- props.set_fullscreen(self._options['settings']['fullscreen'])
+ if args.functional_test or args.functional_ref:
+ fullscreen = False
+ else:
+ props.set_size(res)
+ props.set_fullscreen(fullscreen)
props.set_icon_filename('assets/images/icon/pmachines.ico')
- if not args.screenshot:
+ if not args.screenshot and not self.version:
base.win.request_properties(props)
#gltf.patch_loader(base.loader)
- if self._options['development']['simplepbr']:
+ if self._options['development']['simplepbr'] and not self.version:
self._pipeline = simplepbr.init(
use_normal_maps=True,
use_emission_maps=False,
base.set_frame_rate_meter(True)
#self.base.accept('window-event', self._on_win_evt)
self.base.accept('aspectRatioChanged', self._on_aspect_ratio_changed)
+ if self._options['development']['mouse_coords']:
+ coords_txt = OnscreenText(
+ '', parent=base.a2dTopRight, scale=0.04,
+ pos=(-.03, -.06), fg=(.9, .9, .9, 1), align=TextNode.A_right)
+ def update_coords(task):
+ txt = '%s %s' % (int(base.win.get_pointer(0).x),
+ int(base.win.get_pointer(0).y))
+ coords_txt['text'] = txt
+ return task.cont
+ taskMgr.add(update_coords, 'update_coords')
def _set_physics(self):
if self._options['development']['physics_debug']: