|
1 | 1 | """Plugin config player."""
|
2 | 2 | from mpf.config_players.device_config_player import DeviceConfigPlayer
|
| 3 | +from mpf.core.placeholder_manager import BaseTemplate, NativeTypeTemplate |
3 | 4 |
|
4 | 5 |
|
5 | 6 | class PluginPlayer(DeviceConfigPlayer):
|
@@ -85,9 +86,19 @@ def play(self, settings, context, calling_context, priority=0, **kwargs):
|
85 | 86 | # this play event won't be swallowed.
|
86 | 87 | if '_from_bcp' in kwargs:
|
87 | 88 | del kwargs['_from_bcp']
|
| 89 | + # If any templates need evaluating, do so *before* sending via BCP |
| 90 | + eval_settings = {} |
| 91 | + for s, settings_dict in settings.items(): |
| 92 | + for key, value in settings_dict.items(): |
| 93 | + if isinstance(value, (BaseTemplate, NativeTypeTemplate)): |
| 94 | + if s not in eval_settings: |
| 95 | + eval_settings[s] = settings_dict.copy() |
| 96 | + eval_settings[s][key] = value.evaluate(kwargs) |
| 97 | + |
88 | 98 | self.machine.bcp.interface.bcp_trigger(
|
89 | 99 | name='{}_play'.format(self.show_section),
|
90 |
| - settings=settings, context=context, calling_context=calling_context, |
| 100 | + settings={**settings, **eval_settings}, |
| 101 | + context=context, calling_context=calling_context, |
91 | 102 | priority=priority, **kwargs)
|
92 | 103 |
|
93 | 104 | def clear_context(self, context):
|
|
0 commit comments