"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"PO-Revision-Date: 2022-09-07 17:08+0200\n"
+"PO-Revision-Date: 2022-09-29 15:34+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: pmachines/scene.py:483
+#: pmachines/scene.py:89
+msgid "Scene: "
+msgstr "Scena: "
+
+#: pmachines/scene.py:608
msgid "You win!"
msgstr "Hai vinto!"
-#: pmachines/scene.py:555
+#: pmachines/scene.py:681
msgid "You have failed!"
msgstr "Hai perso!"
msgstr "Esci"
#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:124
-#: pmachines/gui/menu.py:305
+#: pmachines/gui/menu.py:309
msgid "English"
msgstr "Inglese"
#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:125
-#: pmachines/gui/menu.py:306
+#: pmachines/gui/menu.py:310
msgid "Italian"
msgstr "Italiano"
msgstr "Ombre"
#: pmachines/gui/menu.py:213 pmachines/gui/menu.py:238
-#: pmachines/gui/menu.py:271
+#: pmachines/gui/menu.py:275
msgid "Back"
msgstr "Indietro"
"Ringraziamenti speciali a:\n"
" \ 1scale\ 1rdb\ 2\n"
" \ 1scale\ 1Luisa Tenuta\ 2\n"
-" \ 1scale\ 1Damiana Ercolani\ 2\n"
-
-#: pmachines/scenes/scene_basketball.py:13
-msgid "Basket ball"
-msgstr "Palla da basket"
-
-#: pmachines/scenes/scene_basketball.py:56 pmachines/scenes/scene_box.py:41
-#: pmachines/scenes/scene_domino.py:45 pmachines/scenes/scene_domino_box.py:54
-#: pmachines/scenes/scene_domino_box_basketball.py:51
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:54
-#: pmachines/scenes/scene_teeter_tooter.py:45
-msgid "Scene: "
-msgstr "Scena"
-
-#: pmachines/scenes/scene_basketball.py:57
-#: pmachines/scenes/scene_teeter_tooter.py:46
-msgid ""
-"Goal: you must hit every domino piece\n"
-"\n"
-msgstr "Devi colpire il pezzo del domino"
-
-#: pmachines/scenes/scene_basketball.py:58 pmachines/scenes/scene_box.py:43
-#: pmachines/scenes/scene_domino.py:47 pmachines/scenes/scene_domino_box.py:56
-#: pmachines/scenes/scene_domino_box_basketball.py:53
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:56
-#: pmachines/scenes/scene_teeter_tooter.py:47
-msgid ""
-"keep \ 5mouse_l\ 5 pressed to drag an item\n"
-"\n"
-"keep \ 5mouse_r\ 5 pressed to rotate an item"
-msgstr ""
-"tieni premuto \ 5mouse_l\ 5 per trascinare un oggetto\n"
-"\n"
-"tieni premuto \ 5mouse_r\ 5 per ruotare un oggetto"
-
-#: pmachines/scenes/scene_box.py:13
-msgid "Box"
-msgstr "Scatola"
-
-#: pmachines/scenes/scene_box.py:42
-msgid ""
-"Goal: the left box must hit the right box\n"
-"\n"
-msgstr ""
-"Obiettivo: la scatola a sinistra deve colpire la scatola a destra\n"
-"\n"
-
-#: pmachines/scenes/scene_domino.py:15
-msgid "Domino"
-msgstr "Domino"
-
-#: pmachines/scenes/scene_domino.py:46
-msgid ""
-"Goal: every domino piece must fall\n"
-"\n"
-msgstr ""
-"Obiettivo: ogni pezzo del domino deve cadere\n"
-"\n"
-
-#: pmachines/scenes/scene_domino_box.py:13
-msgid "Domino and box"
-msgstr "Domino e scatola"
-
-#: pmachines/scenes/scene_domino_box.py:55
-msgid ""
-"Goal: only the last piece of each row must be up\n"
-"\n"
-msgstr ""
-"Obiettivo: solo l'ultimo pezzo di ogni fila deve rimanere in piedi\n"
-"\n"
-
-#: pmachines/scenes/scene_domino_box_basketball.py:13
-msgid "Domino, box and basket ball"
-msgstr "Domino, scatola e palla da basket"
-
-#: pmachines/scenes/scene_domino_box_basketball.py:52
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:55
-msgid ""
-"Goal: every domino piece must be hit\n"
-"\n"
-msgstr ""
-"Obiettivo: ogni pezzo del domino deve essere colpito\n"
-"\n"
-
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:13
-msgid "Teeter tooter, domino, box and basket ball"
-msgstr "Altalena, domino, scatola e palla da basket"
+" \ 1scale\ 1Damiana Ercolani\ 2"
-#: pmachines/scenes/scene_teeter_tooter.py:13
-msgid "Teeter tooter"
-msgstr "Altalena"
+#~ msgid ""
+#~ "Goal: the left box must hit the right box\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Obiettivo: la scatola a sinistra deve colpire la scatola a destra\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Goal: you must hit every domino piece\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Devi colpire ogni pezzo del domino\n"
+#~ "\n"
+
+#~ msgid "Domino"
+#~ msgstr "Domino"
+
+#~ msgid ""
+#~ "keep \ 5mouse_l\ 5 pressed to drag an item\n"
+#~ "\n"
+#~ msgstr ""
+#~ "tieni premuto \ 5mouse_l\ 5 per trascinare un oggetto\n"
+#~ "\n"
+
+#~ msgid "keep \ 5mouse_r\ 5 pressed to rotate an item"
+#~ msgstr "tieni premuto \ 5mouse_r\ 5 per ruotare un oggetto"
+
+#~ msgid ""
+#~ "Goal: only the last piece of each row must be up\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Obiettivo: solo l'ultimo pezzo di ogni fila deve rimanere in piedi\n"
+#~ "\n"
+
+#~ msgid "Teeter tooter"
+#~ msgstr "Altalena"
+
+#~ msgid ""
+#~ "Goal: every domino piece must be hit\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Obiettivo: ogni pezzo del domino deve essere colpito\n"
+#~ "\n"
+
+#~ msgid ""
+#~ "Goal: every domino piece must fall\n"
+#~ "\n"
+#~ msgstr ""
+#~ "Obiettivo: ogni pezzo del domino deve cadere\n"
+#~ "\n"
+
+#~ msgid "Teeter tooter, domino, box and basket ball"
+#~ msgstr "Altalena, domino, scatola e palla da basket"
+
+#~ msgid "Domino and box"
+#~ msgstr "Domino e scatola"
+
+#~ msgid "Basket ball"
+#~ msgstr "Palla da basket"
+
+#~ msgid "Box"
+#~ msgstr "Scatola"
+
+#~ msgid "Domino, box and basket ball"
+#~ msgstr "Domino, scatola e palla da basket"
#~ msgid "Quit"
#~ msgstr "Esci"
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2022-03-11 10:04+0100\n"
+"POT-Creation-Date: 2022-09-29 15:34+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: pmachines/menu.py:71
+#: pmachines/scene.py:89
+msgid "Scene: "
+msgstr ""
+
+#: pmachines/scene.py:608
+msgid "You win!"
+msgstr ""
+
+#: pmachines/scene.py:681
+msgid "You have failed!"
+msgstr ""
+
+#: pmachines/gui/menu.py:95
msgid "Play"
msgstr ""
-#: pmachines/menu.py:74
+#: pmachines/gui/menu.py:99
msgid "Options"
msgstr ""
-#: pmachines/menu.py:77
+#: pmachines/gui/menu.py:103
msgid "Credits"
msgstr ""
-#: pmachines/menu.py:80
+#: pmachines/gui/menu.py:112
msgid "Exit"
msgstr ""
-#: pmachines/menu.py:86 pmachines/menu.py:89 pmachines/menu.py:237
+#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:124
+#: pmachines/gui/menu.py:309
msgid "English"
msgstr ""
-#: pmachines/menu.py:86 pmachines/menu.py:90 pmachines/menu.py:238
+#: pmachines/gui/menu.py:121 pmachines/gui/menu.py:125
+#: pmachines/gui/menu.py:310
msgid "Italian"
msgstr ""
-#: pmachines/menu.py:93
+#: pmachines/gui/menu.py:134
msgid "Language"
msgstr ""
-#: pmachines/menu.py:99
+#: pmachines/gui/menu.py:143
msgid "Volume"
msgstr ""
-#: pmachines/menu.py:109
+#: pmachines/gui/menu.py:160
msgid "Fullscreen"
msgstr ""
-#: pmachines/menu.py:128
+#: pmachines/gui/menu.py:188
msgid "Resolution"
msgstr ""
-#: pmachines/menu.py:134
+#: pmachines/gui/menu.py:199
msgid "Antialiasing"
msgstr ""
-#: pmachines/menu.py:140
+#: pmachines/gui/menu.py:206
msgid "Shadows"
msgstr ""
-#: pmachines/menu.py:146 pmachines/menu.py:168 pmachines/menu.py:204
-#: lib/engine/gui/page.py:188
+#: pmachines/gui/menu.py:213 pmachines/gui/menu.py:238
+#: pmachines/gui/menu.py:275
msgid "Back"
msgstr ""
-#: pmachines/menu.py:155
+#: pmachines/gui/menu.py:225
msgid ""
"Code and gfx\n"
" \ 1scale\ 1Flavio Calva\ 2\n"
" \ 1scale\ 1Stefan Grossmann\ 2"
msgstr ""
-#: pmachines/menu.py:160
+#: pmachines/gui/menu.py:230
msgid "Website"
msgstr ""
-#: pmachines/menu.py:163
+#: pmachines/gui/menu.py:233
msgid ""
"Special thanks to:\n"
" \ 1scale\ 1rdb\ 2\n"
" \ 1scale\ 1Damiana Ercolani\ 2"
msgstr ""
-#: pmachines/scene.py:429
-msgid "You win!"
-msgstr ""
-
-#: pmachines/scene.py:506
-msgid "You have failed!"
-msgstr ""
-
-#: pmachines/scenes/scene_domino.py:15
-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
-msgid "Scene: "
-msgstr ""
-
-#: pmachines/scenes/scene_domino.py:39
msgid ""
-"Goal: every domino piece must fall\n"
+"Goal: the left box must hit the right box\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
msgid ""
-"keep \ 5mouse_l\ 5 pressed to drag an item\n"
+"Goal: you must hit every domino piece\n"
"\n"
-"keep \ 5mouse_r\ 5 pressed to rotate an item"
msgstr ""
-#: pmachines/scenes/scene_box.py:15
-msgid "Box"
+msgid "Domino"
msgstr ""
-#: pmachines/scenes/scene_box.py:39
msgid ""
-"Goal: the left box must hit the right box\n"
+"keep \ 5mouse_l\ 5 pressed to drag an item\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_domino_box.py:15
-msgid "Domino and box"
+msgid "keep \ 5mouse_r\ 5 pressed to rotate an item"
msgstr ""
-#: pmachines/scenes/scene_domino_box.py:52
msgid ""
"Goal: only the last piece of each row must be up\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_basketball.py:15
-msgid "Basket ball"
+msgid "Teeter tooter"
msgstr ""
-#: pmachines/scenes/scene_basketball.py:55
-#: pmachines/scenes/scene_teeter_tooter.py:42
msgid ""
-"Goal: you must hit every domino piece\n"
+"Goal: every domino piece must be hit\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_domino_box_basketball.py:15
-msgid "Domino, box and basket ball"
-msgstr ""
-
-#: pmachines/scenes/scene_domino_box_basketball.py:41
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:51
msgid ""
-"Goal: every domino piece must be hit\n"
+"Goal: every domino piece must fall\n"
"\n"
msgstr ""
-#: pmachines/scenes/scene_teeter_tooter.py:15
-msgid "Teeter tooter"
+msgid "Teeter tooter, domino, box and basket ball"
msgstr ""
-#: pmachines/scenes/scene_teeter_domino_box_basketball.py:15
-msgid "Teeter tooter, domino, box and basket ball"
+msgid "Domino and box"
msgstr ""
-#: lib/engine/gui/page.py:188
-msgid "Quit"
+msgid "Basket ball"
msgstr ""
-#: lib/engine/gui/mainpage.py:34
-msgid "version: "
+msgid "Box"
msgstr ""
-#: lib/engine/gui/mainpage.py:41
-msgid "made with heart with panda3d, panda3d-simplepbr, panda3d-gltf"
+msgid "Domino, box and basket ball"
msgstr ""
{"version": "220914",
+ "name": "Basket ball",
+ "instructions": [
+ "Goal: you must hit every domino piece\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Box",
+ "instructions": ["Goal: the left box must hit the right box\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Domino",
+ "instructions": ["Goal: every domino piece must fall\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Domino and box",
+ "instructions": ["Goal: only the last piece of each row must be up\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Domino, box and basket ball",
+ "instructions": ["Goal: every domino piece must be hit\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Teeter tooter, domino, box and basket ball",
+ "instructions": ["Goal: every domino piece must be hit\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
{"version": "220914",
+ "name": "Teeter tooter",
+ "instructions": ["Goal: you must hit every domino piece\\n\\n",
+ "keep \\5mouse_l\\5 pressed to drag an item\\n\\n",
+ "keep \\5mouse_r\\5 pressed to rotate an item"],
"test_items": {
"pixel_space": [
{"id": "drag_start_0",
self._side_panel = SidePanel(world, self._mouse_plane_node, (-5, 4), (-3, 1), 1, self.items)
self._scene_tsk = taskMgr.add(self.on_frame, 'on_frame')
- @staticmethod
- def name():
- return ''
+ @classmethod
+ def name(cls):
+ if not cls.json:
+ with open(cls.filename) as f:
+ cls.json = loads(f.read())
+ return _(cls.json['name'])
@classmethod
def version(cls):
return bool([(name, version) for name, version in cls.scenes_done if cls.__name__ == name and cls.version() == version])
def _instr_txt(self):
- return ''
+ txt = _('Scene: ') + self.name() + '\n\n'
+ for instruction_line in self.__class__.json['instructions']:
+ instruction_line = self.__process_json_escape(instruction_line)
+ txt += _(instruction_line)
+ return txt
+
+ def __process_json_escape(self, string):
+ return bytes(string, 'utf-8').decode('unicode-escape')
def _set_items(self):
self.items = []
filename = 'assets/scenes/basketball.json'
- @staticmethod
- def name():
- return _('Basket ball')
+ # @staticmethod
+ # def name():
+ # return _('Basket ball')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_stop_0', (-.42, 1.03))
# self._set_test_item('drag_stop_1', (-4.19, 4.66))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: you must hit every domino piece\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: you must hit every domino piece\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/box.json'
- @staticmethod
- def name():
- return _('Box')
+ # @staticmethod
+ # def name():
+ # return _('Box')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_stop_1', (.42, -2.18))
# self._set_test_item('drag_stop_2', (.35, -1.06))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: the left box must hit the right box\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: the left box must hit the right box\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/domino.json'
- @staticmethod
- def name():
- return _('Domino')
+ # @staticmethod
+ # def name():
+ # return _('Domino')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_start_1', (-1.54, .4))
# self._set_test_item('drag_stop_3', (-1.05, .4))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: every domino piece must fall\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: every domino piece must fall\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/domino_box.json'
- @staticmethod
- def name():
- return _('Domino and box')
+ # @staticmethod
+ # def name():
+ # return _('Domino and box')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_stop_1', (3.21, .33))
# self._set_test_item('drag_stop_2', (2.16, 1.87))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: only the last piece of each row must be up\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: only the last piece of each row must be up\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/domino_box_basketball.json'
- @staticmethod
- def name():
- return _('Domino, box and basket ball')
+ # @staticmethod
+ # def name():
+ # return _('Domino, box and basket ball')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_start_3', (-.28, -.85))
# self._set_test_item('drag_stop_4', (-.42, -.85))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: every domino piece must be hit\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: every domino piece must be hit\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/teeter_domino_box_basketball.json'
- @staticmethod
- def name():
- return _('Teeter tooter, domino, box and basket ball')
+ # @staticmethod
+ # def name():
+ # return _('Teeter tooter, domino, box and basket ball')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_start_1', (-6.77, 4.66))
# self._set_test_item('drag_stop_2', (-6.77, 4.24))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: every domino piece must be hit\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: every domino piece must be hit\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
filename = 'assets/scenes/teeter_tooter.json'
- @staticmethod
- def name():
- return _('Teeter tooter')
+ # @staticmethod
+ # def name():
+ # return _('Teeter tooter')
# def _set_items(self):
# super()._set_items()
# self._set_test_item('drag_start_1', (-2.3, 3.75))
# self._set_test_item('drag_stop_2', (-2.5, 3.66))
- def _instr_txt(self):
- txt = _('Scene: ') + self.name() + '\n\n'
- txt += _('Goal: you must hit every domino piece\n\n')
- txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
- 'keep \5mouse_r\5 pressed to rotate an item')
- return txt
+ # def _instr_txt(self):
+ # txt = _('Scene: ') + self.name() + '\n\n'
+ # txt += _('Goal: you must hit every domino piece\n\n')
+ # txt += _('keep \5mouse_l\5 pressed to drag an item\n\n'
+ # 'keep \5mouse_r\5 pressed to rotate an item')
+ # return txt
# def _win_condition(self):
# return all(itm.strategy.win_condition() for itm in self.items) and not self._paused
#+TAGS: bug(b) calendar(c) waiting(w)
* DOING editor
-- [ ] title and description in json, export with polib
+- [ ] remove scene files (.py)
- [ ] edit level (button)
- [ ] global level editor (title, description)
- [ ] version is the hash of the json file
class L10nCommand(BaseCommand):
def run(self):
- self.__language_builder = LanguageBuilder(app_name, 'assets/locale/po/', 'assets/locale/')
+ self.__language_builder = LanguageBuilder(app_name, 'assets/locale/po/', 'assets/scenes/', 'assets/locale/')
self.__language_builder.build()
setup(
name=app_name,
version=_version(),
+ packages=['pmachines', 'ya2', 'assets', 'licenses'],
cmdclass={
'develop': SetupDevelopmentCommand,
'models': ModelsCommand,
rmtree('./tests/' + dirname, ignore_errors=True)
def test_lang(self):
- l = LanguageBuilder('test_pmachines', './tests/po/', './tests/locale/')
+ l = LanguageBuilder('test_pmachines', './tests/po/', './tests/po/', './tests/locale/')
l.build()
self.assertTrue(exists('./tests/po/test_pmachines.pot'))
self.assertTrue(exists('./tests/locale/it_IT/LC_MESSAGES/test_pmachines.mo'))
from os import system, makedirs, remove, listdir
from os.path import exists, isfile, join
from shutil import move, copy
+from json import loads
+from polib import pofile, POEntry
from ya2.build.build import find_file_names, FindFileNamesInfo
class LanguageBuilder:
'''Tools for building files for l10n.'''
- def __init__(self, app_name, po_path, mo_path):
+ def __init__(self, app_name, po_path, json_path, mo_path):
self.__app_name = app_name
self.__po_path = po_path
+ self.__json_path = json_path
self.__mo_path = mo_path
def build(self):
cmd_tmpl = 'xgettext -ci18n -d {appname} -L python ' + \
'-o {pot_path}{appname}.pot '
system(cmd_tmpl.format(appname=self.__app_name, pot_path=self.__po_path) + src_files)
+ self.__add_from_json_to_pot()
+
+ def __add_from_json_to_pot(self):
+ json_files = [name for name in listdir(self.__json_path)
+ if isfile(join(self.__json_path, name)) and
+ name.endswith('.json')]
+ json_strings = []
+ for json_file in json_files:
+ with open(f'{self.__json_path}{json_file}') as f:
+ json = loads(f.read())
+ json_strings += [json['name']]
+ for instruction_line in json['instructions']:
+ json_strings += [instruction_line]
+ def process_json_escape(string):
+ return bytes(string, 'utf-8').decode('unicode-escape')
+ json_strings = [process_json_escape(s) for s in json_strings]
+ json_strings = list(set(json_strings))
+ pot = pofile(f'{self.__po_path}{self.__app_name}.pot')
+ pot_ids = [entry.msgid for entry in pot]
+ for json_string in json_strings:
+ if json_string not in pot_ids:
+ entry = POEntry(msgid=json_string)
+ pot.append(entry)
+ pot.save(f'{self.__po_path}{self.__app_name}.pot')
def __process_language(self, language_code):
self.__merge(language_code)
import threading
def assert_render3d():
- preserve = ['camera']
+ preserve = ['camera', 'DIRECT']
for child in render.children:
if child.name not in preserve:
render.ls()
'ivalLoop', 'garbageCollectStates', 'collisionLoop',
'igLoop', 'audioLoop', 'resetPrevTransform', 'dataLoop',
'eventManager', 'simplepbr update', 'on frame music',
- 'assert_fps']
+ 'assert_fps', 'DIRECTContextTask']
for task in taskMgr.getTasks() + taskMgr.getDoLaters():
if task.name not in preserve and not hasattr(task, 'preserve'):
msg = 'unexpected task: %s' % task.name