/// <summary>
    /// Set up full SpawnItems and MicrobeItems bags in the spawnSystem based on the counts dictionaries.
    /// </summary>
    private void SetFullSpawnBags()
    {
        spawnBagSize = 0;

        foreach (Compound compound in compoundCloudCounts.Keys)
        {
            spawnBagSize += compoundCloudCounts[compound];
            for (int i = 0; i < compoundCloudCounts[compound]; i++)
            {
                spawnSystem.AddSpawnItem(new CloudItem(compound, compoundAmounts[compound], CloudSpawner));
            }
        }

        foreach (ChunkConfiguration chunk in chunkCounts.Keys)
        {
            spawnBagSize += chunkCounts[chunk];
            foreach (var mesh in chunk.Meshes)
            {
                if (mesh.LoadedScene == null)
                {
                    throw new ArgumentException("configured chunk spawner has a mesh that has no scene loaded");
                }
            }

            for (int i = 0; i < chunkCounts[chunk]; i++)
            {
                spawnSystem.AddSpawnItem(new ChunkItem(chunk, ChunkSpawner));
            }
        }

        foreach (Species key in speciesCounts.Keys)
        {
            if (!(key is MicrobeSpecies))
            {
                continue;
            }

            MicrobeSpecies species = (MicrobeSpecies)key;
            spawnBagSize += speciesCounts[key];

            for (int i = 0; i < speciesCounts[key]; i++)
            {
                MicrobeItem microbeItem = new MicrobeItem(species, MicrobeSpawner);
                microbeItem.IsWanderer = false;
                spawnSystem.AddSpawnItem(microbeItem);

                MicrobeItem wanderMicrobeItem = new MicrobeItem(species, MicrobeSpawner);
                wanderMicrobeItem.IsWanderer = true;
                spawnSystem.AddMicrobeItem(wanderMicrobeItem);
            }
        }

        spawnSystem.SetMicrobeBagSize();
    }