using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Enums; using Services.Interfaces; using UnityEngine; using Utils; using Views; using Object = UnityEngine.Object; using Random = UnityEngine.Random; namespace Services { public class ObjectPoolService:IObjectPool { private readonly GemView[] prefabs; private readonly Transform parent; private readonly int size; private readonly Stack pool = new Stack(); public ObjectPoolService(GemView[] prefabs, Transform parent, int size = 5) { this.prefabs = prefabs; this.parent = parent; this.size = size; } public GemView Get(GemType type, Vector2Int position, float dropHeight) { int typeAsInt = (int) type; GemView gemView; if (this.pool.Count > 0) { gemView = this.pool.Pop(); gemView.transform.localPosition = new Vector2(position.x, position.y + dropHeight); return gemView; } gemView = Object.Instantiate(this.prefabs[typeAsInt], new Vector2(position.x, position.y + dropHeight), Quaternion.identity, this.parent); return gemView; } public void Release(GemView gemView) { if (gemView == null) return; gemView.gameObject.SetActive(false); this.pool.Push(gemView); } public void Clear() { this.pool.Clear(); } } }