private void Start()
    {
        CheckPoint.Load();
        Debug.Log("Resuming from: " + CheckPoint.progress);
        idlePools     = new List <Queue <GameObject> >();
        activeEnemies = new List <GameObject> [enemyDetails.Count];
        for (int i = 0; i < enemyDetails.Count; i++)
        {
            idlePools.Add(new Queue <GameObject>());
            activeEnemies[i] = new List <GameObject>();
        }

        for (int i = 0; i < enemyDetails.Count; i++)
        {
            GameObject child = new GameObject(enemyDetails[i].enemyName + " Pool");
            child.transform.parent = transform;

            if (enemyDetails[i].enemyPrefab != null)
            {
                if (enemyDetails[i].isBoss)
                {
                    GameObject obj = Instantiate(enemyDetails[i].enemyPrefab, new Vector3(0, POOL_OFFSET_Y, 0), Quaternion.identity);
                    obj.transform.parent = child.transform;
                    idlePools[i].Enqueue(obj);
                }
                else
                {
                    for (int j = 0; j < enemyDetails[i].preferredPoolSize; j++)
                    {
                        GameObject obj = Instantiate(enemyDetails[i].enemyPrefab, new Vector3(0, POOL_OFFSET_Y, 0), Quaternion.identity);
                        obj.transform.parent = child.transform;
                        idlePools[i].Enqueue(obj);
                    }
                }
            }
            else
            {
                Debug.Log(enemyDetails[i].enemyName + " Has no prefab provided");
            }
        }
        Resume();
    }