diff --git a/Editor/Inspector/MpfEventSoundInspector.cs b/Editor/Inspector/MpfEventSoundInspector.cs
new file mode 100644
index 00000000..977a8c8f
--- /dev/null
+++ b/Editor/Inspector/MpfEventSoundInspector.cs
@@ -0,0 +1,34 @@
+// Visual Pinball Engine
+// Copyright (C) 2025 freezy and VPE Team
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UIElements;
+using VisualPinball.Engine.Mpf.Unity.MediaController.Sound;
+using VisualPinball.Unity.Editor;
+
+namespace VisualPinball.Engine.Mpf.Unity.Editor
+{
+ [CustomEditor(typeof(MpfEventSound)), CanEditMultipleObjects]
+ public class MpfEventSoundInspector : SoundComponentInspector
+ {
+ [SerializeField]
+ private VisualTreeAsset mpfEventSoundInspectorXml;
+
+ public override VisualElement CreateInspectorGUI()
+ {
+ var root = base.CreateInspectorGUI();
+ var inspectorUi = mpfEventSoundInspectorXml.Instantiate();
+ root.Add(inspectorUi);
+ return root;
+ }
+ }
+}
diff --git a/Editor/Inspector/MpfEventSoundInspector.cs.meta b/Editor/Inspector/MpfEventSoundInspector.cs.meta
new file mode 100644
index 00000000..3ebc3c49
--- /dev/null
+++ b/Editor/Inspector/MpfEventSoundInspector.cs.meta
@@ -0,0 +1,15 @@
+fileFormatVersion: 2
+guid: 9625a0bfe8daf7140bbbb7dc1e77bceb
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences:
+ - soundComponentInspectorXml: {fileID: 9197481963319205126, guid: 86610575353b6f44aa325d86ee6d779b,
+ type: 3}
+ - mpfEventSoundInspectorXml: {fileID: 9197481963319205126, guid: 8aa1309004b4c514f8c210d6f7c23fc1,
+ type: 3}
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Editor/Inspector/MpfEventSoundInspector.uxml b/Editor/Inspector/MpfEventSoundInspector.uxml
new file mode 100644
index 00000000..f12a876c
--- /dev/null
+++ b/Editor/Inspector/MpfEventSoundInspector.uxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Editor/Inspector/MpfEventSoundInspector.uxml.meta b/Editor/Inspector/MpfEventSoundInspector.uxml.meta
new file mode 100644
index 00000000..4bf9628e
--- /dev/null
+++ b/Editor/Inspector/MpfEventSoundInspector.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8aa1309004b4c514f8c210d6f7c23fc1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Editor/Inspector/MpfGamelogicEngineInspector.cs b/Editor/Inspector/MpfGamelogicEngineInspector.cs
index e439c0ed..2434117e 100644
--- a/Editor/Inspector/MpfGamelogicEngineInspector.cs
+++ b/Editor/Inspector/MpfGamelogicEngineInspector.cs
@@ -17,11 +17,11 @@
using System.Linq;
using System.Threading;
using Grpc.Core;
-using Mono.Cecil;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;
+using VisualPinball.Engine.Mpf.Unity.MediaController;
using VisualPinball.Unity;
namespace VisualPinball.Engine.Mpf.Unity.Editor
@@ -38,6 +38,9 @@ public class MpfGamelogicEngineInspector : UnityEditor.Editor
private PropertyField _connectDelayField;
private VisualElement _commandLineOptionsContainer;
private VisualElement _startupBehaviorOptionsContainer;
+ private TextField _mpfStateField;
+ private TextField _mediaControllerStateField;
+ private VisualElement _bcpOptionsContainer;
public override VisualElement CreateInspectorGUI()
{
@@ -63,12 +66,9 @@ public override VisualElement CreateInspectorGUI()
if (!string.IsNullOrWhiteSpace(path))
{
- path = path.Replace("\\", "/");
- if (path.Contains("StreamingAssets/"))
- path = "./StreamingAssets/" + path.Split("StreamingAssets/")[1];
-
+ path = MpfWranglerOptions.RealPathToSerializedPath(path);
var machineFolderProp = serializedObject.FindProperty(
- $"_mpfWrangler._machineFolder"
+ $"_wranglerOptions._machineFolder"
);
machineFolderProp.stringValue = path;
serializedObject.ApplyModifiedProperties();
@@ -77,7 +77,7 @@ public override VisualElement CreateInspectorGUI()
);
var getDescBtn = root.Q