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); }