diff --git a/Assets/Scripts/Services/Interfaces.meta b/Assets/Scripts/Services/Interfaces.meta new file mode 100644 index 0000000..ae8338e --- /dev/null +++ b/Assets/Scripts/Services/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 89ba33c34f0301d4fbe4d0a614d2da9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Services/Interfaces/IObjectPool.cs b/Assets/Scripts/Services/Interfaces/IObjectPool.cs new file mode 100644 index 0000000..7ce4b7b --- /dev/null +++ b/Assets/Scripts/Services/Interfaces/IObjectPool.cs @@ -0,0 +1,8 @@ +namespace Services.Interfaces { + public interface IObjectPool where T : class { + T Get(); + void Fill(); + void Release(T gameObject); + void Clear(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta b/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta new file mode 100644 index 0000000..8064512 --- /dev/null +++ b/Assets/Scripts/Services/Interfaces/IObjectPool.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8cda63dc65b2425b810a008823083079 +timeCreated: 1765625964 \ No newline at end of file diff --git a/Assets/Scripts/Services/ObjectPoolService.cs b/Assets/Scripts/Services/ObjectPoolService.cs new file mode 100644 index 0000000..fdc9db8 --- /dev/null +++ b/Assets/Scripts/Services/ObjectPoolService.cs @@ -0,0 +1,38 @@ +using System.Collections; +using System.Collections.Generic; +using Services.Interfaces; +using UnityEngine; + +namespace Services { + public class ObjectPoolService:IObjectPool { + private readonly GameObject prefab; + private readonly Transform parent; + private readonly int size; + + private readonly Stack pool = new Stack(); + + public ObjectPoolService(GameObject prefab, Transform parent, int size = 5) { + this.prefab = prefab; + this.parent = parent; + this.size = size; + } + + public GameObject Get() { + return this.pool.Count == 0 ? Object.Instantiate(this.prefab, this.parent) : this.pool.Pop(); + } + + public void Fill() { + for (int i = 0; i < this.size; i++) { + Object.Instantiate(this.prefab, this.parent); + } + } + + public void Release(GameObject gameObject) { + this.pool.Push(gameObject); + } + + public void Clear() { + this.pool.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Services/ObjectPoolService.cs.meta b/Assets/Scripts/Services/ObjectPoolService.cs.meta new file mode 100644 index 0000000..8c51558 --- /dev/null +++ b/Assets/Scripts/Services/ObjectPoolService.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 531f947d214849c99d3c09ae404406d6 +timeCreated: 1765625414 \ No newline at end of file