diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/AssetBrowser/AssetLibrary.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/AssetBrowser/AssetLibrary.cs index e6b1f2380..c5f3362c9 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/AssetBrowser/AssetLibrary.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/AssetBrowser/AssetLibrary.cs @@ -30,7 +30,7 @@ namespace VisualPinball.Unity.Editor /// This is the root node of the asset library. /// /// The data itself is stored in a sub object, . This sub object contains - /// references to the asset meta data, as well as the categories. + /// references to the asset metadata, as well as the categories. /// [CreateAssetMenu(fileName = "Library", menuName = "Pinball/Asset Library", order = 300)] public class AssetLibrary : ScriptableObject, ISerializationCallbackReceiver diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs index 6c6d9b250..87f41ed4e 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs @@ -163,6 +163,8 @@ public GameObject Convert(bool applyPatch = true, string tableName = null) ConfigurePlayer(componentLookup); + SetUpAudio(); + // patch if (_applyPatch) { _patcher?.PostPatch(_tableGo); @@ -523,6 +525,12 @@ private void CreateTrough(Dictionary components) InstantiateAndPersistPrefab(item, components); } + private void SetUpAudio() + { + _tableGo.AddComponent(); + _tableGo.AddComponent(); + } + private void CreateFileHierarchy() { if (!Directory.Exists("Assets/Tables/")) { diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs new file mode 100644 index 000000000..b74a2048a --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs @@ -0,0 +1,37 @@ +// Visual Pinball Engine +// Copyright (C) 2025 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace VisualPinball.Unity.Editor +{ + [CanEditMultipleObjects] + public class BinaryEventSoundInspector : SoundComponentInspector + { + [SerializeField] + private VisualTreeAsset binaryEventSoundInspectorXml; + + public override VisualElement CreateInspectorGUI() + { + var root = base.CreateInspectorGUI(); + var inspectorUi = binaryEventSoundInspectorXml.Instantiate(); + root.Add(inspectorUi); + return root; + } + } +} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs.meta new file mode 100644 index 000000000..fe2fbd354 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 65e51f0d7750c174dbfbbf7e0aae53f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - soundComponentInspectorXml: {fileID: 9197481963319205126, guid: 86610575353b6f44aa325d86ee6d779b, + type: 3} + - binaryEventSoundInspectorXml: {fileID: 9197481963319205126, guid: 4f53d90e909a16548a163671ab9f2132, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml new file mode 100644 index 000000000..60ab4349f --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml @@ -0,0 +1,4 @@ + + + + diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml.meta new file mode 100644 index 000000000..258dfa17f --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/BinaryEventSoundInspector.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4f53d90e909a16548a163671ab9f2132 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs new file mode 100644 index 000000000..e422c0b78 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs @@ -0,0 +1,41 @@ +// Visual Pinball Engine +// Copyright (C) 2025 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +// ReSharper disable InconsistentNaming + +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace VisualPinball.Unity.Editor +{ + [CustomEditor(typeof(CalloutAsset)), CanEditMultipleObjects] + public class CalloutAssetInspector : SoundAssetInspector + { + [SerializeField] + private VisualTreeAsset _calloutAssetInspector; + + public override VisualElement CreateInspectorGUI() + { + var root = new VisualElement(); + var baseUi = base.CreateInspectorGUI(); + root.Add(baseUi); + var subUi = _calloutAssetInspector.Instantiate(); + root.Add(subUi); + return root; + } + } +} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs.meta new file mode 100644 index 000000000..b30a1ad78 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 25eabf71e394bd4468492886b4af8eae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _soundAssetInspectorAsset: {fileID: 9197481963319205126, guid: 84e4ce75c16723f428f39b87bcd555a1, + type: 3} + - _calloutAssetInspector: {fileID: 9197481963319205126, guid: c4009cb1062e5514c9aedd330f512328, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml new file mode 100644 index 000000000..76fa0e858 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml @@ -0,0 +1,3 @@ + + + diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml.meta new file mode 100644 index 000000000..9b1ab79ee --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CalloutAssetInspector.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c4009cb1062e5514c9aedd330f512328 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs similarity index 83% rename from VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.cs rename to VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs index f710accf1..92dd8455d 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs @@ -1,5 +1,5 @@ // Visual Pinball Engine -// Copyright (C) 2023 freezy and VPE Team +// Copyright (C) 2025 freezy and VPE Team // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -23,15 +23,15 @@ namespace VisualPinball.Unity.Editor { [CustomEditor(typeof(CoilSoundComponent)), CanEditMultipleObjects] - public class CoilSoundComponentInspector : SoundComponentInspector + public class CoilSoundInspector : BinaryEventSoundInspector { [SerializeField] - private VisualTreeAsset inspectorXml; + private VisualTreeAsset coilSoundInspectorXml; public override VisualElement CreateInspectorGUI() { var root = base.CreateInspectorGUI(); - var inspectorUi = inspectorXml.Instantiate(); + var inspectorUi = coilSoundInspectorXml.Instantiate(); root.Add(inspectorUi); var coilNameDropdown = root.Q("coil-name"); var coilNameProp = serializedObject.FindProperty(nameof(CoilSoundComponent.CoilName)); @@ -43,7 +43,11 @@ public override VisualElement CreateInspectorGUI() private Dictionary GetAvailableCoils() { var targetComponent = target as Component; - if (targetComponent != null && targetComponent.TryGetComponent(out var coilDevice)) { + if ( + targetComponent != null + && targetComponent.TryGetComponent(out var coilDevice) + ) + { return coilDevice.AvailableCoils.ToDictionary( i => i.Id, i => string.IsNullOrWhiteSpace(i.Description) ? i.Id : i.Description diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs.meta new file mode 100644 index 000000000..203c6335b --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: efd14260f42063e4aadba8b265bad210 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - soundComponentInspectorXml: {fileID: 9197481963319205126, guid: 86610575353b6f44aa325d86ee6d779b, + type: 3} + - binaryEventSoundInspectorXml: {fileID: 9197481963319205126, guid: 4f53d90e909a16548a163671ab9f2132, + type: 3} + - coilSoundInspectorXml: {fileID: 9197481963319205126, guid: 2e43810c575be6d46ae19bed7c1b38bd, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.uxml b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.uxml similarity index 100% rename from VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.uxml rename to VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.uxml diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.uxml.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.uxml.meta similarity index 100% rename from VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundComponentInspector.uxml.meta rename to VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/CoilSoundInspector.uxml.meta diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs new file mode 100644 index 000000000..07908844a --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs @@ -0,0 +1,39 @@ +// Visual Pinball Engine +// Copyright (C) 2025 freezy and VPE Team +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +namespace VisualPinball.Unity.Editor +{ + [CustomEditor(typeof(MusicAsset)), CanEditMultipleObjects] + public class MusicAssetInspector : SoundAssetInspector + { + [SerializeField] + private VisualTreeAsset _musicAssetInspectorAsset; + + public override VisualElement CreateInspectorGUI() + { + var root = new VisualElement(); + var baseUi = base.CreateInspectorGUI(); + root.Add(baseUi); + var subUi = _musicAssetInspectorAsset.Instantiate(); + root.Add(subUi); + return root; + } + } +} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs.meta new file mode 100644 index 000000000..05694000e --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.cs.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: ff8590e7b8c275545a4e3572fbd5346f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - _soundAssetInspectorAsset: {fileID: 9197481963319205126, guid: 84e4ce75c16723f428f39b87bcd555a1, + type: 3} + - _musicAssetInspectorAsset: {fileID: 9197481963319205126, guid: a628fd30c34ffb74a8d1a9d170031b1c, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml new file mode 100644 index 000000000..76fa0e858 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml @@ -0,0 +1,3 @@ + + + diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml.meta new file mode 100644 index 000000000..22a3ac554 --- /dev/null +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/MusicAssetInspector.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a628fd30c34ffb74a8d1a9d170031b1c +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/SoundAssetInspector.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/SoundAssetInspector.cs index c2719719a..7292ac1a6 100644 --- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/SoundAssetInspector.cs +++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Sound/SoundAssetInspector.cs @@ -1,113 +1,52 @@ -// Visual Pinball Engine -// Copyright (C) 2023 freezy and VPE Team -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -using System; -using System.Threading; -using UnityEditor; -using UnityEditor.UIElements; -using UnityEngine; -using UnityEngine.UIElements; - -namespace VisualPinball.Unity.Editor -{ - [CustomEditor(typeof(SoundAsset)), CanEditMultipleObjects] - public class SoundAssetInspector : UnityEditor.Editor - { - private CancellationTokenSource _allowFadeCts; - private CancellationTokenSource _instantCts; - - [SerializeField] - private VisualTreeAsset _inspectorXml; - - private Button _playButton; - - public override VisualElement CreateInspectorGUI() - { - var ui = _inspectorXml.Instantiate(); - _playButton = ui.Q