Skip to content

Commit 5b52c5d

Browse files
authored
Merge pull request #55 from FreezyExp/feature/fixes
Feature/fixes
2 parents 111f79d + b807124 commit 5b52c5d

7 files changed

Lines changed: 51 additions & 9 deletions

Scripts/Editor/CreateCollectionWizzard.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,12 @@ private void CreateIndirectAccess()
264264
CodeGenerationUtility.AppendLine(writer, 0,
265265
$"#endif");
266266

267+
CodeGenerationUtility.AppendLine(writer, indentation,
268+
$"public {collectableName}IndirectReference() {{}}");
269+
270+
CodeGenerationUtility.AppendLine(writer, indentation,
271+
$"public {collectableName}IndirectReference({collectableName} collectableScriptableObject) : base(collectableScriptableObject) {{}}");
272+
267273
indentation--;
268274
CodeGenerationUtility.AppendFooter(writer, ref indentation, TargetNameSpace);
269275
}

Scripts/Editor/Utils/CollectionUtility.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ private static void CreateNewItem()
2525
[MenuItem("Assets/Create/ScriptableObject Collection/Create Settings", false, 200)]
2626
private static void CreateSettings()
2727
{
28-
ScriptableObjectCollectionSettings.LoadOrCreateInstance<ScriptableObjectCollectionSettings>();
28+
ScriptableObjectCollectionSettings.LoadOrCreateInstance();
2929
}
3030

3131
[MenuItem("Assets/Create/ScriptableObject Collection/Create Settings", true, 200)]

Scripts/Runtime/CollectableIndirectReference.cs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,32 @@ public abstract class CollectableIndirectReference
88
{
99
[SerializeField]
1010
protected string collectableGUID;
11-
11+
1212
[SerializeField]
1313
protected string collectionGUID;
14-
}
15-
14+
}
15+
1616
[Serializable]
1717
public abstract class CollectableIndirectReference<TObject> : CollectableIndirectReference
1818
where TObject : CollectableScriptableObject
1919
{
2020
[NonSerialized]
2121
private TObject cachedRef;
22+
23+
/// <summary>
24+
/// Alternative to [XmlIgnore] [JsonIgnore]
25+
/// </summary>
26+
/// <returns>false, because of a circular reference and the SO is not serializable</returns>
27+
public bool ShouldSerializeRef() => false;
28+
2229
public TObject Ref
2330
{
2431
get
2532
{
2633
if (cachedRef != null)
34+
{
2735
return cachedRef;
36+
}
2837

2938
if (CollectionsRegistry.Instance.TryGetCollectionByGUID(collectionGUID,
3039
out ScriptableObjectCollection<TObject> collection))
@@ -38,6 +47,33 @@ public TObject Ref
3847

3948
return cachedRef;
4049
}
50+
set => FromCollectable(value);
51+
}
52+
53+
/// <summary>
54+
/// Used for serializing, as the protected fields only work for Unity's serializer
55+
/// </summary>
56+
public string PairedGUID
57+
{
58+
get => collectionGUID + ":" + collectableGUID;
59+
set
60+
{
61+
var split = value.Split(':');
62+
if (split.Length == 2)
63+
{
64+
collectionGUID = split[0];
65+
collectableGUID = split[1];
66+
}
67+
}
68+
}
69+
70+
public CollectableIndirectReference()
71+
{
72+
}
73+
74+
public CollectableIndirectReference(TObject collectableScriptableObject)
75+
{
76+
FromCollectable(collectableScriptableObject);
4177
}
4278

4379
public void FromCollectable(CollectableScriptableObject collectableScriptableObject)

Scripts/Runtime/CollectableScriptableObject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using UnityEngine;
33

44
namespace BrunoMikoski.ScriptableObjectCollections

Scripts/Runtime/CollectionsRegistry.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class CollectionsRegistry : ResourceScriptableObjectSingleton<Collections
1515

1616
public void UsedOnlyForAOTCodeGeneration()
1717
{
18-
LoadOrCreateInstance<CollectionsRegistry>();
18+
LoadOrCreateInstance();
1919
// Include an exception so we can be sure to know if this method is ever called.
2020
throw new InvalidOperationException("This method is used for AOT code generation only. Do not call it at runtime.");
2121
}

Scripts/Runtime/ResourceScriptableObjectSingleton.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ public static T Instance
1111
get
1212
{
1313
if (instance == null)
14-
instance = LoadOrCreateInstance<T>();
14+
instance = LoadOrCreateInstance();
1515
return instance;
1616
}
1717
}
1818

1919
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
20-
public static T LoadOrCreateInstance<T>() where T : ScriptableObject
20+
public static T LoadOrCreateInstance()
2121
{
2222
if (!TryToLoadInstance(out T resultInstance))
2323
{

Scripts/Runtime/ScriptableObjectCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ public static ScriptableObjectCollection<ObjectType> Values
401401
set => base[index] = value;
402402
}
403403

404-
public IEnumerator<ObjectType> GetEnumerator()
404+
public new IEnumerator<ObjectType> GetEnumerator()
405405
{
406406
using (IEnumerator<CollectableScriptableObject> itemEnum = base.GetEnumerator())
407407
{

0 commit comments

Comments
 (0)