"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-29 15:34+0200\n"
+"PO-Revision-Date: 2022-10-06 16:30+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:95
+#: pmachines/scene.py:101
msgid "Scene: "
msgstr "Scena: "
-#: pmachines/scene.py:614
+#: pmachines/scene.py:623
msgid "You win!"
msgstr "Hai vinto!"
-#: pmachines/scene.py:687
+#: pmachines/scene.py:696
msgid "You have failed!"
msgstr "Hai perso!"
" \ 1scale\ 1Luisa Tenuta\ 2\n"
" \ 1scale\ 1Damiana Ercolani\ 2"
+#: pmachines/editor/scene.py:39
+msgid "Name"
+msgstr "Nome"
+
+#: pmachines/editor/scene.py:54
+msgid "Description"
+msgstr "Descrizione"
+
+#: pmachines/editor/scene.py:120 pmachines/editor/scene_list.py:96
+msgid "You have unsaved changes. Really quit?"
+msgstr "Hai modifiche non salvate, vuoi veramente uscire?"
+
+#: pmachines/editor/scene_list.py:34
+msgid "Write the file names (without the extension), one file for each line"
+msgstr "Scrivi i nomi dei file (senza estensione), uno per riga."
+
#~ msgid ""
#~ "Goal: the left box must hit the right box\n"
#~ "\n"
--- /dev/null
+{
+ "list": [
+ "domino",
+ "box",
+ "domino_box",
+ "basketball",
+ "domino_box_basketball",
+ "teeter_tooter",
+ "teeter_domino_box_basketball"
+ ]
+}
\ No newline at end of file
import argparse
import simplepbr
#import gltf
-from importlib import import_module
-from inspect import isclass
+from json import loads
from sys import platform, exit
from platform import node
from logging import info, debug
class Pmachines:
- scenes = [
- 'domino',
- 'box',
- 'domino_box',
- 'basketball',
- 'domino_box_basketball',
- 'teeter_tooter',
- 'teeter_domino_box_basketball']
+ @staticmethod
+ def scenes():
+ with open('assets/scenes/index.json') as f:
+ json = loads(f.read())
+ return json['list']
def __init__(self):
info('platform: %s' % platform)
def start(self):
if self._args.screenshot:
#cls = [cls for cls in self.scenes if cls.__name__ == self._args.screenshot][0]
- scene = Scene(BulletWorld(), None, True, False, lambda: None, self.scenes, self._pos_mgr, None, None, None, self._args.screenshot)
+ scene = Scene(BulletWorld(), None, True, False, lambda: None, self.scenes(), self._pos_mgr, None, None, None, self._args.screenshot)
scene.screenshot()
scene.destroy()
exit()
self._menu_bg = Background()
self._menu = Menu(
self._fsm, self.lang_mgr, self._options, self._music,
- self._pipeline, self.scenes, self._args.functional_test or self._args.functional_ref,
+ self._pipeline, self.scenes(), self._args.functional_test or self._args.functional_ref,
self._pos_mgr)
def on_home(self):
self._options['development']['auto_close_instructions'],
self._options['development']['debug_items'],
self.reload,
- self.scenes,
+ self.scenes(),
self._pos_mgr,
self._args.functional_test or self._args.functional_ref,
self._options['development']['mouse_coords'],
from direct.gui.DirectGui import DirectButton, DirectFrame, DirectEntry, YesNoDialog
from direct.gui.DirectGuiGlobals import FLAT, NORMAL
from direct.gui.OnscreenText import OnscreenText
+from pmachines.editor.scene_list import SceneList
class SceneEditor:
(.4, .1, .1, .4)]}[col]
return [self.__load_img_btn(path, col) for col in colors]
fcols = (.4, .4, .4, .14), (.3, .3, .3, .05)
- btn = DirectButton(
+ DirectButton(
image=load_images_btn('exitRight', 'gray'), scale=.05,
pos=(.06, 1, .06),
parent=self._frm, command=self.__on_close, state=NORMAL, relief=FLAT,
frameColor=fcols[0],
rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
- btn = DirectButton(
+ DirectButton(
image=load_images_btn('save', 'gray'), scale=.05,
pos=(.06, 1, .18),
parent=self._frm, command=self.__on_save, state=NORMAL, relief=FLAT,
frameColor=fcols[0],
rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+ DirectButton(
+ image=load_images_btn('menuList', 'gray'), scale=.05,
+ pos=(.06, 1, .30),
+ parent=self._frm, command=self.__on_scene_list, state=NORMAL, relief=FLAT,
+ frameColor=fcols[0],
+ rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
+ clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
def __on_close(self):
self.__json['name'] = self.__name_entry.get()
self.__dialog = YesNoDialog(dialogName='Unsaved changes',
text=_('You have unsaved changes. Really quit?'),
command=self.__actually_close)
+ self.__dialog['frameColor'] = (.4, .4, .4, .14)
+ self.__dialog['relief'] = FLAT
+ self.__dialog.component('text0')['fg'] = (.9, .9, .9, 1)
+ self.__dialog.component('text0')['font'] = self._font
+ for b in self.__dialog.buttonList:
+ b['frameColor'] = (.4, .4, .4, .14)
+ b.component('text0')['fg'] = (.9, .9, .9, 1)
+ b.component('text0')['font'] = self._font
+ b.component('text1')['fg'] = (.9, .1, .1, 1)
+ b.component('text1')['font'] = self._font
+ b.component('text2')['fg'] = (.9, .9, .1, 1)
+ b.component('text2')['font'] = self._font
def __actually_close(self, arg):
if arg:
with open('assets/scenes/%s.json' % self.__json_name, 'w') as f:
f.write(dumps(self.__json, indent=2, sort_keys=True))
+ def __on_scene_list(self):
+ SceneList()
+
def __load_img_btn(self, path, col):
img = OnscreenImage('assets/images/buttons/%s.dds' % path)
img.set_transparency(True)
--- /dev/null
+from json import dumps, loads
+from panda3d.core import Texture
+from direct.gui.OnscreenImage import OnscreenImage
+from direct.gui.DirectGui import DirectButton, DirectFrame, DirectEntry, YesNoDialog
+from direct.gui.DirectGuiGlobals import FLAT, NORMAL
+from direct.gui.OnscreenText import OnscreenText
+
+
+class SceneList:
+
+ def __init__(self):
+ self._font = base.loader.load_font(
+ 'assets/fonts/Hanken-Book.ttf')
+ self._font.clear()
+ self._font.set_pixels_per_unit(60)
+ self._font.set_minfilter(Texture.FTLinearMipmapLinear)
+ self._font.set_outline((0, 0, 0, 1), .8, .2)
+ self._common = {
+ 'scale': .046,
+ 'text_font': self._font,
+ 'text_fg': (.9, .9, .9, 1),
+ 'relief': FLAT,
+ 'frameColor': (.4, .4, .4, .14),
+ 'rolloverSound': loader.load_sfx(
+ 'assets/audio/sfx/rollover.ogg'),
+ 'clickSound': loader.load_sfx(
+ 'assets/audio/sfx/click.ogg')}
+ w, h, tw = .8, 1.05, 16
+ self._frm = DirectFrame(frameColor=(.4, .4, .4, .06),
+ frameSize=(0, w, -h, 0),
+ parent=base.a2dTopCenter,
+ pos=(-w/2, 0, 0))
+ OnscreenText(
+ _('Write the file names (without the extension), one file for each line'),
+ pos=(w/2, -.08), parent=self._frm,
+ font=self._common['text_font'],
+ scale=self._common['scale'],
+ fg=self._common['text_fg'],
+ wordwrap=20)
+ def add_line_break(txt, entry):
+ curpos = entry.node().getCursorPosition()
+ entry.set(txt[:curpos]+ "\n" + txt[curpos:])
+ entry.node().setCursorPosition(curpos+1)
+ entry['focus']=1
+ with open('assets/scenes/index.json') as f:
+ self.__json = loads(f.read())
+ self.__list_entry = DirectEntry(
+ scale=self._common['scale'],
+ pos=(.03, 1, -.24),
+ entryFont=self._font,
+ width=tw,
+ numLines=14,
+ cursorKeys=True,
+ frameColor=self._common['frameColor'],
+ initialText='\n'.join(self.__json['list']),
+ parent=self._frm,
+ text_fg=self._common['text_fg'])
+ self.__list_entry['command'] = add_line_break
+ self.__list_entry['extraArgs'] = [self.__list_entry]
+ def load_images_btn(path, col):
+ colors = {
+ 'gray': [
+ (.6, .6, .6, 1), # ready
+ (1, 1, 1, 1), # press
+ (.8, .8, .8, 1), # rollover
+ (.4, .4, .4, .4)],
+ 'green': [
+ (.1, .68, .1, 1),
+ (.1, 1, .1, 1),
+ (.1, .84, .1, 1),
+ (.4, .1, .1, .4)]}[col]
+ return [self.__load_img_btn(path, col) for col in colors]
+ fcols = (.4, .4, .4, .14), (.3, .3, .3, .05)
+ DirectButton(
+ image=load_images_btn('exitRight', 'gray'), scale=.05,
+ pos=(.19, 1, -.99),
+ parent=self._frm, command=self.__on_close, state=NORMAL, relief=FLAT,
+ frameColor=fcols[0],
+ rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
+ clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+ DirectButton(
+ image=load_images_btn('save', 'gray'), scale=.05,
+ pos=(.06, 1, -.99),
+ parent=self._frm, command=self.__on_save, state=NORMAL, relief=FLAT,
+ frameColor=fcols[0],
+ rolloverSound=loader.load_sfx('assets/audio/sfx/rollover.ogg'),
+ clickSound=loader.load_sfx('assets/audio/sfx/click.ogg'))
+
+ def __on_close(self):
+ new_list = self.__list_entry.get().split('\n')
+ new_list = [e for e in new_list if e]
+ if new_list == self.__json['list']:
+ self._frm.destroy()
+ else:
+ self.__dialog = YesNoDialog(dialogName='Unsaved changes',
+ text=_('You have unsaved changes. Really quit?'),
+ command=self.__actually_close)
+ self.__dialog['frameColor'] = (.4, .4, .4, .14)
+ self.__dialog['relief'] = FLAT
+ self.__dialog.component('text0')['fg'] = (.9, .9, .9, 1)
+ self.__dialog.component('text0')['font'] = self._font
+ for b in self.__dialog.buttonList:
+ b['frameColor'] = (.4, .4, .4, .14)
+ b.component('text0')['fg'] = (.9, .9, .9, 1)
+ b.component('text0')['font'] = self._font
+ b.component('text1')['fg'] = (.9, .1, .1, 1)
+ b.component('text1')['font'] = self._font
+ b.component('text2')['fg'] = (.9, .9, .1, 1)
+ b.component('text2')['font'] = self._font
+
+ def __actually_close(self, arg):
+ if arg:
+ self._frm.destroy()
+ self.__dialog.cleanup()
+
+ def __on_save(self):
+ new_list = self.__list_entry.get().split('\n')
+ new_list = [e for e in new_list if e]
+ self.__json['list'] = new_list
+ with open('assets/scenes/index.json', 'w') as f:
+ f.write(dumps(self.__json, indent=2, sort_keys=True))
+
+ def __load_img_btn(self, path, col):
+ img = OnscreenImage('assets/images/buttons/%s.dds' % path)
+ img.set_transparency(True)
+ img.set_color(col)
+ img.detach_node()
+ return img
- [X] save button
- [X] close editor
- [X] popup if exit with an unsaved scene
-- [ ] list of scenes
+- [X] list of scenes
- [ ] item editor
- [ ] new item
- [ ] new scene
from direct.dist.commands import bdist_apps
from ya2.build.build import _branch, find_file_names, _version, FindFileNamesInfo
import ya2.build.lang
+import ya2.build.screenshots
+import ya2.build.images
from pmachines.app import Pmachines
class ImagesCommand(BaseCommand):
def run(self):
- ya2.build.screenshots.build_screenshots(Pmachines.scenes)
+ ya2.build.screenshots.build_screenshots(Pmachines.scenes())
find_info = FindFileNamesInfo(
['jpg', 'png'],
['models', 'gltf', 'bam'],