from os import makedirs
from logging import info
from json import loads
+from collections import namedtuple
from panda3d.core import AmbientLight, Texture, TextPropertiesManager, \
TextNode, Spotlight, PerspectiveLens, BitMask32, NodePath
from panda3d.bullet import BulletPlaneShape, BulletGhostNode
self._scene_tsk = taskMgr.add(self.on_frame, 'on_frame')
if auto_start_editor:
self._set_editor()
+ self.accept('editor-inspector-delete', self.__on_inspector_delete)
@classmethod
def filename(cls, scene_name):
if 'friction' in item:
args['friction'] = item['friction']
self.items += [self.__code2class(item['class'])(**args)]
- for item in self.json['fixed_items']:
- args = {
- 'world': self._world,
- 'plane_node': self._mouse_plane_node,
- 'cb_inst': self.cb_inst,
- 'curr_bottom': self.current_bottom,
- 'repos': self.repos,
- 'json': item,
- 'mass': 0}
- args['pos'] = tuple(item['position'])
- if 'roll' in item:
- args['r'] = item['roll']
- if 'restitution' in item:
- args['restitution'] = item['restitution']
- if 'friction' in item:
- args['friction'] = item['friction']
- self.items += [self.__code2class(item['class'])(**args)]
- for item in self.json['scene_items']:
+ for item in self.json['items']:
args = {
'world': self._world,
'plane_node': self._mouse_plane_node,
args['r'] = item['roll']
if 'model_scale' in item:
args['model_scale'] = item['model_scale']
+ if 'restitution' in item:
+ args['restitution'] = item['restitution']
+ if 'friction' in item:
+ args['friction'] = item['friction']
self.items += [self.__code2class(item['class'])(**args)]
if 'strategy' in item:
match item['strategy']:
self._test_items += [NodePath(name)]
self._test_items[-1].set_pos(pos[0], 0, pos[1])
+ def add_item(self, item):
+ self.items += [item]
+
def _set_editor(self):
- self.__scene_editor = SceneEditor(self.json, self.__json_name)
+ fields = ['world', 'plane_node', 'cb_inst', 'curr_bottom', 'repos', 'json']
+ SceneContext = namedtuple('SceneContext', fields)
+ context = SceneContext(
+ self._world,
+ self._mouse_plane_node,
+ self.cb_inst,
+ self.current_bottom,
+ self.repos,
+ {})
+ self.__scene_editor = SceneEditor(self.json, self.__json_name, context, self.add_item, self.items)
+
+ def __on_inspector_delete(self, item):
+ self.items.remove(item)
+ self.json['items'].remove(item.json)
+ item.destroy()