private IEnumerator ISpawnCrates()
    {
        isSpawning = true;

        //GameObject[] tempCrates = crates.ToArray();

        //for (int c = 0; c < tempCrates.Length; c++)
        //{
        //    GameObject newCrate = Instantiate(tempCrates[c]) as GameObject;

        //    newCrate.transform.position = spawner.position;

        //    Rigidbody rb = newCrate.GetComponent<Rigidbody>();
        //    rb.AddForce(-spawner.forward * pushForce);

        //    crates.Remove(tempCrates[c]);

        //    yield return new WaitForSeconds(spawnFrequency);
        //}

        // Unload products
        Debug.Log("Unloading products...", gameObject);
        foreach (TruckProduct product in products)
        {
            int amount = product.stockAmount;

            for (int pCount = 0; pCount < amount; pCount++)
            {
                GameObject newProduct = Instantiate(mapManager.GetStockTypePrefab(product.stockType)) as GameObject;

                newProduct.transform.position = spawner.position;

                Rigidbody rb = newProduct.GetComponent <Rigidbody>();
                rb.AddForce(CalculatePushDirection() * CalculatePushForce());

                yield return(new WaitForSeconds(spawnFrequency));
            }
        }

        // Unload crates
        Debug.Log("Unloading crate...", gameObject);
        foreach (TruckCrate crate in crates)
        {
            GameObject newCrate = Instantiate(cratePrefab) as GameObject;

            newCrate.transform.position = spawner.position;

            StockCrate stockCrate = newCrate.GetComponent <StockCrate>();

            stockCrate.SetStockType(crate.stockType);
            int remaining = stockCrate.AddQuantity(crate.stockAmount);

            //if (remaining > 0)
            //{
            //    crates.Add(new TruckCrate(crate.stockType, crate.stockAmount));
            //}

            Rigidbody rb = newCrate.GetComponent <Rigidbody>();
            rb.AddForce(CalculatePushDirection() * CalculatePushForce());

            yield return(new WaitForSeconds(spawnFrequency));
        }

        isSpawning = false;

        ClearTruck();

        animator.SetTrigger("Exit");

        activeSpawning = null;

        yield return(null);
    }