Skip to content

Commit

Permalink
Merge pull request #1702 from cobra18t/dev
Browse files Browse the repository at this point in the history
Enable dynamic speed in show_player and post elapsed time for a sequence_shot completion
  • Loading branch information
toomanybrians authored Jul 7, 2023
2 parents 0efcfd3 + d1c3ff7 commit 5f06c19
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 7 deletions.
6 changes: 4 additions & 2 deletions mpf/config_players/show_player.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,9 +102,10 @@ def _play(self, key, instance_dict, show, show_settings, queue, start_time, plac
start_step = show_settings['start_step'].evaluate(placeholder_args)
start_running = show_settings['start_running'].evaluate(placeholder_args)
show_tokens = {k: v.evaluate(placeholder_args) for k, v in show_settings['show_tokens'].items()}
speed = show_settings['speed'].evaluate(placeholder_args)

show_config = self.machine.show_controller.create_show_config(
show, show_settings['priority'], show_settings['speed'], show_settings['loops'], show_settings['sync_ms'],
show, show_settings['priority'], speed, show_settings['loops'], show_settings['sync_ms'],
show_settings['manual_advance'], show_tokens, show_settings['events_when_played'],
show_settings['events_when_stopped'], show_settings['events_when_looped'],
show_settings['events_when_paused'], show_settings['events_when_resumed'],
Expand All @@ -128,9 +129,10 @@ def _queue(self, key, instance_dict, show, show_settings, queue, start_time, pla

start_step = show_settings['start_step'].evaluate(placeholder_args)
show_tokens = {k: v.evaluate(placeholder_args) for k, v in show_settings['show_tokens'].items()}
speed = show_settings['speed'].evaluate(placeholder_args)

show_config = self.machine.show_controller.create_show_config(
show, show_settings['priority'], show_settings['speed'], show_settings['loops'], show_settings['sync_ms'],
show, show_settings['priority'], speed, show_settings['loops'], show_settings['sync_ms'],
show_settings['manual_advance'], show_tokens, show_settings['events_when_played'],
show_settings['events_when_stopped'], show_settings['events_when_looped'],
show_settings['events_when_paused'], show_settings['events_when_resumed'],
Expand Down
2 changes: 1 addition & 1 deletion mpf/config_spec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1543,7 +1543,7 @@ show_player:
action: single|enum(play,stop,pause,resume,advance,step_back,update,queue)|play
show: single|str|None
priority: single|int_or_token|0
speed: single|float_or_token|1
speed: single|template_float_or_token|1
block_queue: single|bool|false
start_step: single|template_int|1
start_running: single|template_bool|True
Expand Down
3 changes: 2 additions & 1 deletion mpf/core/config_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ def __init__(self, machine, config_spec):
"lstr": self._validate_type_lstr,
"float": self._validate_type_float,
"float_or_token": self._validate_type_or_token(self._validate_type_float),
"template_float_or_token": self._validate_type_or_token(self._validate_type_template_float),
"int": self._validate_type_int,
"int_or_token": self._validate_type_or_token(self._validate_type_int),
"num": self._validate_type_num,
Expand Down Expand Up @@ -454,7 +455,7 @@ def _validate_type_template_str(self, item, validation_failure_info):

return self.machine.placeholder_manager.build_quoted_string_template(item)

def _validate_type_template_float(self, item, validation_failure_info):
def _validate_type_template_float(self, item, validation_failure_info, param=None):
if item is None:
return None
if not isinstance(item, (str, float, int)):
Expand Down
16 changes: 13 additions & 3 deletions mpf/devices/sequence_shot.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class SequenceShot(SystemWideDevice, ModeDevice):
collection = 'sequence_shots'
class_label = 'sequence_shot'

__slots__ = ["delay", "active_sequences", "active_delays", "_sequence_events", "_delay_events"]
__slots__ = ["delay", "active_sequences", "active_delays", "_sequence_events", "_delay_events", "_start_time"]

def __init__(self, machine, name):
"""Initialise sequence shot."""
Expand All @@ -33,6 +33,7 @@ def __init__(self, machine, name):

self._sequence_events = [] # type: List[str]
self._delay_events = {} # type: Dict[str, int]
self._start_time = None

@property
def can_exist_outside_of_game(self):
Expand Down Expand Up @@ -131,6 +132,9 @@ def _start_new_sequence(self):
self.active_delays)
return

#record start time
self._start_time = self.machine.clock.get_time()

# create a new sequence
seq_id = uuid.uuid4()
next_event = self._sequence_events[1]
Expand Down Expand Up @@ -169,8 +173,14 @@ def _advance_sequence(self, sequence: ActiveSequence):
self.active_sequences.append(ActiveSequence(sequence.id, current_position_index, next_event))

def _completed(self):
"""Post sequence complete event."""
self.machine.events.post("{}_hit".format(self.name))
#measure the elapsed time between start and completion of the sequence
if self._start_time is not None:
elapsed = self.machine.clock.get_time() - self._start_time
else:
elapsed = 0

"""Post sequence complete event including its elapsed time to complete."""
self.machine.events.post("{}_hit".format(self.name),elapsed=elapsed)
'''event: (name)_hit
desc: The sequence_shot called (name) was just completed.
'''
Expand Down

0 comments on commit 5f06c19

Please sign in to comment.