Skip to content

Commit e6ee6a8

Browse files
committed
Implement PropertyModifier using Preset instead of hacky PropertyVariant
Editor Presets draw perfect inspectors without the need for hacky reflections
1 parent 53a94f2 commit e6ee6a8

27 files changed

+355
-733
lines changed
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
#if !UNITY_2020_2_OR_NEWER
2-
using UnityEditor;
1+
using UnityEditor;
32

43
namespace Gilzoide.ConditionalObjects.Editor
54
{
@@ -8,13 +7,14 @@ public class AImportTimeObjectModifierEditor : UnityEditor.Editor
87
{
98
public override void OnInspectorGUI()
109
{
10+
#if !UNITY_2020_2_OR_NEWER
1111
if (target.IsPartOfPrefab())
1212
{
1313
EditorGUILayout.HelpBox($"{target.GetType().Name} in Prefab will only work when prefab is instanced in scenes. Use Unity 2020.2+ for full prefab support.", MessageType.Warning);
1414
}
15+
#endif
1516

1617
DrawDefaultInspector();
1718
}
1819
}
19-
}
20-
#endif
20+
}

Editor/CustomInspectors/CustomPropertyDrawerFinder.cs

Lines changed: 0 additions & 85 deletions
This file was deleted.
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using UnityEditor;
2+
using UnityEditor.Presets;
3+
using UnityEngine;
4+
5+
namespace Gilzoide.ConditionalObjects.Editor
6+
{
7+
[CustomEditor(typeof(PropertyModifier))]
8+
public class PropertyModifierEditor : AImportTimeObjectModifierEditor
9+
{
10+
private SerializedProperty _gameObjectProperty;
11+
private SerializedProperty _componentIndexProperty;
12+
private GlobalObjectId _serializedObjectId;
13+
private Preset _preset;
14+
private UnityEditor.Editor _presetEditor;
15+
16+
void OnEnable()
17+
{
18+
_gameObjectProperty = serializedObject.FindProperty($"{nameof(PropertyModifier.Target)}.{nameof(GameObjectOrComponent.GameObject)}");
19+
_componentIndexProperty = serializedObject.FindProperty($"{nameof(PropertyModifier.Target)}.{nameof(GameObjectOrComponent.ComponentIndex)}");
20+
_serializedObjectId = GlobalObjectId.GetGlobalObjectIdSlow(target);
21+
_preset = EmbeddedPresetHolder.Instance.GetOrCreatePreset(_serializedObjectId, GetTarget());
22+
}
23+
24+
void OnDisable()
25+
{
26+
_gameObjectProperty.Dispose();
27+
_componentIndexProperty.Dispose();
28+
DestroyImmediate(_presetEditor);
29+
}
30+
31+
public override void OnInspectorGUI()
32+
{
33+
Object previousTarget = GetTarget();
34+
DrawDefaultInspector();
35+
Object newTarget = GetTarget();
36+
if (newTarget != previousTarget)
37+
{
38+
Undo.RecordObject(EmbeddedPresetHolder.Instance, "");
39+
_preset = EmbeddedPresetHolder.Instance.GetOrCreatePreset(_serializedObjectId, newTarget);
40+
}
41+
42+
if (_preset != null)
43+
{
44+
if (_presetEditor == null || _presetEditor.target != _preset)
45+
{
46+
DestroyImmediate(_presetEditor);
47+
_presetEditor = CreateEditor(_preset);
48+
}
49+
_presetEditor.OnInspectorGUI();
50+
}
51+
}
52+
53+
private Object GetTarget()
54+
{
55+
return ((GameObject) _gameObjectProperty.objectReferenceValue).ComponentAtIndexOrSelf(_componentIndexProperty.intValue);
56+
}
57+
}
58+
}

Runtime/PropertyVariant.cs.meta renamed to Editor/CustomInspectors/PropertyModifierEditor.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)