Skip to content

Commit e6c6f54

Browse files
committed
config: Add tutorial config and subscribe to stream events.
1 parent 9ff7ad7 commit e6c6f54

File tree

10 files changed

+139
-41
lines changed

10 files changed

+139
-41
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ bld/
3030
[Oo]bj/
3131
[Ll]og/
3232
[Ll]ogs/
33+
lsp/
3334

3435
# Visual Studio 2015/2017 cache/options directory
3536
.vs/
@@ -351,3 +352,4 @@ MigrationBackup/
351352
.idea/
352353

353354
**/protos/*.cs
355+
**/Plugins/*/*.meta

VisualPinball.Engine.Mpf.Test/Program.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
using System;
1313
using System.Collections.Generic;
1414
using System.Diagnostics;
15-
using System.Linq.Expressions;
15+
using System.Linq;
1616
using System.Threading.Tasks;
1717
using VisualPinball.Engine.Mpf;
1818

@@ -40,6 +40,27 @@ public static async Task Main(string[] args)
4040
mpfApi.StartGame(new Dictionary<string, bool> {
4141
{"sw_11", false},
4242
});
43+
mpfApi.Client.OnConfigureHardwareRule += (_, request) => {
44+
Console.WriteLine($"[MPF] configure hw/rule: sw{request.SwitchNumber} -> c{request.CoilNumber} @{request.HoldPower} | pulse: {request.PulseMs}ms @{request.PulsePower}");
45+
};
46+
mpfApi.Client.OnRemoveHardwareRule += (_, request) => {
47+
Console.WriteLine($"[MPF] remove hw/rule: sw{request.SwitchNumber} -> c{request.CoilNumber}");
48+
};
49+
mpfApi.Client.OnEnableCoil += (_, request) => {
50+
Console.WriteLine($"[MPF] enable coil c{request.CoilNumber} @{request.HoldPower} | pulse: {request.PulseMs}ms @{request.PulsePower}");
51+
};
52+
mpfApi.Client.OnDisableCoil += (_, request) => {
53+
Console.WriteLine($"[MPF] disable coil c{request.CoilNumber}");
54+
};
55+
mpfApi.Client.OnPulseCoil += (_, request) => {
56+
Console.WriteLine($"[MPF] pulse coil c{request.CoilNumber} {request.PulseMs}ms @{request.PulsePower}");
57+
};
58+
mpfApi.Client.OnFadeLight += (_, request) => {
59+
Console.WriteLine($"[MPF] light fades ({request.CommonFadeMs}ms):");
60+
foreach (var fade in request.Fades.ToList()) {
61+
Console.WriteLine($" l{fade.LightNumber} @{fade.TargetBrightness}");
62+
}
63+
};
4364

4465
var descr = mpfApi.GetMachineDescription();
4566
Console.WriteLine($"Description: {descr} in {s.ElapsedMilliseconds}ms");
@@ -49,10 +70,10 @@ public static async Task Main(string[] args)
4970
key = Console.ReadKey();
5071
switch (key.Key) {
5172
case ConsoleKey.A:
52-
await mpfApi.Switch("s_sling", true);
73+
await mpfApi.Switch("0", true);
5374
break;
5475
case ConsoleKey.S:
55-
await mpfApi.Switch("s_sling", false);
76+
await mpfApi.Switch("1", false);
5677
break;
5778
}
5879
} while (key.Key != ConsoleKey.Escape);

VisualPinball.Engine.Mpf.Test/VisualPinball.Engine.Mpf.Test.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>

VisualPinball.Engine.Mpf.Unity/Editor/MpfGamelogicEngineInspector.cs

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,27 @@ private void OnEnable()
2626

2727
public override void OnInspectorGUI()
2828
{
29-
if (GUILayout.Button("Connect")) {
30-
_mpfEngine.Client.Connect();
31-
}
32-
if (GUILayout.Button("StartGame")) {
33-
_mpfEngine.Client.Play();
29+
var pos = EditorGUILayout.GetControlRect(true, 18f);
30+
pos = EditorGUI.PrefixLabel(pos, new GUIContent("Machine Folder"));
31+
32+
if (GUI.Button(pos, _mpfEngine.MachineFolder, EditorStyles.objectField)) {
33+
var path = EditorUtility.OpenFolderPanel("Mission Pinball Framework: Choose machine folder", _mpfEngine.MachineFolder, "");
34+
if (!string.IsNullOrWhiteSpace(path)) {
35+
_mpfEngine.MachineFolder = path;
36+
}
3437
}
35-
if (GUILayout.Button("GetMachineDescription")) {
36-
Debug.Log(_mpfEngine.Client.GetMachineDescription());
38+
39+
if (GUILayout.Button("Synchronize")) {
40+
_mpfEngine.GetMachineDescription();
3741
}
42+
43+
44+
// if (GUILayout.Button("StartGame")) {
45+
// _mpfEngine.Client.Play();
46+
// }
47+
// if (GUILayout.Button("GetMachineDescription")) {
48+
// Debug.Log(_mpfEngine.Client.GetMachineDescription());
49+
// }
3850
}
3951
}
4052
}

VisualPinball.Engine.Mpf.Unity/Editor/VisualPinball.Engine.Mpf.Unity.Editor.asmdef

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"rootNamespace": "VisualPinball.Engine.Mpf.Unity.Editor",
44
"references": [
55
"VisualPinball.Unity",
6+
"VisualPinball.Unity.Editor",
67
"VisualPinball.Engine.Mpf.Unity"
78
],
89
"includePlatforms": [ "Editor" ],

VisualPinball.Engine.Mpf.Unity/README.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

VisualPinball.Engine.Mpf.Unity/Runtime/MpfGamelogicEngine.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,15 @@ public class MpfGamelogicEngine : MonoBehaviour
2626
[NonSerialized]
2727
public MpfClient Client = new MpfClient();
2828

29+
public string MachineFolder;
30+
31+
public void GetMachineDescription()
32+
{
33+
var client = new MpfClient();
34+
client.Connect();
35+
client.StartGame(new Dictionary<string, bool>());
36+
Debug.Log("Description = " + client.GetMachineDescription());
37+
}
38+
2939
}
3040
}

VisualPinball.Engine.Mpf/MpfApi.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace VisualPinball.Engine.Mpf
1919
{
2020
public class MpfApi : IDisposable
2121
{
22-
private readonly MpfClient _client = new MpfClient();
22+
public readonly MpfClient Client = new MpfClient();
2323
private readonly MpfSpawner _spawner;
2424

2525
public MpfApi(string machineFolder)
@@ -35,7 +35,7 @@ public MpfApi(string machineFolder)
3535
public void Launch(int port = 50051)
3636
{
3737
_spawner.Spawn();
38-
_client.Connect($"localhost:{port}");
38+
Client.Connect($"localhost:{port}");
3939
}
4040

4141
/// <summary>
@@ -44,25 +44,25 @@ public void Launch(int port = 50051)
4444
/// <param name="initialSwitches">Initial switch states of the machine</param>
4545
public void StartGame(Dictionary<string, bool> initialSwitches = null)
4646
{
47-
_client.StartGame(initialSwitches ?? new Dictionary<string, bool>());
47+
Client.StartGame(initialSwitches ?? new Dictionary<string, bool>());
4848
}
4949

5050
/// <summary>
5151
/// Returns the machine description.
5252
/// </summary>
5353
public MachineDescription GetMachineDescription()
5454
{
55-
return _client.GetMachineDescription();
55+
return Client.GetMachineDescription();
5656
}
5757

5858
public async Task Switch(string swName, bool swValue)
5959
{
60-
await _client.Switch(swName, swValue);
60+
await Client.Switch(swName, swValue);
6161
}
6262

6363
public void Dispose()
6464
{
65-
_client?.Shutdown();
65+
Client?.Shutdown();
6666
}
6767
}
6868
}

VisualPinball.Engine.Mpf/MpfClient.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ private async void ReceiveCommands(MachineState ms)
101101
default:
102102
throw new ArgumentOutOfRangeException();
103103
}
104-
Logger.Info($"{count} commands dispatched.");
105104
}
106105
}
107106

VisualPinball.Engine.Mpf/machine/config/config.yaml

Lines changed: 69 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,82 @@ vpe:
1212
debug: True
1313

1414
switches:
15-
s_sling:
15+
s_left_flipper:
1616
number: 0
17-
s_flipper:
18-
number: 3
19-
s_test:
20-
number: 6
17+
tags: left_flipper
18+
s_right_flipper:
19+
number: 1
20+
tags: right_flipper
2121

2222
coils:
23-
c_sling:
23+
c_flipper_left_main:
2424
number: 0
25-
c_flipper:
25+
c_flipper_left_hold:
2626
number: 1
27-
allow_enable: True
28-
c_test:
27+
allow_enable: true
28+
c_flipper_right_main:
2929
number: 2
30-
allow_enable: True
31-
32-
lights:
33-
test_light1:
34-
number: 0
35-
test_light2:
36-
number: 1
30+
c_flipper_right_hold:
31+
number: 3
32+
allow_enable: true
3733

38-
autofire_coils:
39-
ac_slingshot_test:
40-
coil: c_sling
41-
switch: s_sling
4234

4335
flippers:
44-
f_test:
45-
main_coil: c_flipper
46-
activation_switch: s_flipper
36+
left_flipper:
37+
main_coil: c_flipper_left_main
38+
hold_coil: c_flipper_left_hold
39+
activation_switch: s_left_flipper
40+
enable_events: machine_reset_phase_3
41+
right_flipper:
42+
main_coil: c_flipper_right_main
43+
hold_coil: c_flipper_right_hold
44+
activation_switch: s_right_flipper
45+
enable_events: machine_reset_phase_3
46+
47+
4748

49+
#hardware:
50+
# platform: visual_pinball_engine
51+
#
52+
#playfields:
53+
# playfield:
54+
# tags: default
55+
# default_source_device: None
56+
#
57+
#vpe:
58+
# debug: True
59+
#
60+
#switches:
61+
# s_sling:
62+
# number: 0
63+
# s_flipper:
64+
# number: 3
65+
# s_test:
66+
# number: 6
67+
#
68+
#coils:
69+
# c_sling:
70+
# number: 0
71+
# c_flipper:
72+
# number: 1
73+
# allow_enable: True
74+
# c_test:
75+
# number: 2
76+
# allow_enable: True
77+
#
78+
#lights:
79+
# test_light1:
80+
# number: 0
81+
# test_light2:
82+
# number: 1
83+
#
84+
#autofire_coils:
85+
# ac_slingshot_test:
86+
# coil: c_sling
87+
# switch: s_sling
88+
#
89+
#flippers:
90+
# f_test:
91+
# main_coil: c_flipper
92+
# activation_switch: s_flipper
93+
#

0 commit comments

Comments
 (0)