from direct.interval.LerpInterval import LerpFunctionInterval
from pmachines.items.background import Background
from pmachines.gui.sidepanel import SidePanel
-from pmachines.items.box import Box
+from pmachines.items.box import Box, HitStrategy
from pmachines.items.basketball import Basketball
-from pmachines.items.domino import Domino
+from pmachines.items.domino import Domino, DownStrategy
from pmachines.items.shelf import Shelf
from pmachines.items.teetertooter import TeeterTooter
from ya2.utils.cursor import MouseCursor
'cb_inst': self.cb_inst,
'curr_bottom': self.current_bottom,
'repos': self.repos,
- 'count': item['count']}
+ 'count': item['count'],
+ 'json': item}
if 'mass' in item:
args['mass'] = item['mass']
if 'friction' in item:
'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:
if 'friction' in item:
args['friction'] = item['friction']
self.items += [self.__code2class(item['class'])(**args)]
+ for item in self.__class__.json['scene_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}
+ args['pos'] = tuple(item['position'])
+ if 'mass' in item:
+ args['mass'] = item['mass']
+ if 'friction' in item:
+ args['friction'] = item['friction']
+ if 'roll' in item:
+ args['r'] = item['roll']
+ if 'model_scale' in item:
+ args['model_scale'] = item['model_scale']
+ self.items += [self.__code2class(item['class'])(**args)]
+ if 'strategy' in item:
+ match item['strategy']:
+ case 'DownStrategy':
+ self.items[-1].set_strategy(self.__code2class(item['strategy'])(self.items[-1]._np, *item['strategy_args']))
+ case 'HitStrategy':
+ self.items[-1].set_strategy(self.__code2class(item['strategy'])(self.__item_with_id(item['strategy_args'][0]), self.items[-1].node, self.items[-1]._world))
def __code2class(self, code):
return {
'Basketball': Basketball,
'Domino': Domino,
'Shelf': Shelf,
- 'TeeterTooter': TeeterTooter
+ 'TeeterTooter': TeeterTooter,
+ 'DownStrategy': DownStrategy,
+ 'HitStrategy': HitStrategy
}[code]
+ def __item_with_id(self, id):
+ for item in self.items:
+ if 'id' in item.json and item.json['id'] == id:
+ return item
+
def screenshot(self, task=None):
tex = Texture('screenshot')
buffer = base.win.make_texture_buffer('screenshot', 512, 512, tex, True )