pizzabox-main/pizzactrl/storyboard.py
2021-10-24 18:17:36 +02:00

58 lines
1.6 KiB
Python

from enum import Enum, auto
class Activity(Enum):
WAIT_FOR_INPUT = {'steps': 0}
PLAY_SOUND = {'sound': None}
RECORD_SOUND = {'duration': 0.0, 'filename': '', 'cache': False}
RECORD_VIDEO = {'duration': 0.0, 'filename': ''}
TAKE_PHOTO = {'filename': ''}
ADVANCE_UP = {'speed': 0.3, 'direction': True}
ADVANCE_LEFT = {'speed': 0.3, 'direction': True, 'steps': 180} # TODO set right number of steps
LIGHT_LAYER = {'intensity': 1.0, 'fade': 0.0, 'layer': True}
LIGHT_BACK = {'intensity': 1.0, 'fade': 0.0}
class Do:
def __init__(self, activity: Activity, **kwargs):
self.activity = activity
self.values = {}
for key, value in self.activity.value.items():
self.values[key] = kwargs.get(key, value)
class Chapter:
"""
A logical storyboard entity, which can be replayed (rewind to start).
Keeps track of advanced steps on the scrolls.
"""
def __init__(self, *activities):
self.activities = activities
self.pos = 0
self.move = True
self.move_ud = 0
def __iter__(self):
return self
def __next__(self):
if self.pos >= len(self.activities):
raise StopIteration
act = self.activities[self.pos]
if act.activity is Activity.ADVANCE_UP: # TODO add ADVANCE_LEFT
self.move_ud += 1
self.pos += 1
return act
def hasnext(self):
return self.pos < len(self.activities)
def rewind(self, **kwargs):
self.move = False
self.move_ud = 0
self.pos = 0
def mobilize(self, **kwargs):
self.move = True