-
Notifications
You must be signed in to change notification settings - Fork 141
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
278 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
#config_version=4 | ||
|
||
modes: | ||
- credits | ||
|
||
machine: | ||
min_balls: 0 | ||
|
||
switches: | ||
s_left_coin: | ||
number: | ||
s_center_coin: | ||
number: | ||
s_right_coin: | ||
number: | ||
s_esc: | ||
number: | ||
s_start: | ||
number: | ||
tags: start | ||
|
||
coils: | ||
c_eject: | ||
number: | ||
|
||
credits: | ||
max_credits: 12 | ||
free_play: no | ||
service_credits_switch: s_esc | ||
switches: | ||
- switch: s_left_coin | ||
type: money | ||
value: .25 | ||
- switch: s_center_coin | ||
type: money | ||
value: .25 | ||
- switch: s_right_coin | ||
type: money | ||
value: 1 | ||
pricing_tiers: | ||
- price: .50 | ||
credits: 1 | ||
- price: 2 | ||
credits: 5 | ||
fractional_credit_expiration_time: 15m | ||
credit_expiration_time: 2h | ||
persist_credits_while_off_time: 1h | ||
free_play_string: FREE PLAY | ||
credits_string: CREDITS |
8 changes: 8 additions & 0 deletions
8
mpf/tests/machine_files/credits/modes/credits/config/config.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
#config_version=4 | ||
|
||
mode: | ||
priority: 11000 | ||
start_events: machine_reset_phase_3 | ||
stop_on_ball_end: False | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,221 @@ | ||
from mock import MagicMock | ||
from mpf.tests.MpfTestCase import MpfTestCase | ||
|
||
|
||
class TestShots(MpfTestCase): | ||
|
||
def getConfigFile(self): | ||
return 'config.yaml' | ||
|
||
def getMachinePath(self): | ||
return 'tests/machine_files/credits/' | ||
|
||
def start_game(self, should_work): | ||
# shots only work in games so we have to do this a lot | ||
self.machine.playfield.add_ball = MagicMock() | ||
self.machine.ball_controller.num_balls_known = 3 | ||
self.hit_and_release_switch("s_start") | ||
self.advance_time_and_run() | ||
if should_work: | ||
self.assertIsNotNone(self.machine.game) | ||
self.machine.game.balls_in_play = 0 | ||
self.advance_time_and_run() | ||
else: | ||
self.assertIsNone(self.machine.game) | ||
|
||
def stop_game(self): | ||
# stop game | ||
self.assertIsNotNone(self.machine.game) | ||
self.machine.game.game_ending() | ||
self.advance_time_and_run() | ||
self.assertIsNone(self.machine.game) | ||
|
||
def testFreePlay(self): | ||
self.machine.modes.credits.stop() | ||
self.machine_run() | ||
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string')) | ||
|
||
self.machine.modes.credits.credits_config['free_play'] = True | ||
self.machine.modes.credits.credits_config['free_play_string'] = "FREEEE" | ||
self.machine.modes.credits.start() | ||
self.machine_run() | ||
|
||
self.assertEqual("FREEEE", self.machine.get_machine_var('credits_string')) | ||
|
||
# game start should work | ||
self.start_game(True) | ||
|
||
def testToggleEvents(self): | ||
self.assertTrue(self.machine.mode_controller.is_active('credits')) | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
self.post_event("toggle_credit_play") | ||
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string')) | ||
|
||
self.post_event("toggle_credit_play") | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
self.start_game(False) | ||
|
||
self.post_event("toggle_credit_play") | ||
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string')) | ||
|
||
self.start_game(True) | ||
self.stop_game() | ||
|
||
self.post_event("enable_credit_play") | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
self.post_event("enable_credit_play") | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
self.post_event("enable_free_play") | ||
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string')) | ||
|
||
self.post_event("enable_free_play") | ||
self.assertEqual("FREE PLAY", self.machine.get_machine_var('credits_string')) | ||
|
||
def testCredits(self): | ||
self.assertTrue(self.machine.mode_controller.is_active('credits')) | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
# no credits no game | ||
self.start_game(False) | ||
|
||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
|
||
self.assertEqual("CREDITS 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
# not enough credits. no game | ||
self.start_game(False) | ||
|
||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
|
||
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string')) | ||
|
||
# one is enough for a game | ||
self.start_game(True) | ||
self.stop_game() | ||
|
||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
# but only one | ||
self.start_game(False) | ||
|
||
self.hit_and_release_switch("s_right_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string')) | ||
|
||
# no more price tier after game | ||
self.hit_and_release_switch("s_left_coin") | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 3", self.machine.get_machine_var('credits_string')) | ||
|
||
def testMorePlayers(self): | ||
self.assertTrue(self.machine.mode_controller.is_active('credits')) | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
self.hit_and_release_switch("s_left_coin") | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
|
||
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string')) | ||
|
||
# one is enough for a game | ||
self.machine.playfield.add_ball = MagicMock() | ||
self.machine.ball_controller.num_balls_known = 3 | ||
self.hit_and_release_switch("s_start") | ||
self.advance_time_and_run() | ||
self.assertIsNotNone(self.machine.game) | ||
|
||
# no more credits | ||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
self.assertEqual(1, self.machine.game.num_players) | ||
# try to add another player | ||
self.hit_and_release_switch("s_start") | ||
# fails | ||
self.assertEqual(1, self.machine.game.num_players) | ||
|
||
# add credits | ||
self.hit_and_release_switch("s_right_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string')) | ||
|
||
# try to add another player | ||
self.hit_and_release_switch("s_start") | ||
# wrorks | ||
self.assertEqual(2, self.machine.game.num_players) | ||
self.machine_run() | ||
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string')) | ||
|
||
def testPricingTiers(self): | ||
self.hit_and_release_switch("s_right_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string')) | ||
|
||
self.hit_and_release_switch("s_right_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 5", self.machine.get_machine_var('credits_string')) | ||
|
||
def testFractionalTimeout(self): | ||
self.hit_and_release_switch("s_right_coin") | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
self.advance_time_and_run(60 * 15) | ||
|
||
self.assertEqual("CREDITS 2", self.machine.get_machine_var('credits_string')) | ||
|
||
# but not during game | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
self.start_game(True) | ||
self.advance_time_and_run(60 * 15) | ||
self.stop_game() | ||
|
||
self.machine_run() | ||
self.assertEqual("CREDITS 1 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
# but timeout restarts | ||
self.advance_time_and_run(60 * 15) | ||
|
||
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string')) | ||
|
||
def testCreditTimeout(self): | ||
self.hit_and_release_switch("s_right_coin") | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
self.advance_time_and_run(3600 * 2) | ||
|
||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
# but not during game | ||
self.hit_and_release_switch("s_right_coin") | ||
self.hit_and_release_switch("s_left_coin") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 2 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
self.start_game(True) | ||
self.advance_time_and_run(3600 * 2) | ||
self.stop_game() | ||
|
||
self.machine_run() | ||
self.assertEqual("CREDITS 1 1/2", self.machine.get_machine_var('credits_string')) | ||
|
||
# but timeout restarts | ||
self.advance_time_and_run(3600 * 2) | ||
|
||
self.assertEqual("CREDITS 0", self.machine.get_machine_var('credits_string')) | ||
|
||
def testServiceCredits(self): | ||
self.hit_and_release_switch("s_esc") | ||
self.machine_run() | ||
self.assertEqual("CREDITS 1", self.machine.get_machine_var('credits_string')) |