Skip to content

Commit 92cf548

Browse files
committed
editor: Add custom mesh to mesh selection property field.
1 parent c7a71a1 commit 92cf548

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

VisualPinball.Unity/VisualPinball.Unity.Editor/VPT/ItemInspector.cs

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -215,26 +215,42 @@ protected void MeshDropdownProperty(string label, SerializedProperty meshProp, s
215215
{
216216
var files = Directory.GetFiles(meshFolder, "*.mesh")
217217
.Select(Path.GetFileNameWithoutExtension)
218+
.Concat(new[] { "Custom Mesh"})
218219
.ToArray();
219220

220221
var selectedIndex = files.ToList().IndexOf(meshProp.stringValue);
221222
EditorGUI.BeginChangeCheck();
222223
var newIndex = EditorGUILayout.Popup(label, selectedIndex, files);
223224
if (EditorGUI.EndChangeCheck() && newIndex >= 0 && newIndex < files.Length && go != null) {
225+
var meshPath = Path.Combine(meshFolder, $"{files[newIndex]}.mesh");
224226
var mf = go.GetComponent<MeshFilter>();
225-
if (mf) {
226-
var mesh = (Mesh)AssetDatabase.LoadAssetAtPath(Path.Combine(meshFolder, $"{files[newIndex]}.mesh"), typeof(Mesh));
227+
var mr = go.GetComponent<MeshRenderer>();
228+
if (File.Exists(meshPath)) {
229+
if (!mf) {
230+
mf = go.AddComponent<MeshFilter>();
231+
}
232+
if (!mr) {
233+
go.AddComponent<MeshRenderer>();
234+
}
235+
var mesh = (Mesh)AssetDatabase.LoadAssetAtPath(meshPath, typeof(Mesh));
236+
mr.enabled = true;
227237
mf.sharedMesh = mesh;
228-
meshProp.stringValue = files[newIndex];
229-
if (meshTypeMap.ContainsKey(files[newIndex])) {
230-
typeProp.intValue = meshTypeMap[files[newIndex]];
238+
239+
} else {
240+
if (mr) {
241+
mr.enabled = false;
231242
}
232-
meshProp.serializedObject.ApplyModifiedProperties();
233-
if (target is MonoBehaviour mb) {
234-
var colliderComponent = mb.GetComponent<IColliderComponent>();
235-
if (colliderComponent != null) {
236-
colliderComponent.CollidersDirty = true;
237-
}
243+
}
244+
245+
meshProp.stringValue = files[newIndex];
246+
if (meshTypeMap.ContainsKey(files[newIndex])) {
247+
typeProp.intValue = meshTypeMap[files[newIndex]];
248+
}
249+
meshProp.serializedObject.ApplyModifiedProperties();
250+
if (target is MonoBehaviour mb) {
251+
var colliderComponent = mb.GetComponent<IColliderComponent>();
252+
if (colliderComponent != null) {
253+
colliderComponent.CollidersDirty = true;
238254
}
239255
}
240256
}

0 commit comments

Comments
 (0)