Skip to content

Commit bbc7d3d

Browse files
Add sound support
1 parent 3ba2cec commit bbc7d3d

13 files changed

+251
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Visual Pinball Engine
2+
// Copyright (C) 2025 freezy and VPE Team
3+
//
4+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
8+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
9+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
10+
// SOFTWARE.
11+
12+
using UnityEditor;
13+
using UnityEngine;
14+
using UnityEngine.UIElements;
15+
using VisualPinball.Engine.Mpf.Unity.MediaController.Sound;
16+
using VisualPinball.Unity.Editor;
17+
18+
namespace VisualPinball.Engine.Mpf.Unity.Editor
19+
{
20+
[CustomEditor(typeof(MpfEventSound)), CanEditMultipleObjects]
21+
public class MpfEventSoundInspector : SoundComponentInspector
22+
{
23+
[SerializeField]
24+
private VisualTreeAsset mpfEventSoundInspectorXml;
25+
26+
public override VisualElement CreateInspectorGUI()
27+
{
28+
var root = base.CreateInspectorGUI();
29+
var inspectorUi = mpfEventSoundInspectorXml.Instantiate();
30+
root.Add(inspectorUi);
31+
return root;
32+
}
33+
}
34+
}

Editor/Inspector/MpfEventSoundInspector.cs.meta

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
2+
<uie:PropertyField binding-path="_eventName" label="Event" tooltip="The name of the MPF event that should trigger the sound" />
3+
</ui:UXML>

Editor/Inspector/MpfEventSoundInspector.uxml.meta

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Visual Pinball Engine
2+
// Copyright (C) 2025 freezy and VPE Team
3+
//
4+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
8+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
9+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
10+
// SOFTWARE.
11+
12+
using UnityEditor;
13+
using UnityEngine;
14+
using UnityEngine.UIElements;
15+
using VisualPinball.Engine.Mpf.Unity.MediaController.Sound;
16+
using VisualPinball.Unity.Editor;
17+
18+
namespace VisualPinball.Engine.Mpf.Unity.Editor
19+
{
20+
[CustomEditor(typeof(MpfModeSound)), CanEditMultipleObjects]
21+
public class MpfModeSoundInspector : BinaryEventSoundComponentInspector
22+
{
23+
[SerializeField]
24+
private VisualTreeAsset mpfModeSoundInspectorXml;
25+
26+
public override VisualElement CreateInspectorGUI()
27+
{
28+
var root = base.CreateInspectorGUI();
29+
var inspectorUi = mpfModeSoundInspectorXml.Instantiate();
30+
root.Add(inspectorUi);
31+
return root;
32+
}
33+
}
34+
}

Editor/Inspector/MpfModeSoundInspector.cs.meta

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../UIElementsSchema/UIElements.xsd" editor-extension-mode="True">
2+
<uie:PropertyField binding-path="_modeName" label="Mode" tooltip="The name of the MPF mode that should trigger the sound" />
3+
</ui:UXML>

Editor/Inspector/MpfModeSoundInspector.uxml.meta

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

Runtime/MediaController/Sound.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Visual Pinball Engine
2+
// Copyright (C) 2025 freezy and VPE Team
3+
//
4+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
8+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
9+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
10+
// SOFTWARE.
11+
12+
using System;
13+
using UnityEngine;
14+
using VisualPinball.Engine.Mpf.Unity.MediaController.Messages.Trigger;
15+
using VisualPinball.Unity;
16+
17+
namespace VisualPinball.Engine.Mpf.Unity.MediaController.Sound
18+
{
19+
[AddComponentMenu("Visual Pinball/Sound/Mpf Event Sound")]
20+
public class MpfEventSound : EventSoundComponent<MpfEventListener, EventArgs>
21+
{
22+
[SerializeField]
23+
private string _eventName;
24+
25+
protected override void Subscribe(MpfEventListener eventSource)
26+
{
27+
eventSource.Triggered += OnEvent;
28+
}
29+
30+
protected override void Unsubscribe(MpfEventListener eventSource)
31+
{
32+
eventSource.Triggered -= OnEvent;
33+
}
34+
35+
protected override bool TryFindEventSource(out MpfEventListener eventSource)
36+
{
37+
if (MpfGamelogicEngine.TryGetBcpInterface(this, out var bcpInterface))
38+
{
39+
eventSource = new MpfEventListener(bcpInterface, _eventName);
40+
return true;
41+
}
42+
43+
eventSource = null;
44+
return false;
45+
}
46+
}
47+
}

0 commit comments

Comments
 (0)