Skip to content

Commit

Permalink
feat: add green_flag mode with qualification test
Browse files Browse the repository at this point in the history
  • Loading branch information
unRARed committed Nov 30, 2024
1 parent bf12b72 commit f941e58
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 2 deletions.
1 change: 1 addition & 0 deletions config/common/modes.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@

modes:
- base
- green_flag
8 changes: 8 additions & 0 deletions config/common/variables.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#config_version=6


variable_player:
game_started:
green_flags_hit:
action: set
int: 0
40 changes: 38 additions & 2 deletions modes/base/config/base.yaml
Original file line number Diff line number Diff line change
@@ -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:
Expand All @@ -13,6 +13,10 @@ ball_saves:
balls_to_save: 1

variable_player:
###########
# Scoring #
###########

# consider removing points
# s_disqualifier_active:
s_pop1_active:
Expand Down Expand Up @@ -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
15 changes: 15 additions & 0 deletions modes/green_flag/config/green_flag.yaml
Original file line number Diff line number Diff line change
@@ -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
60 changes: 60 additions & 0 deletions tests/test_green_flag.py
Original file line number Diff line number Diff line change
@@ -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")

0 comments on commit f941e58

Please sign in to comment.