Skip to content

Commit f44983b

Browse files
committed
wip move data to SO instead of user data in .meta file
1 parent de075eb commit f44983b

14 files changed

Lines changed: 199 additions & 26 deletions

Editor/SOContextMenu.cs

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,25 @@ namespace Giezi.Tools
88
{
99
public static class SOContextMenu
1010
{
11-
private const string GieziToolsCreateSOvariantChildKey = "Giezi.Tools.CreateSoVariant.Child";
12-
private const string GieziToolsCreateSOvariantParentKey = "Giezi.Tools.CreateSoVariant.Parent";
11+
private static SOData _soData = null;
12+
13+
public static SOData SOData
14+
{
15+
get
16+
{
17+
if (_soData == null)
18+
{
19+
Debug.Log(AssetDatabase.GUIDToAssetPath("50b31bd74d19a40b293ceaeefd1c650e"));
20+
_soData = AssetDatabase.LoadAssetAtPath<SOData>(
21+
AssetDatabase.GUIDToAssetPath("50b31bd74d19a40b293ceaeefd1c650e"));
22+
Debug.Log(_soData);
23+
}
24+
return _soData;
25+
}
26+
}
27+
28+
// private const string GieziToolsCreateSOvariantChildKey = "Giezi.Tools.CreateSoVariant.Child";
29+
// private const string GieziToolsCreateSOvariantParentKey = "Giezi.Tools.CreateSoVariant.Parent";
1330

1431
[MenuItem("Assets/Create/Create SO Variant", false, 2000)]
1532
static void CreateSOVariant()
@@ -25,8 +42,11 @@ static void CreateSOVariant()
2542
AssetDatabase.CreateAsset(newAsset, newAssetPath);
2643
EditorUtility.SetDirty(newAsset);
2744

28-
PlayerPrefs.SetString(GieziToolsCreateSOvariantChildKey, newAssetPath);
29-
PlayerPrefs.SetString(GieziToolsCreateSOvariantParentKey, assetPath);
45+
// PlayerPrefs.SetString(GieziToolsCreateSOvariantChildKey, newAssetPath);
46+
// PlayerPrefs.SetString(GieziToolsCreateSOvariantParentKey, assetPath);
47+
SOData.SOVariantCreationData = new SOVariantCreationData((ScriptableObject) activeObject, newAsset);
48+
49+
EditorUtility.SetDirty(SOData);
3050

3151
AssetDatabase.SaveAssets();
3252

@@ -44,27 +64,19 @@ static bool ValidateCreateSOVariant()
4464
[UnityEditor.Callbacks.DidReloadScripts]
4565
static void SetParentAfterReload()
4666
{
47-
if (!PlayerPrefs.HasKey(GieziToolsCreateSOvariantChildKey))
67+
if(SOData.SOVariantCreationData == null || !SOData.SOVariantCreationData.CreateSoVariant)
4868
return;
4969

50-
if(AssetImporter.GetAtPath(PlayerPrefs.GetString(GieziToolsCreateSOvariantChildKey)) == null)
51-
{
52-
Debug.Log("<color=orange>SOVariant: </color>Asset Importer does not exist yet, waiting for Unity to reload.");
70+
if(SOData.SOVariantCreationData.Child == null)
5371
return;
54-
}
55-
56-
ScriptableObject parent =
57-
AssetDatabase.LoadAssetAtPath<ScriptableObject>(
58-
PlayerPrefs.GetString(GieziToolsCreateSOvariantParentKey));
72+
73+
ScriptableObject parent = SOData.SOVariantCreationData.Parent;
74+
ScriptableObject child = SOData.SOVariantCreationData.Child;
5975

60-
ScriptableObject child =
61-
AssetDatabase.LoadAssetAtPath<ScriptableObject>(
62-
PlayerPrefs.GetString(GieziToolsCreateSOvariantChildKey));
6376

6477
SOVariantHelper<ScriptableObject>.SetParent(child, parent);
65-
66-
PlayerPrefs.DeleteKey(GieziToolsCreateSOvariantParentKey);
67-
PlayerPrefs.DeleteKey(GieziToolsCreateSOvariantChildKey);
78+
79+
SOData.SOVariantCreationData = null;
6880

6981
Debug.Log($"<color=orange>SOVariant: </color>Created new SO Variant {child.name} with parent.");
7082
}

Editor/SOData.asset

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!114 &11400000
4+
MonoBehaviour:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInstance: {fileID: 0}
8+
m_PrefabAsset: {fileID: 0}
9+
m_GameObject: {fileID: 0}
10+
m_Enabled: 1
11+
m_EditorHideFlags: 0
12+
m_Script: {fileID: 11500000, guid: 96d04f0439eb42b5ba32fc6ae069f31c, type: 3}
13+
m_Name: SOData
14+
m_EditorClassIdentifier:
15+
_soVariantCreationData:
16+
_child: {fileID: 0}
17+
_parent: {fileID: 0}
18+
_createSOVariant: 0

Editor/SOData.asset.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.

Editor/SOData.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using Sirenix.OdinInspector;
2+
using UnityEngine;
3+
using UnityEngine.Serialization;
4+
5+
namespace Giezi.Tools
6+
{
7+
public class SOData : ScriptableObject
8+
{
9+
[SerializeField] private SOVariantCreationData _soVariantCreationData = null;
10+
11+
public SOVariantCreationData SOVariantCreationData
12+
{
13+
get => _soVariantCreationData;
14+
set => _soVariantCreationData = value;
15+
}
16+
17+
[Button]
18+
public void CreateFile()
19+
{
20+
var data = SOVariantDataAccessor.SOVariantData;
21+
}
22+
}
23+
}

Editor/SOData.cs.meta

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

Editor/SOVariant.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public bool SetParent(T parent, bool setToParentData = true)
4141
{
4242
if (_target == null)
4343
return false;
44+
4445

4546
if (parent)
4647
{
@@ -388,7 +389,7 @@ private void WriteOnlyChildrenData(AssetImporter importer, List<string> children
388389

389390
public void SaveData(List<string> overriddenMembers, List<string> changedValues = null)
390391
{
391-
if (_import is null)
392+
if (_import == null)
392393
return;
393394

394395
string overridesData = SerializeOverrideData(overriddenMembers);

Editor/SOVariantAttributeProcessor.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,18 @@ public override void ProcessMemberProperties(List<InspectorPropertyInfo> propert
5050
_selectionChangedFlag = true;
5151

5252
AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReloads;
53+
EditorApplication.playModeStateChanged += OnBeforeEnterPlayMode;
5354
}
5455

5556
if (_soVariant == null || _soVariant._overridden == null || _soVariant._import == null || _soVariant._children == null){
5657
_soVariant = new SOVariant<T>((T)Property.Tree.UnitySerializedObject.targetObject);
58+
Debug.Log("still got here");
5759
if (!_soVariant.SoVariantProperlyLoaded)
5860
{
5961
Selection.selectionChanged -= OnSelectionChanged;
6062
_selectionChangedFlag = false;
6163
AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReloads;
64+
EditorApplication.playModeStateChanged -= OnBeforeEnterPlayMode;
6265

6366
Selection.activeObject = null;
6467

@@ -116,11 +119,18 @@ public override void ProcessMemberProperties(List<InspectorPropertyInfo> propert
116119

117120
private void OnBeforeAssemblyReloads() => OnSelectionChanged();
118121

122+
private void OnBeforeEnterPlayMode(PlayModeStateChange playModeStateChange)
123+
{
124+
if (playModeStateChange == PlayModeStateChange.ExitingEditMode)
125+
OnSelectionChanged();
126+
}
127+
119128

120129
private void OnSelectionChanged()
121130
{
122131
AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReloads;
123132
Selection.selectionChanged -= OnSelectionChanged;
133+
EditorApplication.playModeStateChanged -= OnBeforeEnterPlayMode;
124134
_selectionChangedFlag = false;
125135

126136
_soVariant.SaveData(_soVariant._overridden);

Editor/SOVariantCreationData.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System;
2+
using UnityEngine;
3+
4+
namespace Giezi.Tools
5+
{
6+
[Serializable]
7+
public class SOVariantCreationData
8+
{
9+
public SOVariantCreationData(ScriptableObject parent, ScriptableObject child)
10+
{
11+
_parent = parent;
12+
_child = child;
13+
_createSOVariant = true;
14+
}
15+
16+
[SerializeField] private ScriptableObject _child;
17+
18+
public ScriptableObject Child
19+
{
20+
get => _child;
21+
set => _child = value;
22+
}
23+
24+
[SerializeField] private ScriptableObject _parent;
25+
26+
public ScriptableObject Parent
27+
{
28+
get => _parent;
29+
set => _parent = value;
30+
}
31+
32+
[SerializeField] private bool _createSOVariant;
33+
34+
public bool CreateSoVariant
35+
{
36+
get => _createSOVariant;
37+
set => _createSOVariant = value;
38+
}
39+
}
40+
}

Editor/SOVariantCreationData.cs.meta

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

Editor/SOVariantData.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using UnityEngine;
2+
3+
namespace Giezi.Tools
4+
{
5+
[CreateAssetMenu]
6+
public class SOVariantData : ScriptableObject
7+
{
8+
[SerializeField] private int myint;
9+
}
10+
}

0 commit comments

Comments
 (0)