Skip to content

Commit d8903f9

Browse files
committed
addressed PR feedback
1 parent 8a885c6 commit d8903f9

File tree

1 file changed

+26
-24
lines changed

1 file changed

+26
-24
lines changed

com.unity.perception/Runtime/Randomization/Randomizers/RandomizerExamples/Utilities/GameObjectOneWayCache.cs

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class GameObjectOneWayCache
1515

1616
Transform m_CacheParent;
1717
Dictionary<int, int> m_InstanceIdToIndex;
18-
List<GameObject>[] m_InstantiatedObjects;
18+
List<CachedObjectData>[] m_InstantiatedObjects;
1919
int[] m_NumObjectsActive;
2020
int NumObjectsInCache { get; set; }
2121

@@ -33,15 +33,15 @@ public GameObjectOneWayCache(Transform parent, GameObject[] prefabs)
3333
{
3434
m_CacheParent = parent;
3535
m_InstanceIdToIndex = new Dictionary<int, int>();
36-
m_InstantiatedObjects = new List<GameObject>[prefabs.Length];
36+
m_InstantiatedObjects = new List<CachedObjectData>[prefabs.Length];
3737
m_NumObjectsActive = new int[prefabs.Length];
3838

3939
var index = 0;
4040
foreach (var prefab in prefabs)
4141
{
4242
var instanceId = prefab.GetInstanceID();
4343
m_InstanceIdToIndex.Add(instanceId, index);
44-
m_InstantiatedObjects[index] = new List<GameObject>();
44+
m_InstantiatedObjects[index] = new List<CachedObjectData>();
4545
m_NumObjectsActive[index] = 0;
4646
++index;
4747
}
@@ -57,32 +57,23 @@ public GameObjectOneWayCache(Transform parent, GameObject[] prefabs)
5757
public GameObject GetOrInstantiate(GameObject prefab)
5858
{
5959
if (!m_InstanceIdToIndex.TryGetValue(prefab.GetInstanceID(), out var index))
60-
{
6160
throw new ArgumentException($"Prefab {prefab.name} (ID: {prefab.GetInstanceID()}) is not in cache.");
62-
}
6361

6462
++NumObjectsActive;
65-
GameObject nextObject;
6663
if (m_NumObjectsActive[index] < m_InstantiatedObjects[index].Count)
6764
{
6865
var nextInCache = m_InstantiatedObjects[index][m_NumObjectsActive[index]];
6966
++m_NumObjectsActive[index];
70-
nextObject = nextInCache;
71-
}
72-
else
73-
{
74-
++NumObjectsInCache;
75-
var newObject = Object.Instantiate(prefab, m_CacheParent);
76-
++m_NumObjectsActive[index];
77-
m_InstantiatedObjects[index].Add(newObject);
78-
nextObject = newObject;
67+
foreach (var tag in nextInCache.randomizerTags)
68+
tag.Register();
69+
return nextInCache.instance;
7970
}
8071

81-
var tags = nextObject.GetComponents<RandomizerTag>();
82-
foreach (var tag in tags)
83-
tag.Register();
84-
85-
return nextObject;
72+
++NumObjectsInCache;
73+
var newObject = Object.Instantiate(prefab, m_CacheParent);
74+
++m_NumObjectsActive[index];
75+
m_InstantiatedObjects[index].Add(new CachedObjectData(newObject));
76+
return newObject;
8677
}
8778

8879
/// <summary>
@@ -96,16 +87,27 @@ public void ResetAllObjects()
9687
for (var i = 0; i < m_InstantiatedObjects.Length; ++i)
9788
{
9889
m_NumObjectsActive[i] = 0;
99-
foreach (var obj in m_InstantiatedObjects[i])
90+
foreach (var cachedObjectData in m_InstantiatedObjects[i])
10091
{
10192
// Position outside the frame
102-
obj.transform.localPosition = new Vector3(10000, 0, 0);
103-
var tags = obj.GetComponents<RandomizerTag>();
104-
foreach (var tag in tags)
93+
cachedObjectData.instance.transform.localPosition = new Vector3(10000, 0, 0);
94+
foreach (var tag in cachedObjectData.randomizerTags)
10595
tag.Unregister();
10696
}
10797
}
10898
}
10999
}
100+
101+
struct CachedObjectData
102+
{
103+
public GameObject instance;
104+
public RandomizerTag[] randomizerTags;
105+
106+
public CachedObjectData(GameObject instance)
107+
{
108+
this.instance = instance;
109+
randomizerTags = instance.GetComponents<RandomizerTag>();
110+
}
111+
}
110112
}
111113
}

0 commit comments

Comments
 (0)