Skip to content

Commit 8a7b376

Browse files
committed
SyncRent
1 parent 5104e17 commit 8a7b376

34 files changed

+248
-115
lines changed

Assets/PoolSample/ComponentPools/Scripts/CubeBoxCollider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class CubeBoxCollider : ComponentPrefab<BoxCollider>
1313
{
1414
public CubeBoxCollider() : base(){}
1515

16-
protected override UniTask<BoxCollider> Instantiate(BoxCollider source, Transform parent, CancellationToken cancelToken)
16+
protected override UniTask<BoxCollider> InstantiateAsync(BoxCollider source, Transform parent, CancellationToken cancelToken)
1717
{
1818
BoxCollider instance;
1919

Packages/ZBase.Foundation.Pooling/GameObjectLazyPool/GlobalPools/Extensions/LazyGameObjectPool.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ public static class LazyGameObjectPool
99
{
1010
private static GlobalGameObjectPool GlobalGameObjectPool => SharedPool.Of<GlobalGameObjectPool>();
1111

12+
public static GameObject RentSync(GameObject gameObjectReference)
13+
=> GlobalGameObjectPool.RentSync(gameObjectReference);
14+
1215
public static async UniTask<GameObject> Rent(GameObject gameObjectReference)
1316
=> await GlobalGameObjectPool.Rent(gameObjectReference);
1417
public static async UniTask<GameObject> Rent(GameObjectPrefab gameObjectReference)

Packages/ZBase.Foundation.Pooling/GameObjectLazyPool/GlobalPools/GlobalGameObjectPool.cs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@ public async UniTask<GameObject> Rent(GameObject gameObjectReference)
1919
this._poolKeyCache.Add(hash, key = new GameObjectPrefab { Source = gameObjectReference });
2020
return await Rent(key);
2121
}
22+
23+
public GameObject RentSync(GameObject gameObjectReference)
24+
{
25+
var hash = gameObjectReference.GetInstanceID();
26+
if (!_poolKeyCache.TryGetValue(hash, out var key))
27+
this._poolKeyCache.Add(hash, key = new GameObjectPrefab { Source = gameObjectReference });
28+
return RentSync(key);
29+
}
30+
2231

2332
public async UniTask<GameObject> Rent(GameObjectPrefab gameObjectReference)
2433
{
@@ -33,12 +42,29 @@ public async UniTask<GameObject> Rent(GameObjectPrefab gameObjectReference)
3342
pool.OnPoolEmpty += OnPoolEmpty;
3443
this._pools.Add(instanceID, pool);
3544
}
36-
3745
GameObject item = await pool.Rent();
3846
this._dicTrackingInstancePools.Add(item.GetInstanceID(), pool);
3947
return item;
4048
}
4149

50+
private GameObject RentSync(GameObjectPrefab gameObjectReference)
51+
{
52+
var instanceID = gameObjectReference.Source.GetInstanceID();
53+
if (!_pools.TryGetValue(instanceID, out var pool))
54+
{
55+
if (gameObjectReference.Source.scene.IsValid())
56+
throw new Exception($"Non Prefab not supported {gameObjectReference.Source.name}");
57+
pool = new GameObjectItemPool(gameObjectReference);
58+
pool.OnReturnAction += RemoveTrackingItem;
59+
pool.OnItemDestroyAction += RemoveTrackingItem;
60+
pool.OnPoolEmpty += OnPoolEmpty;
61+
this._pools.Add(instanceID, pool);
62+
}
63+
GameObject item = pool.RentSync();
64+
this._dicTrackingInstancePools.Add(item.GetInstanceID(), pool);
65+
return item;
66+
}
67+
4268
public void Return(GameObject gameObject)
4369
{
4470
if (!gameObject)

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/Foundation/Prefabs/AddressComponentPrefab{T}.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,25 @@
88
namespace ZBase.Foundation.Pooling.AddressableAssets
99
{
1010
[Serializable]
11-
public class AddressComponentPrefab<T>
12-
: AddressPrefab<T>
13-
where T : Component
11+
public class AddressComponentPrefab<T> : AddressPrefab<T> where T : Component
1412
{
15-
protected override async UniTask<T> Instantiate(
16-
string source
13+
protected override async UniTask<T> InstantiateAsync(
14+
string source
1715
, Transform parent
1816
, CancellationToken cancelToken = default
1917
)
2018
{
21-
AsyncOperationHandle<GameObject> handle;
22-
23-
if (parent)
24-
handle = Addressables.InstantiateAsync(source, parent);
25-
else
26-
handle = Addressables.InstantiateAsync(source);
27-
19+
AsyncOperationHandle<GameObject> handle =
20+
parent ? Addressables.InstantiateAsync(source, parent) : Addressables.InstantiateAsync(source);
2821
var gameObject = await handle.WithCancellation(cancelToken);
22+
return gameObject.GetComponent<T>();
23+
}
2924

25+
protected override T Instantiate(string source, Transform parent, CancellationToken cancelToken = default)
26+
{
27+
AsyncOperationHandle<GameObject> handle =
28+
parent ? Addressables.InstantiateAsync(source, parent) : Addressables.InstantiateAsync(source);
29+
var gameObject = handle.WaitForCompletion();
3030
return gameObject.GetComponent<T>();
3131
}
3232

@@ -35,5 +35,7 @@ public override void Release(T instance)
3535
if (instance)
3636
Addressables.ReleaseInstance(instance.gameObject);
3737
}
38+
39+
3840
}
39-
}
41+
}

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/Foundation/Prefabs/AddressGameObjectPrefab.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,19 @@ namespace ZBase.Foundation.Pooling.AddressableAssets
1010
[Serializable]
1111
public class AddressGameObjectPrefab : AddressPrefab<GameObject>
1212
{
13-
protected override async UniTask<GameObject> Instantiate(
13+
protected override async UniTask<GameObject> InstantiateAsync(
1414
string source, Transform parent, CancellationToken cancelToken = default)
1515
{
1616
var handle = parent ? Addressables.InstantiateAsync(source, parent) : Addressables.InstantiateAsync(source);
1717
return await handle.WithCancellation(cancelToken);
1818
}
1919

20+
protected override GameObject Instantiate(string source, Transform parent, CancellationToken cancelToken = default)
21+
{
22+
var handle = parent ? Addressables.InstantiateAsync(source, parent) : Addressables.InstantiateAsync(source);
23+
return handle.WaitForCompletion();
24+
}
25+
2026
public override void Release(GameObject instance)
2127
{
2228
if (instance)

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/Foundation/Prefabs/AssetRefComponentPrefab{T}.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace ZBase.Foundation.Pooling.AddressableAssets
1111
public class AssetRefComponentPrefab<T> : AssetRefPrefab<T, AssetReferenceGameObject>
1212
where T : Component
1313
{
14-
protected override async UniTask<T> Instantiate(AssetReferenceGameObject source, Transform parent,
14+
protected override async UniTask<T> InstantiateAsync(AssetReferenceGameObject source, Transform parent,
1515
CancellationToken cancelToken = default)
1616
{
1717
AsyncOperationHandle<GameObject> handle =
@@ -20,6 +20,14 @@ protected override async UniTask<T> Instantiate(AssetReferenceGameObject source,
2020
return gameObject.GetComponent<T>();
2121
}
2222

23+
protected override T Instantiate(AssetReferenceGameObject source, Transform parent, CancellationToken cancelToken = default)
24+
{
25+
AsyncOperationHandle<GameObject> handle =
26+
parent ? source.InstantiateAsync(parent, true) : source.InstantiateAsync();
27+
var gameObject = handle.WaitForCompletion();
28+
return gameObject.GetComponent<T>();
29+
}
30+
2331
public override void Release(T instance)
2432
{
2533
if (instance && Source != null)

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/Foundation/Prefabs/AssetRefGameObjectPrefab.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,21 @@ namespace ZBase.Foundation.Pooling.AddressableAssets
1010
[Serializable]
1111
public class AssetRefGameObjectPrefab : AssetRefPrefab<GameObject, AssetReferenceGameObject>
1212
{
13-
protected override async UniTask<GameObject> Instantiate(
13+
protected override async UniTask<GameObject> InstantiateAsync(
1414
AssetReferenceGameObject source, Transform parent, CancellationToken cancelToken = default)
1515
{
1616
AsyncOperationHandle<GameObject> handle =
1717
parent ? source.InstantiateAsync(parent, true) : source.InstantiateAsync();
1818
return await handle.WithCancellation(cancelToken);
1919
}
2020

21+
protected override GameObject Instantiate(AssetReferenceGameObject source, Transform parent, CancellationToken cancelToken = default)
22+
{
23+
AsyncOperationHandle<GameObject> handle =
24+
parent ? source.InstantiateAsync(parent, true) : source.InstantiateAsync();
25+
return handle.WaitForCompletion();
26+
}
27+
2128
public override void Release(GameObject instance)
2229
{
2330
if (instance && Source != null)

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/ScriptablePools/ScriptableAddressComponentSource{T}.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,36 @@
77

88
namespace Unity.Pooling.Scriptables.AddressableAssets
99
{
10-
public class ScriptableAddressComponentSource<T> : ScriptableAddressSource
11-
where T : Component
10+
public class ScriptableAddressComponentSource<T> : ScriptableAddressSource where T : Component
1211
{
13-
public override async UniTask<Object> Instantiate(Transform parent, CancellationToken cancelToken = default)
12+
public override async UniTask<Object> InstantiateAsync(Transform parent,
13+
CancellationToken cancelToken = default)
1414
{
1515
var source = Source;
1616

1717
if (string.IsNullOrEmpty(source))
1818
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.assetName);
19-
20-
AsyncOperationHandle<GameObject> handle;
21-
22-
if (parent)
23-
handle = Addressables.InstantiateAsync(source, parent, true);
24-
else
25-
handle = Addressables.InstantiateAsync(source);
26-
19+
AsyncOperationHandle<GameObject> handle = parent
20+
? Addressables.InstantiateAsync(source, parent, true)
21+
: Addressables.InstantiateAsync(source);
2722
var gameObject = await handle.WithCancellation(cancelToken);
2823

2924
return gameObject.GetComponent<T>();
3025
}
3126

27+
public override Object Instantiate(Transform parent)
28+
{
29+
var source = Source;
30+
if (string.IsNullOrEmpty(source))
31+
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.assetName);
32+
var gameObject = Addressables.InstantiateAsync(source, parent, true).WaitForCompletion();
33+
return gameObject.GetComponent<T>();
34+
}
35+
3236
public override void Release(Object instance)
3337
{
3438
if (instance is T component)
3539
Addressables.ReleaseInstance(component.gameObject);
3640
}
3741
}
38-
}
42+
}

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/ScriptablePools/ScriptableAddressGameObjectSource.cs

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,33 @@ namespace Unity.Pooling.Scriptables.AddressableAssets
1414
)]
1515
public class ScriptableAddressGameObjectSource : ScriptableAddressSource
1616
{
17-
public override async UniTask<Object> Instantiate(Transform parent, CancellationToken cancelToken = default)
17+
public override async UniTask<Object> InstantiateAsync(Transform parent,
18+
CancellationToken cancelToken = default)
1819
{
1920
var source = Source;
2021

2122
if (string.IsNullOrEmpty(source))
2223
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.assetName);
23-
24-
AsyncOperationHandle<GameObject> handle;
25-
26-
if (parent)
27-
handle = Addressables.InstantiateAsync(source, parent, true);
28-
else
29-
handle = Addressables.InstantiateAsync(source);
30-
24+
AsyncOperationHandle<GameObject> handle = parent
25+
? Addressables.InstantiateAsync(source, parent, true)
26+
: Addressables.InstantiateAsync(source);
3127
return await handle.WithCancellation(cancelToken);
3228
}
3329

30+
public override Object Instantiate(Transform parent)
31+
{
32+
var source = Source;
33+
if (string.IsNullOrEmpty(source))
34+
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.assetName);
35+
return parent
36+
? Addressables.InstantiateAsync(source, parent, true).WaitForCompletion()
37+
: Addressables.InstantiateAsync(source).WaitForCompletion();
38+
}
39+
3440
public override void Release(Object instance)
3541
{
3642
if (instance is GameObject gameObject)
3743
Addressables.ReleaseInstance(gameObject);
3844
}
3945
}
40-
}
46+
}

Packages/ZBase.Foundation.Pooling/ZBase.Foundation.Pooling.Addressables/ScriptablePools/ScriptableAssetRefComponentSource{T}.cs

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,25 +11,30 @@ public class ScriptableAssetRefComponentSource<T>
1111
: ScriptableAssetRefSource<AssetReferenceGameObject>
1212
where T : Component
1313
{
14-
public override async UniTask<Object> Instantiate(Transform parent, CancellationToken cancelToken = default)
14+
public override async UniTask<Object> InstantiateAsync(Transform parent, CancellationToken cancelToken = default)
1515
{
1616
var source = Source;
1717

1818
if (source == null)
1919
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
20-
21-
AsyncOperationHandle<GameObject> handle;
22-
23-
if (parent)
24-
handle = source.InstantiateAsync(parent);
25-
else
26-
handle = source.InstantiateAsync();
27-
20+
AsyncOperationHandle<GameObject> handle = default;
21+
if (source != null)
22+
handle = parent ? source.InstantiateAsync(parent) : source.InstantiateAsync();
2823
var gameObject = await handle.WithCancellation(cancelToken);
29-
3024
return gameObject.GetComponent<T>();
3125
}
3226

27+
public override Object Instantiate(Transform parent)
28+
{
29+
var source = Source;
30+
if (source == null)
31+
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
32+
var gameObject = parent
33+
? source?.InstantiateAsync(parent).WaitForCompletion()
34+
: source?.InstantiateAsync().WaitForCompletion();
35+
return gameObject != null ? gameObject.GetComponent<T>() : null;
36+
}
37+
3338
public override void Release(Object instance)
3439
{
3540
if (instance is T component && Source != null)

0 commit comments

Comments
 (0)