Skip to content

Commit 0e55bb6

Browse files
committed
Database structure changed, scene object saving functional
1 parent e1d6c6b commit 0e55bb6

7 files changed

+214
-32
lines changed

Editor/CustomTransformEditor.cs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class CustomTransformEditor : Editor
1414
private Editor defaultEditor;
1515
private VisualElement transformContainer;
1616
private Transform _transform;
17-
17+
1818
public override VisualElement CreateInspectorGUI()
1919
{
2020
_transform = target as Transform;
@@ -38,20 +38,30 @@ public override VisualElement CreateInspectorGUI()
3838
private void OnNoteTake()
3939
{
4040
var noteField = transformContainer.Q("noteField");
41-
//transformContainer.Remove(noteField);
42-
var db = StickyNoteManagementUtils.LoadOrCreateDatabase();
43-
if (db.GetStickyNoteFromHash(_transform.gameObject) != null)
44-
{
45-
Debug.Log("RECORD EXISTS");
46-
}
47-
else
48-
{
49-
var noteInstance = ScriptableObject.CreateInstance<StickyNote>();
50-
AssetDatabase.AddObjectToAsset(noteInstance, db);
51-
AssetDatabase.SaveAssets();
52-
AssetDatabase.Refresh();
53-
db.AddGameObjectToHashList(_transform.gameObject, noteInstance);
54-
}
41+
transformContainer.Remove(noteField);
42+
var db = StickyNoteManagementUtils.LoadOrCreateDatabase();
43+
var localId = StickyNoteManagementUtils.GetLocalIdentifierFromSceneObject(_transform.gameObject);
44+
if (localId!=0 && db.GetStickySceneNotes(localId).Length!=0)
45+
{
46+
noteField = new VisualElement();
47+
noteField.style.flexDirection = FlexDirection.Row;
48+
foreach (var stickySceneNote in db.GetStickySceneNotes(localId))
49+
{
50+
noteField.Add(new Label(stickySceneNote.paperColor.ToString()));
51+
}
52+
transformContainer.Add(noteField);
53+
}
54+
else
55+
{
56+
var noteInstance = ScriptableObject.CreateInstance<StickyNote>();
57+
AssetDatabase.AddObjectToAsset(noteInstance, db);
58+
AssetDatabase.SaveAssets();
59+
AssetDatabase.Refresh();
60+
db.NewStickySceneNote(
61+
StickyNoteManagementUtils.GetLocalIdentifierFromSceneObject(_transform.gameObject), noteInstance);
62+
EditorUtility.SetDirty(db);
63+
64+
}
5565
}
5666

5767

Editor/StickyNoteBinding.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,32 @@
44
namespace Subtegral.StickyNotes
55
{
66
[Serializable]
7-
public class StickyNoteBinding
7+
public abstract class StickyNoteBinding
88
{
9-
public GameObject Key;
10-
119
public StickyNote Note;
1210
}
11+
12+
[Serializable]
13+
public class SceneNoteBinding : StickyNoteBinding
14+
{
15+
public long LocalIdentifier;
16+
17+
public SceneNoteBinding(long localIdentifier,StickyNote note)
18+
{
19+
LocalIdentifier = localIdentifier;
20+
Note = note;
21+
}
22+
}
23+
24+
[Serializable]
25+
public class AssetDatabaseBinding : StickyNoteBinding
26+
{
27+
public string GUID;
28+
29+
public AssetDatabaseBinding(string guid,StickyNote note)
30+
{
31+
GUID = guid;
32+
Note = note;
33+
}
34+
}
1335
}

Editor/StickyNoteDatabaseEditor.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System.Collections;
2+
using System.Collections.Generic;
3+
using UnityEditor;
4+
using UnityEngine;
5+
6+
namespace Subtegral.StickyNotes
7+
{
8+
[CustomEditor(typeof(StickyNotesDatabase))]
9+
public class StickyNoteDatabaseEditor : Editor
10+
{
11+
private StickyNotesDatabase _database;
12+
13+
public override void OnInspectorGUI()
14+
{
15+
if (_database == null)
16+
_database = target as StickyNotesDatabase;
17+
18+
foreach (var perItem in _database.SceneBindings)
19+
{
20+
EditorGUILayout.LabelField(perItem.LocalIdentifier.ToString());
21+
}
22+
}
23+
}
24+
}

Editor/StickyNoteDatabaseEditor.cs.meta

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

Editor/StickyNoteManagementUtils.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Reflection;
23
using Subtegral.StickyNotes;
34
using UnityEditor;
45
using UnityEditor.ProjectWindowCallback;
@@ -8,11 +9,12 @@
89
public static class StickyNoteManagementUtils
910
{
1011
private static Texture2D _icon;
12+
1113
public static Texture2D Icon
1214
{
1315
get
1416
{
15-
if(_icon==null)
17+
if (_icon == null)
1618
_icon = Resources.Load<Texture2D>("StickyNoteIcon");
1719
return _icon;
1820
}
@@ -69,4 +71,16 @@ public override void Action(int instanceId, string pathName, string resourceFile
6971
//if (AssetDatabase.TryGetGUIDAndLocalFileIdentifier(noteInstance, out string guid, out long localId))
7072
}
7173
}
74+
75+
public static long GetLocalIdentifierFromSceneObject(Object unityObject)
76+
{
77+
if (unityObject == null) return 0;
78+
79+
var serializedObject = new SerializedObject(unityObject);
80+
var inspectorProperty =
81+
typeof(SerializedObject).GetProperty("inspectorMode", BindingFlags.NonPublic | BindingFlags.Instance);
82+
inspectorProperty.SetValue(serializedObject,InspectorMode.Debug,null);
83+
var serializedProperty = serializedObject.FindProperty("m_LocalIdentfierInFile"); //Thank you Joachim! Really!
84+
return serializedProperty.longValue;
85+
}
7286
}

Editor/StickyNotesDatabase.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,41 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using UnityEngine;
34

45
namespace Subtegral.StickyNotes
56
{
67
public class StickyNotesDatabase : ScriptableObject
78
{
8-
public List<StickyNoteBinding> Bindings = new List<StickyNoteBinding>();
9+
public List<SceneNoteBinding> SceneBindings = new List<SceneNoteBinding>();
10+
public List<AssetDatabaseBinding> AssetDatabaseBindings = new List<AssetDatabaseBinding>();
11+
12+
public void NewStickySceneNote(long localId,StickyNote noteInstance)
13+
{
14+
noteInstance.attachment = Attachment.GameObject;
15+
SceneBindings.Add(new SceneNoteBinding(localId,noteInstance));
16+
17+
}
918

10-
public void AddGameObjectToHashList(GameObject gameObject, StickyNote noteInstance)
19+
public void NewStickyAssetNote(string guid,StickyNote noteInstance)
1120
{
12-
if (Bindings.Exists(x => x.Key == gameObject))
13-
return;
14-
Bindings.Add(new StickyNoteBinding
15-
{
16-
Key = gameObject, Note = noteInstance
17-
});
21+
noteInstance.attachment = Attachment.Asset;
22+
AssetDatabaseBindings.Add(new AssetDatabaseBinding(guid,noteInstance));
1823
}
1924

20-
public void RemoveNoteWithHash(GameObject gameObject)
25+
public void RemoveStickyNote(StickyNote note)
2126
{
22-
Bindings.RemoveAll(x=>x.Key==gameObject);
27+
AssetDatabaseBindings.RemoveAll(x => x.Note == note);
28+
SceneBindings.RemoveAll(x => x.Note == note);
2329
}
2430

25-
public StickyNote GetStickyNoteFromHash(GameObject gameObject)
31+
public StickyNote[] GetStickySceneNotes(long localId)
2632
{
27-
return Bindings.Find(x => x.Key == gameObject)?.Note;
28-
33+
return SceneBindings.FindAll(x => x.LocalIdentifier == localId).Select(x=>x.Note).ToArray();
34+
}
35+
36+
public StickyNote[] GetStickyAssetNotes(string guid)
37+
{
38+
return AssetDatabaseBindings.FindAll(x => x.GUID == guid).Select(x => x.Note).ToArray();
2939
}
3040
}
3141
}

StickyNotesDesignSketch.png.meta

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

0 commit comments

Comments
 (0)