"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: pmachines/menu.py:71
+#: lib/engine/gui/page.py:188
+msgid "Quit"
+msgstr "Esci"
+
+#: lib/engine/gui/page.py:188 game/menu.py:147 game/menu.py:169
+#: game/menu.py:197
+msgid "Back"
+msgstr "Indietro"
+
+#: lib/engine/gui/mainpage.py:34
+msgid "version: "
+msgstr "versione: "
+
+#: lib/engine/gui/mainpage.py:41
+msgid "made with heart with panda3d, panda3d-simplepbr, panda3d-gltf"
+msgstr "fatto col cuore con panda3d, panda3d-simplepbr, panda3d-gltf"
+
+#: game/menu.py:72
msgid "Play"
msgstr "Gioca"
-#: pmachines/menu.py:74
+#: game/menu.py:75
msgid "Options"
msgstr "Opzioni"
-#: pmachines/menu.py:77
+#: game/menu.py:78
msgid "Credits"
msgstr "Riconoscimenti"
-#: pmachines/menu.py:80
+#: game/menu.py:81
msgid "Exit"
msgstr "Esci"
-#: pmachines/menu.py:86 pmachines/menu.py:89 pmachines/menu.py:237
+#: game/menu.py:87 game/menu.py:90 game/menu.py:230
msgid "English"
msgstr "Inglese"
-#: pmachines/menu.py:86 pmachines/menu.py:90 pmachines/menu.py:238
+#: game/menu.py:87 game/menu.py:91 game/menu.py:231
msgid "Italian"
msgstr "Italiano"
-#: pmachines/menu.py:93
+#: game/menu.py:94
msgid "Language"
msgstr "Linguaggio"
-#: pmachines/menu.py:99
+#: game/menu.py:100
msgid "Volume"
msgstr ""
-#: pmachines/menu.py:109
+#: game/menu.py:110
msgid "Fullscreen"
msgstr ""
-#: pmachines/menu.py:128
+#: game/menu.py:129
msgid "Resolution"
msgstr ""
-#: pmachines/menu.py:134
+#: game/menu.py:135
#, fuzzy
msgid "Antialiasing"
msgstr "Italiano"
-#: pmachines/menu.py:140
+#: game/menu.py:141
msgid "Shadows"
msgstr ""
-#: pmachines/menu.py:146 pmachines/menu.py:168 pmachines/menu.py:204
-#: lib/engine/gui/page.py:188
-msgid "Back"
-msgstr "Indietro"
-
-#: pmachines/menu.py:155
+#: game/menu.py:156
msgid ""
"Code and gfx\n"
" \ 1scale\ 1Flavio Calva\ 2\n"
" \ 1scale\ 1Stefan Grossmann\ 2"
msgstr ""
-#: pmachines/menu.py:160
+#: game/menu.py:161
msgid "Website"
msgstr ""
-#: pmachines/menu.py:163
+#: game/menu.py:164
msgid ""
"Special thanks to:\n"
" \ 1scale\ 1rdb\ 2\n"
" \ 1scale\ 1Damiana Ercolani\ 2"
msgstr ""
-#: pmachines/scene.py:429
+#: game/scene.py:433
msgid "You win!"
msgstr ""
-#: pmachines/scene.py:506
+#: game/scene.py:502
msgid "You have failed!"
msgstr ""
-#: pmachines/scenes/scene_domino.py:15
+#: game/scenes/scene_domino.py:13
msgid "Domino"
msgstr ""
-#: pmachines/scenes/scene_domino.py:38 pmachines/scenes/scene_box.py:38
-#: pmachines/scenes/scene_domino_box.py:51
-#: pmachines/scenes/scene_basketball.py:54
-#: pmachines/scenes/scene_domino_box_basketball.py:40
-#: pmachines/scenes/scene_teeter_tooter.py:41
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:50
+#: game/scenes/scene_domino.py:36 game/scenes/scene_box.py:36
+#: game/scenes/scene_domino_box.py:49 game/scenes/scene_basketball.py:52
+#: game/scenes/scene_domino_box_basketball.py:38
+#: game/scenes/scene_teeter_tooter.py:39
+#: game/scenes/scene_teeter_domino_box_basketball.py:48
msgid "Scene: "
msgstr ""
-#: pmachines/scenes/scene_domino.py:39
+#: game/scenes/scene_domino.py:37
msgid ""
"Goal: every domino piece must fall\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_domino.py:40 pmachines/scenes/scene_box.py:40
-#: pmachines/scenes/scene_domino_box.py:53
-#: pmachines/scenes/scene_basketball.py:56
-#: pmachines/scenes/scene_domino_box_basketball.py:42
-#: pmachines/scenes/scene_teeter_tooter.py:43
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:52
+#: game/scenes/scene_domino.py:38 game/scenes/scene_box.py:38
+#: game/scenes/scene_domino_box.py:51 game/scenes/scene_basketball.py:54
+#: game/scenes/scene_domino_box_basketball.py:40
+#: game/scenes/scene_teeter_tooter.py:41
+#: game/scenes/scene_teeter_domino_box_basketball.py:50
msgid ""
"keep \ 5mouse_l\ 5 pressed to drag an item\n"
"\n"
"\n"
"tieni premuto \ 5mouse_r\ 5 per ruotare un oggetto"
-#: pmachines/scenes/scene_box.py:15
+#: game/scenes/scene_box.py:13
msgid "Box"
msgstr ""
-#: pmachines/scenes/scene_box.py:39
+#: game/scenes/scene_box.py:37
msgid ""
"Goal: the left box must hit the right box\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_domino_box.py:15
+#: game/scenes/scene_domino_box.py:13
msgid "Domino and box"
msgstr ""
-#: pmachines/scenes/scene_domino_box.py:52
+#: game/scenes/scene_domino_box.py:50
msgid ""
"Goal: only the last piece of each row must be up\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_basketball.py:15
+#: game/scenes/scene_basketball.py:13
msgid "Basket ball"
msgstr ""
-#: pmachines/scenes/scene_basketball.py:55
-#: pmachines/scenes/scene_teeter_tooter.py:42
+#: game/scenes/scene_basketball.py:53 game/scenes/scene_teeter_tooter.py:40
msgid ""
"Goal: you must hit every domino piece\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_domino_box_basketball.py:15
+#: game/scenes/scene_domino_box_basketball.py:13
msgid "Domino, box and basket ball"
msgstr ""
-#: pmachines/scenes/scene_domino_box_basketball.py:41
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:51
+#: game/scenes/scene_domino_box_basketball.py:39
+#: game/scenes/scene_teeter_domino_box_basketball.py:49
msgid ""
"Goal: every domino piece must be hit\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_teeter_tooter.py:15
+#: game/scenes/scene_teeter_tooter.py:13
msgid "Teeter tooter"
msgstr ""
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:15
+#: game/scenes/scene_teeter_domino_box_basketball.py:13
msgid "Teeter tooter, domino, box and basket ball"
msgstr ""
-#: lib/engine/gui/page.py:188
-msgid "Quit"
-msgstr "Esci"
-
-#: lib/engine/gui/mainpage.py:34
-msgid "version: "
-msgstr "versione: "
-
-#: lib/engine/gui/mainpage.py:41
-msgid "made with heart with panda3d, panda3d-simplepbr, panda3d-gltf"
-msgstr "fatto col cuore con panda3d, panda3d-simplepbr, panda3d-gltf"
-
#~ msgid "Support us"
#~ msgstr "Supportaci"
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
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 and int(args.functional_test) == 1:
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,
root = str(Path(dirname(dirname(__file__))).parent) + '/'
if 'itch' in __file__.split(sep):
root = str(Path(dirname(__file__))) + '/'
- if __file__ == '/app/bin/yocto': # flatpak
+ if __file__ == '/app/bin/pmachines': # flatpak
root = '/app/bin/'
for branch in branches:
try:
'''Computes the version of the current build.'''
day = strftime('%y%m%d')
root = str(Path(dirname(dirname(__file__))).parent) + '/'
- if __file__ == '/app/bin/yocto': # flatpak
+ if __file__ == '/app/bin/pmachines': # flatpak
root = '/app/bin/'
if _branch() == 'stable':
pref, _ver = '', ''
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (525, 350), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 510), (670, 350), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_domino')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_domino')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(590, 420), 'left']) # home
self._screenshot(FunctionalTest.screenshot_time, 'home_back_from_fail')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 130), 'left']) # play
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (525, 350), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (670, 350), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_domino_2')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_domino_2')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (540, 140), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(540, 130), (600, 130), 'right']) # rotate the piece
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (665, 355), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'win_domino')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'win_domino')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
self._screenshot(FunctionalTest.screenshot_time, 'scene_box')
# scene 2
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (660, 585), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (660, 515), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_box')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_box')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (660, 585), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (660, 515), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (660, 430), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'win_box')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'win_box')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
self._screenshot(FunctionalTest.screenshot_time, 'scene_box_domino')
# scene 3
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (865, 415), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (865, 330), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_box_domino')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_box_domino')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (860, 415), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (775, 235), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'win_box_domino')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'win_box_domino')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
self._screenshot(FunctionalTest.screenshot_time, 'scene_basketball')
# scene 4
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(820, 455), 'left']) # close instructions
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (630, 300), 'left']) # drag a ball
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_basketball')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_basketball')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (360, 150), 'left']) # drag a ball
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'win_basketball')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'win_basketball')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
self._screenshot(FunctionalTest.screenshot_time, 'scene_domino_box_basketball')
# scene 5
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (550, 415), 'left']) # drag a box
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (560, 340), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_domino_box_basketball')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_domino_box_basketball')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (550, 415), 'left']) # drag a box
- self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (620, 410), 'left']) # drag a piece
- self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(620, 430), (665, 425), 'right']) # rotate a piece
+ self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(30, 50), (618, 412), 'left']) # drag a piece
+ self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(620, 430), (660, 425), 'right']) # rotate a piece
self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(615, 415), (615, 420), 'left']) # drag a piece
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- self._screenshot(10 + FunctionalTest.screenshot_time, 'win_domino_box_basketball')
+ self._screenshot(16 + FunctionalTest.screenshot_time, 'win_domino_box_basketball')
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
# self._screenshot(FunctionalTest.screenshot_time, 'scene_teeter_tooter')
# # scene 6
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(820, 455), 'left']) # close instructions
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (490, 300), 'left']) # drag a box
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- # self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_teeter_tooter')
+ # self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_teeter_tooter')
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (490, 150), 'left']) # drag a box
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(515, 115), (515, 122), 'right']) # rotate a box
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- # self._screenshot(10 + FunctionalTest.screenshot_time, 'win_teeter_tooter')
+ # self._screenshot(16 + FunctionalTest.screenshot_time, 'win_teeter_tooter')
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(690, 420), 'left']) # next
# self._screenshot(FunctionalTest.screenshot_time, 'scene_teeter_domino_box_basketball')
# scene 7
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(880, 455), 'left']) # close instructions
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (155, 180), 'left']) # drag a box
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- # self._screenshot(10 + FunctionalTest.screenshot_time, 'fail_teeter_domino_box_basketball')
+ # self._screenshot(16 + FunctionalTest.screenshot_time, 'fail_teeter_domino_box_basketball')
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(640, 420), 'left']) # replay
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(60, 60), (170, 80), 'left']) # drag a box
# self._event(FunctionalTest.evt_time, 'mousedrag', False, False, [(195, 50), (195, 80), 'right']) # rotate a box
# self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(1260, 695), 'left']) # play
- # self._screenshot(10 + FunctionalTest.screenshot_time, 'win_teeter_domino_box_basketball')
+ # self._screenshot(16 + FunctionalTest.screenshot_time, 'win_teeter_domino_box_basketball')
self._event(FunctionalTest.evt_time, 'mouseclick', False, False, [(590, 420), 'left']) # home
self._screenshot(FunctionalTest.screenshot_time, 'home_from_play')
from logging import basicConfig, info, INFO, DEBUG, getLogger
from configparser import ConfigParser
from sys import platform, argv
+from platform import system
+from pathlib import Path
+from glob import glob
from json import load, dumps
#from datetime import datetime
from pprint import pprint
from os import getcwd, environ
-from os.path import exists
+from os.path import exists, dirname
from traceback import print_stack
from sys import version_info
# from platform import system, release, architecture, platform, processor, \
# version, machine
# from multiprocessing import cpu_count
-from panda3d.core import Filename, GraphicsWindow
+from panda3d.core import Filename, GraphicsWindow, PandaSystem
+from panda3d.bullet import get_bullet_version
from lib.gameobject import Colleague
from lib.lib.builder import LibP3d
+import sys
lev = INFO
opt_path = ''
if platform in ['win32', 'linux'] and not exists('main.py'):
# it is the deployed version for windows
- opt_path = str(Filename.get_user_appdata_directory()) + '/yocto_racer'
+ opt_path = str(Filename.get_user_appdata_directory()) + '/pmachines'
opath = LibP3d.fixpath(opt_path + '/options.ini') if opt_path else \
'options.ini'
if exists(opath):
if verbose and not self.eng.cfg.dev_cfg.verbose_log: return
info(msg)
+ @property
+ def is_appimage(self):
+ par_path = str(Path(__file__).parent.absolute())
+ is_appimage = par_path.startswith('/tmp/.mount_Pmachi')
+ return is_appimage and par_path.endswith('/usr/bin')
+
+ @property
+ def curr_path(self):
+ # this is different from the music's one since it does not work
+ # with the version in windows
+ if sys.platform == 'darwin':
+ return dirname(__file__) + '/../Resources/'
+ # return dirname(__file__)
+ par_path = str(Path(__file__).parent.absolute())
+ if self.is_appimage:
+ return str(Path(par_path).absolute())
+ is_snap = par_path.startswith('/snap/')
+ is_snap = is_snap and par_path.endswith('/x1')
+ if is_snap:
+ return str(Path(par_path).absolute())
+ #return getcwd()
+ curr_path = dirname(__file__)
+ info('current path: %s' % curr_path)
+ return curr_path
+
+ @property
+ def build_version(self):
+ appimg_mnt = glob('/tmp/.mount_Pmachi*')
+ if appimg_mnt:
+ #with open(appimg_mnt[0] + '/usr/bin/appimage_version.txt') as fver:
+ with open(self.curr_path + '/assets/bld_version.txt') as fver:
+ return fver.read().strip()
+ try:
+ with open(self.curr_path + '/assets/bld_version.txt') as fver:
+ return fver.read().strip()
+ except FileNotFoundError:
+ info('not found ' + self.curr_path + '/assets/bld_version.txt')
+ return 'notfound'
+
def log_cfg(self):
if '--version' in argv:
path = str(Filename.get_user_appdata_directory())
home = '/home/flavio' # we must force this for wine
if path.startswith('/c/users/') and exists(home + '/.wine/'):
path = home + '/.wine/drive_' + path[1:]
- info('writing %s' % path + '/yocto_racer/obs_version.txt')
- with open(path + '/yocto_racer/obs_version.txt', 'w') as f:
- f.write(self.eng.logic.version)
+ info('writing %s' % path + '/pmachines/obs_version.txt')
+ with open(path + '/pmachines/obs_version.txt', 'w') as f:
+ #f.write(self.eng.logic.version)
+ f.write(self.build_version)
if not platform.startswith('win'):
from os import ttyname # here because it doesn't work on windows
import sys
with open(ttyname(0), 'w') as fout:
sys.stdout = fout
- print('version: ' + self.eng.logic.version)
- messages = ['version: ' + self.eng.logic.version]
+ print('version: ' + self.build_version) # self.eng.logic.version)
+ messages = ['version: ' + self.build_version] # self.eng.logic.version]
messages += ['argv[0]: %s' % argv[0]]
messages += ['getcwd: %s' % getcwd()]
messages += ['__file__: %s' % __file__]
# messages += ['cores: ' + str(cpu_count())]
# except NotImplementedError: # on Windows
# messages += ['cores: not implemented']
- lib_ver = self.eng.lib.version
+ lib_ver = PandaSystem.get_version_string()
try:
import psutil
mem = psutil.virtual_memory().total / 1000000000.0
messages += ['memory: %s GB' % round(mem, 2)]
except ImportError: info("can't import psutil") # windows
- lib_commit = self.eng.lib.lib_commit
+ lib_commit = PandaSystem.get_git_commit()
py_ver = [str(elm) for elm in version_info[:3]]
messages += ['python version: %s' % '.'.join(py_ver)]
messages += ['panda version: %s %s' % (lib_ver, lib_commit)]
- messages += ['bullet version: ' + str(self.eng.lib.phys_version)]
- messages += ['appdata: ' + str(self.eng.lib.user_appdata_dir)]
+ messages += ['bullet version: ' + str(get_bullet_version())]
+ messages += ['appdata: ' + str(Filename.get_user_appdata_directory())]
if base.win and isinstance(base.win, GraphicsWindow): # not headless
print(base.win.get_keyboard_map())
list(map(self.log, messages))
def log_cfg(self):
LogMgrBase.log_cfg(self)
- messages = [self.eng.lib.driver_vendor]
- messages += [self.eng.lib.driver_renderer]
- shad_maj = self.eng.lib.driver_shader_version_major
- shad_min = self.eng.lib.driver_shader_version_minor
+ messages = [base.win.get_gsg().get_driver_vendor()]
+ messages += [base.win.get_gsg().get_driver_renderer()]
+ shad_maj = base.win.get_gsg().get_driver_shader_version_major()
+ shad_min = base.win.get_gsg().get_driver_shader_version_minor()
messages += ['shader: {maj}.{min}'.format(maj=shad_maj, min=shad_min)]
- messages += [self.eng.lib.driver_version]
- drv_maj = self.eng.lib.driver_version_major
- drv_min = self.eng.lib.driver_version_minor
+ messages += [base.win.get_gsg().get_driver_version()]
+ drv_maj = base.win.get_gsg().get_driver_version_major()
+ drv_min = base.win.get_gsg().get_driver_version_minor()
drv = 'driver version: {maj}.{min}'
messages += [drv.format(maj=drv_maj, min=drv_min)]
- messages += ['fullscreen: ' + str(self.eng.lib.fullscreen)]
- res_x, res_y = self.eng.lib.resolution
+ fullscreen = None
+ if isinstance(base.win, GraphicsWindow):
+ fullscreen = base.win.get_properties().get_fullscreen()
+ messages += ['fullscreen: ' + str(fullscreen)]
+ def resolution():
+ if not isinstance(base.win, GraphicsWindow):
+ return 800, 600
+ win_prop = base.win.get_properties()
+ return win_prop.get_x_size(), win_prop.get_y_size()
+ res_x, res_y = resolution()
res_tmpl = 'resolution: {res_x}x{res_y}'
messages += [res_tmpl.format(res_x=res_x, res_y=res_y)]
list(map(self.log, messages))
time = datetime.datetime.now().strftime('%y%m%d%H%M%S')
#res = base.win.save_screenshot(Filename(path or ("yocto%s.png" % time)))
#debug('screenshot %s (%s)' % (path or ("yocto%s.png" % time), res))
- res = base.screenshot(path or ("yocto%s.png" % time), False)
- info('screenshot %s (%s; %s)' % (path or ("yocto%s.png" % time), res, getcwd()))
+ res = base.screenshot(path or ("pmachines%s.png" % time), False)
+ info('screenshot %s (%s; %s)' % (path or ("pmachines%s.png" % time), res, getcwd()))
@staticmethod
def enable_shader(): render.set_shader_auto()
- [X] appimage
- [X] windows
- [X] flatpak
+ - [X] versions
- [ ] itchio
- - [ ] versions
+** READY messenger.send('force_win') and messenger.send('force_fail')
** READY management of error and success (upload builds, itch.io)
** READY crontab
* READY fix level 6 to something that can be systematically tested :bug:
* READY fix level 7 to something that can be systematically tested :bug:
* READY fix level domino box basketball: it can be solved trivially :bug:
* READY fix actions: rewind, prev, next :bug:
+* READY move functional tests in tests from lib.engine
* READY refactoring
* BACKLOG version 0.0.yymmdd
* BACKLOG do intro video with moviepy
rmtree('./tests/' + dirname, ignore_errors=True)
def test_lang(self):
- LanguageBuilder.pot('test_yocto', './tests/po/')
- self.assertTrue(exists('./tests/po/test_yocto.pot'))
- LanguageBuilder.merge('it_IT', './tests/po/', './tests/locale/', 'test_yocto')
- LanguageBuilder.mo('./tests/locale/it_IT/LC_MESSAGES/test_yocto.mo',
- './tests/locale/', 'test_yocto')
- self.assertTrue(exists('./tests/locale/it_IT/LC_MESSAGES/test_yocto.mo'))
+ LanguageBuilder.pot('test_pmachines', './tests/po/')
+ self.assertTrue(exists('./tests/po/test_pmachines.pot'))
+ LanguageBuilder.merge('it_IT', './tests/po/', './tests/locale/', 'test_pmachines')
+ LanguageBuilder.mo('./tests/locale/it_IT/LC_MESSAGES/test_pmachines.mo',
+ './tests/locale/', 'test_pmachines')
+ self.assertTrue(exists('./tests/locale/it_IT/LC_MESSAGES/test_pmachines.mo'))
from pathlib import Path
+from datetime import datetime
from itertools import product
from logging import info
import sys
if '' in sys.path: sys.path.remove('')
sys.path.append(str(Path(__file__).parent.parent.parent))
from unittest import TestCase
-from shutil import rmtree
+from shutil import rmtree, copy
from time import sleep
from os import system, remove, environ
from os.path import exists, basename, join
self.__clean()
def tearDown(self):
- self.__clean()
+ pass # self.__clean()
def test_ref(self):
info('test_ref')
res = exec_cmd(cmd)
if exists('diff.png'): remove('diff.png')
print('compare %s %s: %s' % (ref_img, tst_img, res))
- return float(res) > .64
+ return float(res) > .8
def __test_template(self, cmd, path):
if environ.get('FUNCTIONAL') != '1':
self.assertGreater(len(files), 1)
for fname in files:
self.assertTrue(exists(path + basename(fname)), '%s does not exist' % (path + basename(fname)))
- self.assertTrue(
- self.__similar_images(
- str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
- path + basename(fname)),
- 'error while comparing %s and %s' % (
- str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
- path + basename(fname)))
+ similar = self.__similar_images(
+ str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
+ path + basename(fname)),
+ 'error while comparing %s and %s' % (
+ str(Path.home()) + '/.local/share/pmachines/tests/functional_ref_%s/' % _branch() + basename(fname),
+ path + basename(fname))
+ if not similar:
+ timestamp = datetime.now().strftime('%y%m%d%H%M%S%f')
+ copy(path + basename(fname), '~/Desktop/' + basename(fname)[:-4] + timestamp + '.png')
+ self.assertTrue(similar)
def test_code(self):
info('test_code')
'timeout 720s wine %s --functional-test 2' % (abspath, abspath),
str(Path.home()) + '/.wine/drive_c/users/flavio/AppData/Local/pmachines/tests/functional/')
- # def test_versions(self):
- # info('test_versions')
- # if environ.get('FUNCTIONAL') != '1':
- # self.skipTest('skipped functional tests')
- # bld_branch = {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
- # with open('/home/flavio/pmachines_builder/last_bld.txt') as f:
- # lines = f.readlines()
- # for line in lines:
- # if line.strip().split()[0] == _branch():
- # commit = line.strip().split()[1][:7]
- # _ver = ver
- # if _branch() == 'stable':
- # with open('/home/flavio/pmachines_builder/pmachines/assets/version.txt') as fver:
- # _ver = fver.read().strip() + '-'
- # exp = '%s-%s' % (_ver, commit)
- # cmds = [
- # ('./build/manylinux1_x86_64/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
- # ('./dist/Pmachines-%s-x86_64.AppImage --version' % bld_branch, str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
- # ('timeout 720s wine ./build/win_amd64/pmachines.exe --version', '/home/flavio/.wine/drive_c/users/flavio/AppData/Local/pmachines/obs_version.txt')
- # ]
- # if environ.get('FUNCTIONALPOST') == '1':
- # if _branch() == 'master':
- # self.__update_itchio()
- # cmds += [('/home/flavio/.config/itch/apps/pmachines/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt')]
- # cmds += [('flatpak run it.ya2.Pmachines//%s --version' % bld_branch, '/home/flavio/.var/app/it.ya2.Pmachines/data/pmachines/obs_version.txt')]
- # system('flatpak update -y it.ya2.Pmachines//%s' % bld_branch)
- # for cmd in cmds:
- # if exists(cmd[1]):
- # remove(cmd[1])
- # info('launching %s' % cmd[0])
- # exec_cmd(cmd[0])
- # with open(cmd[1]) as f:
- # obs = f.read().strip()
- # self.assertEqual(obs, exp)
+ def test_versions(self):
+ info('test_versions')
+ if environ.get('FUNCTIONAL') != '1':
+ self.skipTest('skipped functional tests')
+ bld_branch = {'master': 'alpha', 'rc': 'rc', 'stable': 'stable'}[_branch()]
+ with open('/home/flavio/builders/pmachines_builder/last_bld.txt') as f:
+ lines = f.readlines()
+ for line in lines:
+ if line.strip().split()[0] == _branch():
+ commit = line.strip().split()[1][:7]
+ _ver = ver
+ if _branch() == 'stable':
+ with open('/home/flavio/builders/pmachines_builder/pmachines/assets/version.txt') as fver:
+ _ver = fver.read().strip() + '-'
+ exp = '%s-%s' % (_ver, commit)
+ cmds = [
+ ('./build/manylinux1_x86_64/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
+ ('./dist/Pmachines-%s-x86_64.AppImage --version' % bld_branch, str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt'),
+ ('timeout 720s wine ./build/win_amd64/pmachines.exe --version', '/home/flavio/.wine/drive_c/users/flavio/AppData/Local/pmachines/obs_version.txt')
+ ]
+ if environ.get('FUNCTIONALPOST') == '1':
+ # if _branch() == 'master':
+ # self.__update_itchio()
+ # cmds += [('/home/flavio/.config/itch/apps/pmachines/pmachines --version', str(Filename.get_user_appdata_directory()) + '/pmachines/obs_version.txt')]
+ cmds += [('flatpak run it.ya2.Pmachines//%s --version' % bld_branch, '/home/flavio/.var/app/it.ya2.Pmachines/data/pmachines/obs_version.txt')]
+ system('flatpak update -y it.ya2.Pmachines//%s' % bld_branch)
+ for cmd in cmds:
+ if exists(cmd[1]):
+ remove(cmd[1])
+ info('launching %s' % cmd[0])
+ exec_cmd(cmd[0])
+ with open(cmd[1]) as f:
+ obs = f.read().strip()
+ self.assertEqual(obs, exp, 'during ' + cmd[0])