Skip to content

Commit

Permalink
eject delay saved balls on mode end. fix #894
Browse files Browse the repository at this point in the history
  • Loading branch information
jabdoa2 committed Apr 24, 2017
1 parent 823a9fc commit 02134ed
Show file tree
Hide file tree
Showing 4 changed files with 68 additions and 0 deletions.
4 changes: 4 additions & 0 deletions mpf/devices/ball_save.py
Expand Up @@ -298,3 +298,7 @@ def device_removed_from_mode(self, mode: Mode) -> None:
self.debug_log("Removing...")

self.disable()

if self.config['delayed_eject_events']:
self.debug_log("Triggering delayed eject because mode ended.")
self.delayed_eject()
1 change: 1 addition & 0 deletions mpf/tests/machine_files/ball_save/config/config.yaml
Expand Up @@ -5,6 +5,7 @@ game:

modes:
- mode1
- mode2

coils:
eject_coil1:
Expand Down
10 changes: 10 additions & 0 deletions mpf/tests/machine_files/ball_save/modes/mode2/config/mode2.yaml
@@ -0,0 +1,10 @@
#config_version=4
mode:
start_events: start_mode2
stop_events: stop_mode2

ball_saves:
mode_ball_save_delayed:
balls_to_save: -1
debug: yes
delayed_eject_events: mode_ball_save_delayed_eject
53 changes: 53 additions & 0 deletions mpf/tests/test_BallSave.py
Expand Up @@ -431,3 +431,56 @@ def test_unlimited_delay(self):
# ball 1 continues
self.assertAvailableBallsOnPlayfield(1)
self.assertBallNumber(1)

def test_unlimited_delay_mode(self):
# prepare game
self.fill_troughs()
self.advance_time_and_run()

# start game
self.start_game()
self.advance_time_and_run(10)
self.assertBallNumber(1)

# start mode and thereby ball_save
self.post_event("start_mode2")

# drain ball
self.drain_ball()
self.advance_time_and_run()

# ball should not end
self.assertBallNumber(1)

# no ball yet on playfield
self.assertAvailableBallsOnPlayfield(0)

self.post_event("mode_ball_save_delayed_eject")
self.advance_time_and_run()

# ball 1 continues
self.assertAvailableBallsOnPlayfield(1)
self.assertBallNumber(1)

# save again/drain ball
self.drain_ball()
self.advance_time_and_run()

# ball should not end
self.assertBallNumber(1)

# no ball yet on playfield
self.assertAvailableBallsOnPlayfield(0)

# stop mode
self.post_event("stop_mode2")
self.advance_time_and_run()

# ball 1 continues
self.assertAvailableBallsOnPlayfield(1)
self.assertBallNumber(1)

# ball should end now
self.drain_ball()
self.advance_time_and_run()
self.assertGameIsNotRunning()

0 comments on commit 02134ed

Please sign in to comment.