diff --git a/.gitignore b/.gitignore
index d9b2f189d..9eea7d01c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -384,7 +384,6 @@ VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/UserSettings/
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Engine.csproj
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Engine.Test.csproj
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Unity.Editor.csproj
-VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Unity.Patcher.csproj
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Unity.Test.csproj
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/VisualPinball.Unity.csproj
VisualPinball.Unity/VisualPinball.Unity.Test/TestProject~/editmode-results.xml
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0fd2a6060..53c311fd3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -66,6 +66,10 @@ Built with Unity 6.5
- Move render pipelines into separate repos ([#259](https://github.com/freezy/VisualPinball.Engine/pull/259)).
- Put game-, mesh-, collision- animation data into separate components ([#227](https://github.com/freezy/VisualPinball.Engine/pull/227), [Documentation](https://docs.visualpinball.org/creators-guide/editor/unity-components.html)).
+### Removed
+
+- The legacy VPX table patcher and its import option, including `IPatcher`, `PatcherManager`, the render-pipeline material-adapter APIs, and the `applyPatch` import parameters.
+
### Fixed
- Disappearing objects due to wrong bounding box ([#441](https://github.com/freezy/VisualPinball.Engine/pull/441)).
- Default table import ([#434](https://github.com/freezy/VisualPinball.Engine/pull/434))
diff --git a/VisualPinball.Unity/Documentation~/creators-guide/introduction/features.md b/VisualPinball.Unity/Documentation~/creators-guide/introduction/features.md
index 9cf4d23b8..5501ac76d 100644
--- a/VisualPinball.Unity/Documentation~/creators-guide/introduction/features.md
+++ b/VisualPinball.Unity/Documentation~/creators-guide/introduction/features.md
@@ -79,12 +79,6 @@ Lastly, we can visualize the colliders of any object. This can be useful to debu

-## Patching System
-
-There are common patterns for VPX tables that are obsolete in VPE. For instance, VPE doesn't need a flipper shadow mesh, because it can do dynamic lighting out of the box. For that reason, we have a simple but sophisticated patcher system that allows us to apply changes to a table when imported.
-
-Of course the changes don't apply to the table data itself but to how we convert it into the Unity scene. You can read more about it [here](https://github.com/freezy/VisualPinball.Engine/tree/master/VisualPinball.Unity/VisualPinball.Unity.Patcher#unity-patching-system).
-
## Display Support
VPE provides high-quality rendering of dot matrix and segment displays. Displays can be placed anywhere in the scene, multiple at once, and are easily linked to the game logic engine. For DMDs, dot size, shape and color can be customized, and for segment displays it's the segment weight, skew angle and color.
\ No newline at end of file
diff --git a/VisualPinball.Unity/Documentation~/creators-guide/setup/installing-vpe.md b/VisualPinball.Unity/Documentation~/creators-guide/setup/installing-vpe.md
index d27ddac26..d109345a0 100644
--- a/VisualPinball.Unity/Documentation~/creators-guide/setup/installing-vpe.md
+++ b/VisualPinball.Unity/Documentation~/creators-guide/setup/installing-vpe.md
@@ -67,9 +67,6 @@ Open the package manager by clicking on *Window -> Package Management -> Package
There, enter `org.visualpinball.engine.unity.hdrp` and click *Install*. This will take a moment as Unity downloads and compiles all of VPE's dependencies and parses all the assets that we ship in our library.
-> [!WARNING]
-> Our patcher, which is currently part of the main package, depends on the PinMAME package. Until we move the patcher into a separate package, you will have to install the PinMAME package as well. To do that, click on the plus button again and enter `org.visualpinball.engine.pinmame`, then click on *Add*.
-
When complete, you should now have a *Pinball* menu in the editor, and you should see the following new packages in the package manager (version numbers will vary):
diff --git a/VisualPinball.Unity/VisualPinball.Engine.Unity.sln b/VisualPinball.Unity/VisualPinball.Engine.Unity.sln
index b56a586ff..810941a99 100644
--- a/VisualPinball.Unity/VisualPinball.Engine.Unity.sln
+++ b/VisualPinball.Unity/VisualPinball.Engine.Unity.sln
@@ -6,8 +6,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualPinball.Resources", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualPinball.Unity.Test", "VisualPinball.Unity.Test\VisualPinball.Unity.Test.csproj", "{B94E5F7B-C579-4C06-9242-B9A95529DE87}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualPinball.Unity.Patcher", "VisualPinball.Unity.Patcher\VisualPinball.Unity.Patcher.csproj", "{5134A0F7-387C-44AC-9850-55B0D6B564ED}"
-EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualPinball.Unity.Editor", "VisualPinball.Unity.Editor\VisualPinball.Unity.Editor.csproj", "{1B54F9E3-119E-4148-8C47-EB7E2C1E562E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisualPinball.Engine.Test", "..\VisualPinball.Engine.Test\VisualPinball.Engine.Test.csproj", "{4CAA8C3D-7D51-4AF6-838C-10BC0C855AF8}"
@@ -80,18 +78,6 @@ Global
{B94E5F7B-C579-4C06-9242-B9A95529DE87}.Release|x86.Build.0 = Release|Any CPU
{B94E5F7B-C579-4C06-9242-B9A95529DE87}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B94E5F7B-C579-4C06-9242-B9A95529DE87}.Release|Any CPU.Build.0 = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|x64.ActiveCfg = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|x64.Build.0 = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|x86.ActiveCfg = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|x86.Build.0 = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|x64.ActiveCfg = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|x64.Build.0 = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|x86.ActiveCfg = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|x86.Build.0 = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {5134A0F7-387C-44AC-9850-55B0D6B564ED}.Release|Any CPU.Build.0 = Release|Any CPU
{1B54F9E3-119E-4148-8C47-EB7E2C1E562E}.Debug|x64.ActiveCfg = Debug|Any CPU
{1B54F9E3-119E-4148-8C47-EB7E2C1E562E}.Debug|x64.Build.0 = Debug|Any CPU
{1B54F9E3-119E-4148-8C47-EB7E2C1E562E}.Debug|x86.ActiveCfg = Debug|Any CPU
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/IVpxPrefab.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/IVpxPrefab.cs
index 49700ea4b..bd5bc7441 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/IVpxPrefab.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/IVpxPrefab.cs
@@ -38,8 +38,6 @@ public void SetReferencedData(Table table, IMaterialProvider materialProvider, I
public void PersistData();
- public void UpdateTransforms();
-
void FreeBinaryData();
}
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportEngine.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportEngine.cs
index 014095123..60ed46081 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportEngine.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportEngine.cs
@@ -28,13 +28,13 @@ public static class VpxImportEngine
{
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
- public static GameObject ImportIntoScene(string path, GameObject parent = null, bool applyPatch = true, string tableName = null, ConvertOptions options = null)
+ public static GameObject ImportIntoScene(string path, GameObject parent = null, string tableName = null, ConvertOptions options = null)
{
var sw = Stopwatch.StartNew();
- return ImportIntoScene(TableLoader.LoadTable(path), Path.GetFileName(path), parent, applyPatch, tableName, sw, options);
+ return ImportIntoScene(TableLoader.LoadTable(path), Path.GetFileName(path), parent, tableName, sw, options);
}
- public static GameObject ImportIntoScene(FileTableContainer tableContainer, string filename = "", GameObject parent = null, bool applyPatch = true, string tableName = null, Stopwatch sw = null, ConvertOptions options = null)
+ public static GameObject ImportIntoScene(FileTableContainer tableContainer, string filename = "", GameObject parent = null, string tableName = null, Stopwatch sw = null, ConvertOptions options = null)
{
sw ??= Stopwatch.StartNew();
if (tableName == null && !string.IsNullOrEmpty(filename)) {
@@ -43,8 +43,8 @@ public static GameObject ImportIntoScene(FileTableContainer tableContainer, stri
// load table
var loadedIn = sw.ElapsedMilliseconds;
- var converter = new VpxSceneConverter(tableContainer, filename, options);
- var tableGameObject = converter.Convert(applyPatch, tableName);
+ var converter = new VpxSceneConverter(tableContainer, options);
+ var tableGameObject = converter.Convert(tableName);
var convertedIn = sw.ElapsedMilliseconds;
// if an object was selected in the editor, make it its parent
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizard.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizard.cs
index 14fdc9314..7acd3a65e 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizard.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizard.cs
@@ -130,12 +130,6 @@ public void OnGUI()
GUILayout.Space(settingsMargin);
- VpxImportWizardSettings.ApplyPatch = EditorGUILayout.Toggle("Apply Patch", VpxImportWizardSettings.ApplyPatch);
-
- EditorGUILayout.LabelField("Allows you to disable the automatic patching of a table during the import", labelInfoStyle);
-
- GUILayout.Space(settingsMargin);
-
VpxImportWizardSettings.TableName = EditorGUILayout.TextField("Table Name", VpxImportWizardSettings.TableName);
EditorGUILayout.LabelField("The name of the gameobject. Empty = default. Tags: %TABLENAME% = table name, %INFONAME% = Table's Info Name", labelInfoStyle);
@@ -217,10 +211,8 @@ public void OnGUI()
{
VpxImportEngine.ImportIntoScene(
VpxImportWizardSettings.VpxPath,
- null,
- VpxImportWizardSettings.ApplyPatch,
- VpxImportWizardSettings.TableName,
- VpxImportWizardSettings.BuildConvertOptions()
+ tableName: VpxImportWizardSettings.TableName,
+ options: VpxImportWizardSettings.BuildConvertOptions()
);
}
else
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizardSettings.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizardSettings.cs
index b399da4ba..3483a5750 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizardSettings.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxImportWizardSettings.cs
@@ -23,12 +23,6 @@ namespace VisualPinball.Unity.Editor
{
public static class VpxImportWizardSettings
{
- public static bool ApplyPatch
- {
- get => EditorPrefs.GetBool("ApplyPatch", true);
- set => EditorPrefs.SetBool("ApplyPatch", value);
- }
-
public static string VpxPath
{
get => EditorPrefs.GetString("VpxPath", "");
@@ -122,7 +116,6 @@ public static bool IsPathValid()
public static void Reset()
{
VpxPath = "";
- ApplyPatch = true;
TableName = "%TABLENAME%";
ObjectImportFilter = VpxObjectImportFilter.All;
ImportTextures = true;
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPlayfieldPrefab.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPlayfieldPrefab.cs
index eab00593a..8653c139c 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPlayfieldPrefab.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPlayfieldPrefab.cs
@@ -63,9 +63,6 @@ public void PersistData()
PrefabUtility.RecordPrefabInstancePropertyModifications(comp);
}
}
- public void UpdateTransforms()
- {
- }
public void FreeBinaryData() => _primitive.Data.FreeBinaryData();
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPrefab.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPrefab.cs
index 8b3a84e38..7c0263ea6 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPrefab.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxPrefab.cs
@@ -71,7 +71,7 @@ public void SetReferencedData(Table table, IMaterialProvider materialProvider, I
UpdateTransforms();
}
- public void UpdateTransforms()
+ private void UpdateTransforms()
{
if (_mainComponent && _mainComponent is IMainRenderableComponent renderComponent) {
renderComponent.UpdateTransforms();
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs
index a143fe887..c62951c82 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Import/VpxSceneConverter.cs
@@ -86,23 +86,17 @@ public class VpxSceneConverter : ITextureProvider, IMaterialProvider, IMeshProvi
private readonly Dictionary _materials = new Dictionary();
private readonly Dictionary _physicalMaterials = new Dictionary();
- private readonly IPatcher _patcher;
- private bool _applyPatch = true;
-
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
///
/// Creates a new converter for a new table
///
/// Source table container
- /// File name of the file being imported
/// Optional convert options
- public VpxSceneConverter(FileTableContainer sourceContainer, string fileName = "", ConvertOptions options = null)
+ public VpxSceneConverter(FileTableContainer sourceContainer, ConvertOptions options = null)
{
_sourceContainer = sourceContainer;
_sourceTable = sourceContainer.Table;
- _patcher = PatcherManager.GetPatcher();
- _patcher?.Set(sourceContainer, fileName, this, this);
_options = options ?? new ConvertOptions();
}
@@ -142,10 +136,8 @@ public VpxSceneConverter(TableComponent tableComponent)
CreateFileHierarchy();
}
- public GameObject Convert(bool applyPatch = true, string tableName = null)
+ public GameObject Convert(string tableName = null)
{
- _applyPatch = applyPatch;
-
CreateRootHierarchy(tableName);
CreateFileHierarchy();
DumpTableScript();
@@ -192,11 +184,6 @@ public GameObject Convert(bool applyPatch = true, string tableName = null)
SetUpAudio();
- // patch
- if (_applyPatch) {
- _patcher?.PostPatch(_tableGo);
- }
-
ApplyPlayfieldVisualMaterial();
return _tableGo;
@@ -389,14 +376,6 @@ private Dictionary UpdateGameItems(Dictionary(meshPath);
}
- // patch
- if (_applyPatch) {
- _patcher?.ApplyPatches(prefab.GameObject, _tableGo);
- if (prefab.GameObject) { // only if not destroyed..
- prefab.UpdateTransforms();
- }
- }
-
// persist changes
if (prefab.GameObject) { // only if not destroyed..
prefab.PersistData();
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs
deleted file mode 100644
index 7ee5d941f..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs
+++ /dev/null
@@ -1,62 +0,0 @@
-// 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 UnityEngine;
-
-namespace VisualPinball.Unity
-{
- public interface IMaterialAdapter
- {
- ///
- /// Set the material of the gameobject to opaque.
- ///
- ///
- ///
- void SetOpaque(GameObject gameObject);
-
- ///
- /// Set the material of the gameobject to double sided.
- ///
- ///
- void SetDoubleSided(GameObject gameObject);
-
- void SetTransparentDepthPrepassEnabled(GameObject gameObject);
-
- ///
- /// Set the AlphaCutOff value for the material of the gameobject.
- ///
- ///
- void SetAlphaCutOff(GameObject gameObject, float value);
-
- ///
- /// Enable AlphaCutOff for the material of the gameobject.
- ///
- ///
- void SetAlphaCutOffEnabled(GameObject gameObject);
-
- ///
- /// Disable NormalMap for the material of the gameobject.
- ///
- ///
- void SetNormalMapDisabled(GameObject gameObject);
-
- ///
- /// Set the Metallic value for the material of the gameobject.
- ///
- ///
- void SetMetallic(GameObject gameObject, float value);
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs.meta
deleted file mode 100644
index 1a1e15a20..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/IMaterialAdapter.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 767889165ccd30e4ea5ff0a1a98bafc1
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/RenderPipelineConverter.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/RenderPipelineConverter.cs
index c842a18ff..0b464c2a4 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/RenderPipelineConverter.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/RenderPipelineConverter.cs
@@ -38,12 +38,6 @@ public interface IRenderPipelineConverter
///
RenderPipelineType Type { get; }
- ///
- /// Provides a bunch of helper methods for setting common attributes
- /// in materials.
- ///
- IMaterialAdapter MaterialAdapter { get; }
-
///
/// Provides access to VPE's game item prefabs.
///
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs
deleted file mode 100644
index 07f5b014a..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs
+++ /dev/null
@@ -1,61 +0,0 @@
-// 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 NLog;
-using UnityEngine;
-using Logger = NLog.Logger;
-
-namespace VisualPinball.Unity
-{
- public class StandardMaterialAdapter : IMaterialAdapter
- {
- private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
-
- public void SetOpaque(GameObject gameObject)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetOpaque");
- }
- public void SetDoubleSided(GameObject gameObject)
- {
- throw new System.NotImplementedException();
- }
-
- public void SetTransparentDepthPrepassEnabled(GameObject gameObject)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetTransparentDepthPrepassEnabled");
- }
-
- public void SetAlphaCutOff(GameObject gameObject, float value)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetAlphaCutOff");
- }
-
- public void SetAlphaCutOffEnabled(GameObject gameObject)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetAlphaCutOffEnabled");
- }
-
- public void SetNormalMapDisabled(GameObject gameObject)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetNormalMapDisabled");
- }
-
- public void SetMetallic(GameObject gameObject, float value)
- {
- Logger.Info("Not implemented for {0}: {1}", gameObject.name, "SetMetallic");
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs.meta
deleted file mode 100644
index 0ca4c638b..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardMaterialAdapter.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: eb82dd9795de759439ee6a3c6ef05b2e
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardRenderPipeline.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardRenderPipeline.cs
index 669a097cf..e671d2aec 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardRenderPipeline.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Rendering/Standard/StandardRenderPipeline.cs
@@ -26,7 +26,6 @@ public class StandardRenderPipeline : IRenderPipelineConverter
public RenderPipelineType Type { get; } = RenderPipelineType.Standard;
public IMaterialConverter MaterialConverter { get; } = new StandardMaterialConverter();
- public IMaterialAdapter MaterialAdapter { get; } = new StandardMaterialAdapter();
public ILightConverter LightConverter { get; } = new StandardLightConverter();
public IPrefabProvider PrefabProvider { get; } = new StandardPrefabProvider();
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Editor/Toolbox/ToolboxEditor.cs b/VisualPinball.Unity/VisualPinball.Unity.Editor/Toolbox/ToolboxEditor.cs
index 1332dea4c..f06194ccf 100644
--- a/VisualPinball.Unity/VisualPinball.Unity.Editor/Toolbox/ToolboxEditor.cs
+++ b/VisualPinball.Unity/VisualPinball.Unity.Editor/Toolbox/ToolboxEditor.cs
@@ -75,7 +75,7 @@ private void OnGUI()
if (GUILayout.Button("New Table")) {
var tableContainer = new FileTableContainer();
var converter = new VpxSceneConverter(tableContainer);
- var rootGameObj = converter.Convert(false);
+ var rootGameObj = converter.Convert();
Selection.activeGameObject = rootGameObj;
Undo.RegisterCreatedObjectUndo(rootGameObj, "New Table");
}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher.meta
deleted file mode 100644
index 66a6bb71d..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 0417f4751186443592c45fe75288e081
-timeCreated: 1583488731
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher.meta
deleted file mode 100644
index 8bccd3e49..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: c3935a99818240a2b8a2c225a5a22ed5
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item.meta
deleted file mode 100644
index af3bdbf7b..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 76c4882e43f144d393640a68b1e35d43
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs
deleted file mode 100644
index 7b50f30a8..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-// 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 UnityEngine;
-using VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher
-{
- [AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
- public abstract class ItemMatchAttribute : Attribute
- {
- ///
- /// If set, pass the game object with this name as reference to the patcher.
- ///
- public string Ref;
-
- public float FloatParam;
-
- public abstract bool Matches(FileTableContainer tableContainer, GameObject obj);
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs.meta
deleted file mode 100644
index ff8e1b645..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/ItemMatchAttribute.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: ef786f2c87514169bec9cda30740083d
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs
deleted file mode 100644
index 7d53303a4..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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 UnityEngine;
-using VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher
-{
- ///
- /// Matches an game item by its name.
- ///
- public class NameMatchAttribute : ItemMatchAttribute
- {
- public bool IgnoreCase = true;
-
- private readonly string _name;
-
- public NameMatchAttribute(string name)
- {
- _name = name;
- }
-
- public override bool Matches(FileTableContainer tableContainer, GameObject go)
- {
- if (!go) {
- return false;
- }
- return IgnoreCase
- ? string.Equals(go.name, _name, StringComparison.CurrentCultureIgnoreCase)
- : go.name == _name;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs.meta
deleted file mode 100644
index 0c3a87259..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/NameMatchAttribute.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 3379f685dbae4679a4c07ca25105c4a6
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs
deleted file mode 100644
index 6e5156b0b..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-// 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 UnityEngine;
-using VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher.Matcher.Item
-{
- ///
- /// Matches if the render pipeline is set to a given type.
- ///
- public class RenderPipelineAttribute : ItemMatchAttribute
- {
- private readonly RenderPipelineType _type;
-
- public RenderPipelineAttribute(RenderPipelineType type)
- {
- _type = type;
- }
-
- public override bool Matches(FileTableContainer tableContainer, GameObject obj)
- {
- return RenderPipeline.Current.Type == _type;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs.meta
deleted file mode 100644
index 174cc964f..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Item/RenderPipelineAttribute.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 60df9b98a21aebc4dbafe2ecb517bd7b
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table.meta
deleted file mode 100644
index 22cd3ab73..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 677647ec59254030bb8aa07838c42c9f
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs
deleted file mode 100644
index 252cd0151..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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 VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher
-{
- ///
- /// Matches all tables.
- ///
- public class AnyMatchAttribute : TableMatchAttribute
- {
- public override bool Matches(FileTableContainer tableContainer, string fileName)
- {
- return true;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs.meta
deleted file mode 100644
index a510a3316..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/AnyMatchAttribute.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: a4f7205c3d32431b83043bb64e609833
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs
deleted file mode 100644
index 015703eeb..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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 VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher
-{
- ///
- /// Matches by Table Info (in Visual Pinball under the "Table" menu).
- ///
- /// All of the provided fields must match. If none provided, it always matches.
- ///
- public class MetaMatchAttribute : TableMatchAttribute
- {
- public string TableName;
- public string TableVersion;
- public string AuthorName;
-
- public override bool Matches(FileTableContainer tableContainer, string fileName)
- {
- if (TableName != null && tableContainer.InfoName != TableName) {
- return false;
- }
- if (TableVersion != null && tableContainer.InfoVersion != TableVersion) {
- return false;
- }
- if (AuthorName != null && tableContainer.InfoAuthorName != AuthorName) {
- return false;
- }
-
- return true;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs.meta
deleted file mode 100644
index 663957f9c..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/MetaMatchAttribute.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 0ea1ad9032a34b10805f862941593a0b
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs
deleted file mode 100644
index 6dd52ca51..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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 VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher.Matcher.Table
-{
- ///
- /// Matches if the render pipeline is set to a given type.
- ///
- public class RenderPipelineAttribute : TableMatchAttribute
- {
- private readonly RenderPipelineType _type;
-
- public RenderPipelineAttribute(RenderPipelineType type)
- {
- _type = type;
- }
-
- public override bool Matches(FileTableContainer tableContainer, string fileName)
- {
- return RenderPipeline.Current.Type == _type;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs.meta
deleted file mode 100644
index f52faa3e2..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/RenderPipelineAttribute.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: d843e35ea7645aa48b9b28957381b49c
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs
deleted file mode 100644
index fbbdbc357..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-// 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 VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher
-{
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
- public abstract class TableMatchAttribute : Attribute
- {
- public abstract bool Matches(FileTableContainer tableContainer, string fileName);
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs.meta
deleted file mode 100644
index 67075dfb0..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableMatchAttribute.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 126c61e6060f45e9b481cbfd0c6f5bb8
-timeCreated: 1583488750
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs
deleted file mode 100644
index 97d3c74b7..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs
+++ /dev/null
@@ -1,38 +0,0 @@
-// 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 VisualPinball.Engine.VPT.Table;
-
-namespace VisualPinball.Unity.Patcher.Matcher.Table
-{
- ///
- /// Matches by table name (how the table is called in the script).
- ///
- public class TableNameMatchAttribute : TableMatchAttribute
- {
- private readonly string _name;
-
- public TableNameMatchAttribute(string name)
- {
- _name = name;
- }
-
- public override bool Matches(FileTableContainer tableContainer, string fileName)
- {
- return _name == null || tableContainer.Table.Data.Name == _name;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs.meta
deleted file mode 100644
index 0f16e4b8d..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/Table/TableNameMatchAttribute.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 460d940b13b909742912dca08c9b7a2c
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs
deleted file mode 100644
index 4bb8e8376..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs
+++ /dev/null
@@ -1,530 +0,0 @@
-// 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.Linq;
-using UnityEditor;
-using UnityEngine;
-using VisualPinball.Engine.VPT;
-using VisualPinball.Engine.VPT.Light;
-using VisualPinball.Engine.VPT.Table;
-using VisualPinball.Engine.VPT.Trough;
-using VisualPinball.Unity.Editor;
-using Light = UnityEngine.Light;
-using Object = UnityEngine.Object;
-using VpeLight = VisualPinball.Engine.VPT.Light.Light;
-
-namespace VisualPinball.Unity.Patcher
-{
- [Api]
- public abstract class TablePatcher
- {
- public TableContainer TableContainer;
- public ITextureProvider TextureProvider;
- public IMaterialProvider MaterialProvider;
-
- ///
- /// This method is executed once after all element-specific patches had
- /// been applied.
- ///
- /// Override this method when you need to create new objects or make global
- /// changes to the project.
- ///
- /// GameObject of the table.
- public virtual void PostPatch(GameObject tableGo)
- {
- CreateTrough(tableGo, Playfield(tableGo));
- }
-
- #region GameObject Helpers
-
- ///
- /// Returns the playfield of a given table game object.
- ///
- /// Table game object
- ///
- protected static GameObject Playfield(GameObject tableGo)
- {
- var pf = tableGo.GetComponentInChildren();
- if (pf) {
- return pf.gameObject;
- }
-
- Debug.LogWarning($"Cannot find playfield of \"{tableGo.name}\".");
- return tableGo;
-
- }
-
- ///
- /// Creates an empty game object.
- ///
- /// Parent of the new game object
- /// Name of the new game object
- ///
- protected static GameObject CreateEmptyGameObject(GameObject parentGo, string name)
- {
- var newGo = new GameObject(name);
- newGo.transform.SetParent(parentGo.transform, false);
- return newGo;
- }
-
- protected static GameObject GetOrCreateGameObject(GameObject parentGo, string name)
- {
- for (var i = 0; i < parentGo.transform.childCount; i++) {
- if (parentGo.transform.GetChild(i).gameObject.name == name) {
- return parentGo.transform.GetChild(i).gameObject;
- }
- }
-
- return CreateEmptyGameObject(parentGo, name);
- }
-
- ///
- /// Set a new parent for the given child while keeping the position and rotation.
- ///
- ///
- ///
- protected static void Reparent(GameObject child, GameObject parent)
- {
- var rot = child.transform.rotation;
- var pos = child.transform.position;
-
- // re-parent the child
- child.transform.SetParent(parent.transform, false);
-
- child.transform.rotation = rot;
- child.transform.position = pos;
- }
-
- #endregion
-
- #region Element Helpers
-
- ///
- /// Creates a trough.
- ///
- /// Table game object, for retrieving references
- /// Parent game object of the new trough
- /// Name of the new trough
- /// Name of the exit kicker
- /// Name of the entry switch
- protected static TroughComponent CreateTrough(GameObject tableGo, GameObject parentGo,
- string name = "Trough", string exitKicker = "BallRelease", string entrySwitch = "Drain")
- {
- var trough = new Trough(new TroughData {
- BallCount = 4,
- SwitchCount = 4,
- Type = TroughType.ModernMech,
- });
-
- var troughGo = trough.InstantiateEditorPrefab(parentGo.transform);
- var troughComponent = troughGo.GetComponent();
-
- var kickers = tableGo.GetComponentsInChildren();
- foreach (var kicker in kickers) {
- if (string.Equals(kicker.name, exitKicker, StringComparison.OrdinalIgnoreCase)) {
- troughComponent.PlayfieldExitKicker = kicker;
- troughComponent.PlayfieldExitKickerItem = kicker.AvailableCoils.First().Id;
- }
- if (string.Equals(kicker.name, entrySwitch, StringComparison.OrdinalIgnoreCase)) {
- troughComponent.PlayfieldEntrySwitch = kicker;
- troughComponent.PlayfieldEntrySwitchItem = kicker.AvailableSwitches.First().Id;
- }
- }
-
- if (troughComponent.PlayfieldEntrySwitch == null) {
- var triggers = tableGo.GetComponentsInChildren();
- foreach (var trigger in triggers) {
-
- if (string.Equals(trigger.name, entrySwitch, StringComparison.OrdinalIgnoreCase)) {
- troughComponent.PlayfieldEntrySwitch = trigger;
- }
- }
- }
-
- troughGo.name = name;
- return troughComponent;
- }
-
- protected T FindSiblingComponent(MonoBehaviour mb, string name) where T : MonoBehaviour
- {
- return mb.gameObject.transform.parent.transform.Find(name).gameObject.GetComponent();
- }
-
- ///
- /// Creates a drop target bank component.
- ///
- /// Table game object, for retrieving references
- /// Parent game object of the new trough
- /// Name of the new drop target bank
- /// A list of drop targets that are in the drop target bank.
-
- protected static DropTargetBankComponent CreateDropTargetBank(GameObject tableGo, GameObject go,
- string name = "DropTargetBank", params string[] dropTargetNames)
- {
- var playfieldGo = go.GetComponentInParent().gameObject;
- var dropTargetBankParentGo = GetOrCreateGameObject(playfieldGo, "Drop Target Banks");
-
- var dropTargetBankGo = PrefabUtility.InstantiatePrefab(DropTargetBankComponent.LoadPrefab(), dropTargetBankParentGo.transform) as GameObject;
- var dropTargetBank = dropTargetBankGo!.GetComponent();
-
- var compIndex = tableGo.GetComponentsInChildren()
- .ToDictionary(dtc => dtc.name, dtc => dtc);
- var dropTargetComponents = dropTargetNames
- .Where(n => compIndex.ContainsKey(n))
- .Select(n => compIndex[n])
- .ToArray();
-
- dropTargetBank.name = name;
- dropTargetBank.BankSize = dropTargetComponents.Length;
- dropTargetBank.DropTargets = dropTargetComponents;
-
- return dropTargetBank;
- }
-
- #endregion
-
- #region Light Helpers
-
- ///
- /// Adds a light group component to an existing game object.
- ///
- /// Table game object for retrieving light references.
- /// Game object to which the light group is added to.
- /// A list of light names that are part of the light group.
- protected static LightGroupComponent AddLightGroup(GameObject tableGo, GameObject go, params string[] names)
- {
- var lightComponentGroup = go.AddComponent();
-
- var compIndex = tableGo.GetComponentsInChildren()
- .ToDictionary(lc => lc.name, lc => lc);
- var lightComponents = names
- .Where(n => compIndex.ContainsKey(n))
- .Select(n => compIndex[n])
- .ToList();
-
- lightComponentGroup.Lights = lightComponents;
-
- return lightComponentGroup;
- }
-
- ///
- /// Sets the light color of a light source.
- ///
- ///
- /// Supports multiple light sources.
- ///
- /// Game object of the light source
- /// New color of the light source
- protected static void LightColor(GameObject go, Color color)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SetColor(light, color);
- }
- }
-
- ///
- /// Sets the temperature of the light.
- ///
- /// Game object of the light
- /// Temperature in Kelvin
- protected static void LightTemperature(GameObject go, float temp)
- {
- foreach (var l in go.GetComponentsInChildren()) {
- RenderPipeline.Current.LightConverter.SetTemperature(l, temp);
- }
- }
-
- ///
- /// Sets the angle of a spot light.
- ///
- ///
- /// Supports multiple light sources.
- ///
- /// Game object of the spot light
- /// Outer angle of the spot
- /// Inner angle of the spot, in percent of the outer angle
- protected static void SpotAngle(GameObject go, float outer, float inner)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SpotLight(light, outer, inner);
- }
- }
-
-
- ///
- /// Sets the angle of a spot light.
- ///
- ///
- /// Supports multiple light sources.
- ///
- /// Game object of the spot light
- /// Outer angle of the spot
- /// Inner angle of the spot, in percent of the outer angle
- protected static void PointRange(GameObject go, float outer, float inner)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SpotLight(light, outer, inner);
- }
- }
-
- ///
- /// Sets a light source to pyramid spotlight and sets its parameters.
- ///
- ///
- /// Supports multiple light sources.
- ///
- /// Game object of the light source
- /// Angle of the pyramid
- /// Aspect ratio of the pyramid
- protected static void PyramidAngle(GameObject go, float angle, float ar)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.PyramidAngle(light, angle, ar);
- }
- }
-
- ///
- /// Sets the intensity of a light source in lumen.
- ///
- ///
- /// Supports multiple light sources.
- ///
- /// Game object of the light source
- /// Intensity of the light in lumen
- protected static void LightIntensity(GameObject go, float intensityLumen)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SetIntensity(light, intensityLumen);
- }
- }
-
- ///
- /// Sets the range of the light.
- ///
- /// Game object of the light
- /// Range in meters
- protected static void LightRange(GameObject go, float range)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SetRange(light, range);
- }
- }
-
- ///
- /// Sets the shadow of the light.
- ///
- /// Game object of the light
- /// Whether to enable or disable shadows.
- /// If true, update on each frame.
- /// Distance from when on shadows are cast.
- protected static void LightShadow(GameObject go, bool enabled, bool isDynamic, float nearPlane = 0.01f)
- {
- var lights = go.GetComponentsInChildren();
- foreach (var light in lights) {
- RenderPipeline.Current.LightConverter.SetShadow(light, enabled, isDynamic, nearPlane);
- }
- }
-
- ///
- /// Sets the light position.
- ///
- ///
- /// Supports multiple light sources. Note that this only applies to the light source, not to the light itself.
- ///
- /// Game object of the light source
- /// X-position of the source relative to the light
- /// Y-position of the source relative to the light
- /// Z-position of the source relative to the light
- protected static void LightPos(GameObject go, float x, float y, float z)
- {
- var light = go.GetComponentInChildren();
- if (light != null) {
- light.gameObject.transform.localPosition = new Vector3(x, y, z);
- }
- }
-
- ///
- /// Creates a point light.
- ///
- /// Name of the new light
- /// X-position on the playfield
- /// Y-position on the playfield
- /// Game object to parent to (usually "Lights")
- ///
- protected static LightComponent CreateLight(string name, float x, float y, GameObject parentGo)
- {
- var light = VpeLight.GetDefault(name, x, y);
- light.Data.ShowBulbMesh = false;
-
- var prefab = RenderPipelineConverter.Current.PrefabProvider.CreateLight();
- var lightGo = PrefabUtility.InstantiatePrefab(prefab, parentGo.transform) as GameObject;
- if (!lightGo) {
- return null;
- }
- lightGo.name = name;
- var lightTransform = lightGo.transform;
- var lightComponent = lightGo.GetComponent();
- lightComponent.SetData(light.Data);
- lightComponent.UpdateTransforms();
- lightTransform.Find("Bulb").gameObject.SetActive(false);
- lightTransform.Find("Socket").gameObject.SetActive(false);
- return lightComponent;
- }
-
- ///
- /// Converts a normal light to an insert light, by deleting and re-creating the insert prefab.
- ///
- /// Light component to convert
- /// New converted game object
- protected GameObject ConvertToInsertLight(LightComponent lo)
- {
- var name = lo.name;
- var parent = lo.transform.parent.gameObject;
- Object.DestroyImmediate(lo.gameObject);
- return CreateInsertLight(TableContainer.Get(name).Data, parent);
- }
-
- ///
- /// Creates an insert light based on existing light data.
- ///
- ///
- ///
- private GameObject CreateInsertLight(LightData data, GameObject parentGo)
- {
- var prefab = RenderPipelineConverter.Current.PrefabProvider.CreateInsertLight();
- var go = PrefabUtility.InstantiatePrefab(prefab, parentGo.transform) as GameObject;
- go!.name = data.Name;
- data.OffImage = TableContainer.Table.Data.Image;
- var lc = go.GetComponent();
- lc.SetData(data);
- lc.SetReferencedData(data, TableContainer.Table, MaterialProvider, TextureProvider, null);
-
- EditorUtility.SetDirty(go);
- PrefabUtility.RecordPrefabInstancePropertyModifications(lc);
-
- return go;
- }
-
- ///
- /// Duplicates a light source.
- ///
- /// Game object of the light source
- /// X-position of the new light source, relative to the lamp
- /// Y-position of the new light source, relative to the lamp
- /// Z-position of the new light source, relative to the lamp
- protected static void DuplicateLight(GameObject go, float x, float y, float z)
- {
- var light = go.GetComponentInChildren();
- if (light != null) {
- var newGo = Object.Instantiate(light.gameObject, go.transform, true);
- newGo.transform.localPosition = new Vector3(x, y, z);
- }
- }
-
- ///
- /// Creates a light group with the given light names
- ///
- /// GameObject to add the light group to.
- /// Names of the light GameObjects. They must be sister objects of the first parameter.
- protected static void LinkLights(GameObject go, params string[] lightNames)
- {
- var parentTransform = go.transform.parent;
- var lightComponents = lightNames
- .Select(n => parentTransform.Find(n).GetComponent())
- .Where(c => c != null);
- var lg = go.AddComponent();
- lg.Lights = lightComponents.ToList();
- }
-
- #endregion
-
- #region Mapping Helpers
-
- ///
- /// Links a coil device to an existing coil mapping.
- ///
- /// Table component for retrieving mappings.
- /// The ID of the coil mapping that the coil device will be linked to
- /// The coil device to be linked
- /// If set, it's the device item, otherwise the first item of the device.
- protected static void LinkCoil(TableComponent tableComponent, string coilId, ICoilDeviceComponent coilDevice, string deviceItem = null)
- {
- var coilMapping = tableComponent.MappingConfig.Coils.FirstOrDefault(cm => cm.Id == coilId);
- if (coilMapping == null) {
- return;
- }
- coilMapping.Device = coilDevice;
- coilMapping.DeviceItem = deviceItem ?? coilDevice.AvailableCoils.First().Id;
- }
-
- ///
- /// Links a coil device to an existing coil mapping if it matches a given name.
- ///
- /// Table component for retrieving mappings.
- /// The name that the coil device's GameObject has to match in order to be linked.
- /// The ID of the coil mapping that the coil device will be linked to
- /// The coil device to be linked
- /// If set, it's the device item, otherwise the first item of the device.
- protected static void LinkCoil(TableComponent tableComponent, string elementName, string coilId, ICoilDeviceComponent coilDevice, string deviceItem = null)
- {
- if (!string.Equals(coilDevice.gameObject.name, elementName, StringComparison.OrdinalIgnoreCase)) {
- return;
- }
- LinkCoil(tableComponent, coilId, coilDevice, deviceItem);
- }
-
- ///
- /// Links a switch device to an existing switch mapping.
- ///
- /// Table component for retrieving mappings.
- /// The ID of the switch mapping that the switch device will be linked to
- /// The switch device to be linked
- /// Switch ID inside of the device item. If null, the first switch will be used.
- protected static void LinkSwitch(TableComponent tableComponent, string switchId, ISwitchDeviceComponent switchDevice, string switchDeviceItem = null)
- {
- var switchMapping = tableComponent.MappingConfig.Switches.FirstOrDefault(sw => sw.Id == switchId);
- if (switchMapping == null) {
- return;
- }
- switchMapping.Device = switchDevice;
- switchMapping.DeviceItem = switchDeviceItem ?? switchDevice.AvailableSwitches.First().Id;
- }
-
- ///
- /// Links a switch device to an existing switch mapping if it matches a given name.
- ///
- /// Table component for retrieving mappings.
- /// The name that the switch device's GameObject has to match in order to be linked.
- /// The ID of the switch mapping that the switch device will be linked to
- /// The switch device to be linked
- protected static void LinkSwitch(TableComponent tableComponent, string elementName, string switchId, ISwitchDeviceComponent switchDevice)
- {
- if (!string.Equals(switchDevice.gameObject.name, elementName, StringComparison.OrdinalIgnoreCase)) {
- return;
- }
- LinkSwitch(tableComponent, switchId, switchDevice);
- }
-
- #endregion
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs.meta
deleted file mode 100644
index dc0d95ed9..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Matcher/TablePatcher.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: f2db227803e55c64fac564f27a2464b2
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher.meta
deleted file mode 100644
index bad8111d2..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: d3dfd67c93e94b4d99f89b23cfe5cc49
-timeCreated: 1583488751
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common.meta
deleted file mode 100644
index 106258b64..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 7f5754d87ae245f797fd9746f827de9e
-timeCreated: 1583488751
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs
deleted file mode 100644
index 726327975..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs
+++ /dev/null
@@ -1,51 +0,0 @@
-// 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 UnityEngine;
-
-namespace VisualPinball.Unity.Patcher
-{
- [AnyMatch]
- public class Defaults
- {
- [NameMatch("BallShadow1")]
- [NameMatch("BallShadow2")]
- [NameMatch("BallShadow3")]
- [NameMatch("BallShadow4")]
- [NameMatch("BallShadow5")]
- [NameMatch("BallShadow6")]
- [NameMatch("BallShadow7")]
- public void RemoveBallShadow(GameObject go)
- {
- go.SetActive(false);
- }
-
- [NameMatch("FlipperLSh")]
- [NameMatch("FlipperRSh")]
- public void RemoveFlipperShadow(GameObject go)
- {
- go.SetActive(false);
- }
-
- [NameMatch("Ruler_mm")]
- [NameMatch("Ruler_inches")]
- [NameMatch("Ruler_inches_and_mm")]
- public void RemoveColliders(PrimitiveColliderComponent collider)
- {
- Object.DestroyImmediate(collider);
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs.meta
deleted file mode 100644
index 173c7f518..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/Defaults.cs.meta
+++ /dev/null
@@ -1,3 +0,0 @@
-fileFormatVersion: 2
-guid: 05c2c3e4b1a2464898983d4db055b87b
-timeCreated: 1583488751
\ No newline at end of file
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs
deleted file mode 100644
index f4162f66a..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-// 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 NLog;
-using UnityEngine;
-using Logger = NLog.Logger;
-
-namespace VisualPinball.Unity.Patcher
-{
- ///
- /// Common methods for patching a table during import.
- ///
- static class PatcherUtil
- {
- private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
-
- ///
- /// Hide the gameobject.
- ///
- ///
- public static void Hide(GameObject gameObject)
- {
- gameObject.SetActive(false);
- }
-
- ///
- /// Set a new parent for the given child while keeping the position and rotation.
- ///
- ///
- ///
- public static void Reparent(GameObject child, GameObject parent)
- {
- var rot = child.transform.rotation;
- var pos = child.transform.position;
-
- // re-parent the child
- child.transform.SetParent(parent.transform, false);
-
- child.transform.rotation = rot;
- child.transform.position = pos;
- }
- }
-}
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs.meta b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs.meta
deleted file mode 100644
index bb3acfe91..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Common/PatcherUtil.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 79ce971d0433bf74e90e452941cc356b
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Patcher.cs b/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Patcher.cs
deleted file mode 100644
index 434bb4c2c..000000000
--- a/VisualPinball.Unity/VisualPinball.Unity.Patcher/Patcher/Patcher.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-// 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 .
-
-// ReSharper disable UnusedType.Global
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Reflection;
-using NLog;
-using UnityEngine;
-using VisualPinball.Engine.VPT.Table;
-using Logger = NLog.Logger;
-
-namespace VisualPinball.Unity.Patcher
-{
- public sealed class Patcher : IPatcher
- {
- private readonly List