Skip to content

Commit

Permalink
add reset event for earnings
Browse files Browse the repository at this point in the history
  • Loading branch information
jabdoa2 committed Aug 24, 2020
1 parent 5a07aca commit cdfe1b5
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions mpf/config_spec.yaml
Expand Up @@ -362,6 +362,7 @@ credits:
switches: list|subconfig(credits_switches)|None
events: list|subconfig(credits_events)|None
pricing_tiers: list|subconfig(credits_pricing_tiers)|None
reset_earnings_events: list|event_handler|earnings_reset,factory_reset
credits_switches:
switch: single|machine(switches)|None
value: single|template_float|0.25
Expand Down
12 changes: 12 additions & 0 deletions mpf/modes/credits/code/credits.py
Expand Up @@ -33,6 +33,10 @@ def mode_init(self):
self.data_manager = self.machine.create_data_manager('earnings')
self.earnings = self.data_manager.get_data()

# prevent crashes because of data corruption
if not isinstance(self.earnings, dict):
self.earnings = {}

self.credit_units_per_game = 0
self.credit_unit = 0
self.pricing_tiers = set()
Expand All @@ -59,6 +63,8 @@ def mode_start(self, **kwargs):
self.toggle_credit_play)
self.add_mode_event_handler('slam_tilt',
self.clear_all_credits)
for event in self.credits_config['reset_earnings_events']:
self.add_mode_event_handler(event, self._reset_earnings)

if self.machine.settings.get_setting_value("free_play"):
self.enable_free_play(post_event=False)
Expand All @@ -67,6 +73,12 @@ def mode_start(self, **kwargs):
self._calculate_pricing_tiers()
self.enable_credit_play(post_event=False)

def _reset_earnings(self, **kwargs):
"""Reset earnings."""
del kwargs
self.earnings = {}
self.data_manager.save_all(data=self.earnings)

def mode_stop(self, **kwargs):
"""Stop mode."""
self._set_free_play_string()
Expand Down
10 changes: 10 additions & 0 deletions mpf/tests/test_CreditsMode.py
Expand Up @@ -94,6 +94,7 @@ def testCredits(self):
self.machine_run()

self.assertEqual("CREDITS 1/2", self.machine.variables.get_machine_var('credits_string'))
self.assertEqual(0.25, self.machine.modes["credits"].earnings["money"]["total_value"])

self.assertMachineVarEqual(0.5, "price_per_game_raw_0")
self.assertMachineVarEqual("1 CREDITS $0.5", "price_per_game_string_0")
Expand All @@ -107,6 +108,7 @@ def testCredits(self):
self.machine_run()

self.assertEqual("CREDITS 1", self.machine.variables.get_machine_var('credits_string'))
self.assertEqual(0.5, self.machine.modes["credits"].earnings["money"]["total_value"])

# one is enough for a game
self.start_game(True)
Expand All @@ -120,12 +122,20 @@ def testCredits(self):
self.hit_and_release_switch("s_right_coin")
self.machine_run()
self.assertEqual("CREDITS 2", self.machine.variables.get_machine_var('credits_string'))
self.assertEqual(1.5, self.machine.modes["credits"].earnings["money"]["total_value"])

# 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.variables.get_machine_var('credits_string'))
self.assertEqual(2.0, self.machine.modes["credits"].earnings["money"]["total_value"])

self.post_event("earnings_reset")
self.advance_time_and_run(.1)

self.assertEqual({}, self.machine.modes["credits"].earnings)
self.assertEqual({}, self.machine.modes["credits"].data_manager.written_data)

def testReplay(self):
# add coins
Expand Down

0 comments on commit cdfe1b5

Please sign in to comment.