From f941e58de063fd95da53b78925fe2081fbb5b1c7 Mon Sep 17 00:00:00 2001 From: Ryan Date: Sat, 30 Nov 2024 15:03:59 -0800 Subject: [PATCH] feat: add green_flag mode with qualification test --- config/common/modes.yaml | 1 + config/common/variables.yaml | 8 ++++ modes/base/config/base.yaml | 40 ++++++++++++++++- modes/green_flag/config/green_flag.yaml | 15 +++++++ tests/test_green_flag.py | 60 +++++++++++++++++++++++++ 5 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 config/common/variables.yaml create mode 100644 modes/green_flag/config/green_flag.yaml create mode 100644 tests/test_green_flag.py diff --git a/config/common/modes.yaml b/config/common/modes.yaml index 8e124e2..6e272e4 100644 --- a/config/common/modes.yaml +++ b/config/common/modes.yaml @@ -2,3 +2,4 @@ modes: - base +- green_flag diff --git a/config/common/variables.yaml b/config/common/variables.yaml new file mode 100644 index 0000000..363edfe --- /dev/null +++ b/config/common/variables.yaml @@ -0,0 +1,8 @@ +#config_version=6 + + +variable_player: + game_started: + green_flags_hit: + action: set + int: 0 diff --git a/modes/base/config/base.yaml b/modes/base/config/base.yaml index c8af8fa..673f50d 100644 --- a/modes/base/config/base.yaml +++ b/modes/base/config/base.yaml @@ -1,8 +1,8 @@ #config_version=6 mode: - start_events: ball_starting - priority: 100 + start_events: ball_starting + priority: 100 ball_saves: ball_start_ball_save: @@ -13,6 +13,10 @@ ball_saves: balls_to_save: 1 variable_player: + ########### + # Scoring # + ########### + # consider removing points # s_disqualifier_active: s_pop1_active: @@ -66,3 +70,35 @@ variable_player: score: 50 s_outlane2_active: score: 50 + + ###################### + # Custom Player Vars # + ###################### + level_green_flag: + initial_value: 0 + +# To activate "green_flag" mode, the user's vehicle +# must be ready to race: +event_player: + # Top up her gas every time (Qualifier1) + s_qualifier1_active: + - green_flag{current_player.level_green_flag==0} + # Change oil after putting some miles on her (Qualifier2) + logicblock_seq_green_flag2_complete: + - green_flag{current_player.level_green_flag==1} + # She's going to need some tires, now (Qualifier3) + logicblock_seq_green_flag3_complete: + - green_flag + +sequences: + seq_green_flag2: + events: + - s_qualifier1_active + - s_qualifier2_active + disable_on_complete: true + seq_green_flag3: + events: + - s_qualifier1_active + - s_qualifier2_active + - s_qualifier3_active + disable_on_complete: false diff --git a/modes/green_flag/config/green_flag.yaml b/modes/green_flag/config/green_flag.yaml new file mode 100644 index 0000000..d7ef053 --- /dev/null +++ b/modes/green_flag/config/green_flag.yaml @@ -0,0 +1,15 @@ +#config_version=6 + +mode: + start_events: + - green_flag + stop_events: + - s_disqualifier_active + restart_on_next_ball: true + priority: 100 + +variable_player: + mode_green_flag_started: + level_green_flag: + action: add + int: 1 diff --git a/tests/test_green_flag.py b/tests/test_green_flag.py new file mode 100644 index 0000000..cebf390 --- /dev/null +++ b/tests/test_green_flag.py @@ -0,0 +1,60 @@ +"""Tests Green Flag Mode""" +import os + +from mpf.tests.MpfGameTestCase import MpfGameTestCase + +class TestGreenFlag(MpfGameTestCase): + + def get_config_file(self): + return 'development.yaml' + + def get_machine_path(self): + return os.path.abspath(os.path.join( + os.path.realpath(__file__), + os.pardir,os.pardir + )) + + def test_qualification(self): + self.start_game() + self.assertEqual( + 0, self.machine.game.player.level_green_flag + ) + self.assertModeNotRunning("green_flag") + + self.hit_and_release_switch("s_qualifier1") + self.advance_time_and_run(1) + self.assertModeRunning("green_flag") + self.assertEqual( + 1, self.machine.game.player.level_green_flag + ) + + self.hit_and_release_switch("s_disqualifier") + self.assertModeNotRunning("green_flag") + + # Second time around, it requires hitting two + # qualifiers to start the mode + self.hit_and_release_switch("s_qualifier1") + self.assertModeNotRunning("green_flag") + self.hit_and_release_switch("s_qualifier2") + self.assertModeRunning("green_flag") + self.hit_and_release_switch("s_disqualifier") + + # Third time around, it requires hitting + # all three qualifiers + self.hit_and_release_switch("s_qualifier1") + self.assertModeNotRunning("green_flag") + self.hit_and_release_switch("s_qualifier2") + self.assertModeNotRunning("green_flag") + self.hit_and_release_switch("s_qualifier3") + self.assertModeRunning("green_flag") + self.hit_and_release_switch("s_disqualifier") + + # Further attempts function the same way, + # requiring all 3 qualifiers to be hit + self.hit_and_release_switch("s_qualifier1") + self.assertModeNotRunning("green_flag") + self.hit_and_release_switch("s_qualifier2") + self.assertModeNotRunning("green_flag") + self.hit_and_release_switch("s_qualifier3") + self.assertModeRunning("green_flag") + self.hit_and_release_switch("s_disqualifier")