public static GameBlock Spawn(Sprite sprite, Sprite powerup, Vector3 localPosition, int block, Powerup?powerupId, Transform parent, int x, int y, bool isDeactivated = false) { // Attempt to use a pooled block tmp = null; for (int i = 0; i < Pool.Count; i++) { if (Pool[i] != null && !Pool[i].gameObject.activeSelf) { tmp = Pool[i]; tmp.gameObject.SetActive(true); tmp.InitializeFromPool(sprite, powerup, localPosition, block, powerupId, parent, x, y, isDeactivated); return(tmp); } } // Create a new block tmp = (GameBlock)Instantiate(prefab); tmp.InitializeFromPool(sprite, powerup, localPosition, block, powerupId, parent, x, y, isDeactivated); Pool.Add(tmp); return(tmp); }